日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

引言

隨著越來越多的人參與到互聯(lián)網(wǎng)的浪潮來,曾經(jīng)的單體應(yīng)用架構(gòu)越來越無法滿足需求,所以,分布式集群架構(gòu)出現(xiàn),也因此,分布式搭建開發(fā)成為了Web開發(fā)者必掌握的技能之一。

那什么是分布式呢?怎么實現(xiàn)分布式以及怎么處理分布式帶來的問題呢?本系列文章就來源于對分布式各組件系統(tǒng)的學(xué)習(xí)總結(jié)。

包含但不限于Zookeeper、Dubbo、消息隊列(ActiveMQ、Kafka、RabbitMQ)、Nosql(redis、MongoDB)、Niginx、分庫分表MyCat、Netty等內(nèi)容。

一、什么是分布式

簡單的說,“分工協(xié)作,專人做專事”就是分布式的概念。

就好比你是你們公司唯一的碼農(nóng),那么前后端都需要你自己來開發(fā)(單體架構(gòu)),但隨著業(yè)務(wù)的增長,你確實忙不過來了,老板給你招來了一個前端,那么你就只需要專注后端開發(fā)就行了(分布式)。

但是軟件的分布式搭建遠遠不像現(xiàn)實例子中這么簡單,需要考慮和處理很多方面的問題,我們先了解以下幾個常見的概念:

  • 集群:你們公司業(yè)務(wù)增長的非常快,老板發(fā)現(xiàn)你一個后端忙不過來了,就又招了幾個后端開發(fā)來協(xié)助你,這就是后端集群;再往后,發(fā)現(xiàn)前端也忙不過來了,又配備幾個前端,就是前端集群。所以也不難看出,將應(yīng)用拆分后,你可以有針對性地擴展單個服務(wù),做成集群,這就是分布式的好處之一。
  • 節(jié)點:這個也非常好理解,一個服務(wù)就是一個節(jié)點,比如你就是后端集群中的一個節(jié)點,而集群本身也可以看成是整個應(yīng)用的一個集群節(jié)點。
  • 副本:副本就是為服務(wù)和數(shù)據(jù)提供的冗余,保證高可用。
  • 中間件:為開發(fā)者提供便利,屏蔽復(fù)雜的底層的一類框架組件。如服務(wù)管理通信、序列化、負(fù)載均衡等組件。
大白話給你講分布式架構(gòu),3分鐘讓你學(xué)一遍

 

上圖就是一個簡單的分布式架構(gòu),但并不是所有的應(yīng)用一開始就要設(shè)計為分布式架構(gòu)。

因為一開始業(yè)務(wù)量并不大,沒有必要耗費大量的時間和成本去完成一個分布式架構(gòu),甚至有可能到最后都用不上,因此在設(shè)計時我們應(yīng)該遵循演進原則,由簡入深。

下面就來簡單分析一下分布式架構(gòu)的演進過程。

二、分布式架構(gòu)的演化過程

單機版

以商城為例,為了簡單說明,這里就只列出用戶、訂單、配送服務(wù)。

大白話給你講分布式架構(gòu),3分鐘讓你學(xué)一遍

 

如圖,大部分應(yīng)用最開始都是將應(yīng)用和數(shù)據(jù)庫放到一臺物理機上提供服務(wù),但隨著訪問量的提升,服務(wù)器負(fù)載越來越高。

我們首先會優(yōu)化代碼、對機器做垂直擴容(內(nèi)存、容量)等,但單臺機器的性能是存在上限的,且對單機擴容的性價比會隨著性能的提升越來越低,那我們就會想到增加服務(wù)器。

將應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器分離

在一開始,我們可能只會增加一臺服務(wù)器,并將應(yīng)用和數(shù)據(jù)庫分離:

大白話給你講分布式架構(gòu),3分鐘讓你學(xué)一遍

 

搭建應(yīng)用服務(wù)器集群

隨著訪問量的繼續(xù)增加,單臺應(yīng)用服務(wù)器也無法滿足需求了,我們就需要搭建應(yīng)用服務(wù)器集群來對外提供服務(wù)了

大白話給你講分布式架構(gòu),3分鐘讓你學(xué)一遍

 

但是,在搭建應(yīng)用服務(wù)器集群之后,問題就出現(xiàn)了,用戶在訪問時,應(yīng)該到哪個服務(wù)器上去?

如何平均服務(wù)器壓力?以及用戶的session如何維護(A首先訪問了1號應(yīng)用服務(wù)器并登陸,但下次請求可能是去到2號服務(wù)器,但這臺服務(wù)器上并沒有用戶的session信息)?

我們可以在用戶層和應(yīng)用層之間加上一個負(fù)載均衡器來平衡服務(wù)器的負(fù)載,session可以采取同步的方式,或者增加單獨的session共享服務(wù)器。

數(shù)據(jù)庫讀寫分離

應(yīng)用層的問題暫時解決了,但是此時數(shù)據(jù)庫又頂不住了。那該如何做呢?

只是簡單的增加數(shù)據(jù)庫的服務(wù)器來提供存儲和訪問能力么?那肯定不行,這樣數(shù)據(jù)就不一致了。

所以我們需要將數(shù)據(jù)庫分為讀庫和寫庫。查詢請求都到讀庫去,而寫入請求都到寫庫去。

大白話給你講分布式架構(gòu),3分鐘讓你學(xué)一遍

 

但這樣也存在幾個問題:

  • 數(shù)據(jù)如何同步以及同步延遲如何處理?
  • 應(yīng)用層數(shù)據(jù)源的選擇
  • 大數(shù)據(jù)查詢搜索,可以引入搜索引擎
  • 避免每次訪問直接到達數(shù)據(jù)庫,可以引入redis等緩存數(shù)據(jù)庫緩存熱點數(shù)據(jù)

問題看似都解決了,但是每個數(shù)據(jù)庫都存儲的是同樣的數(shù)據(jù),隨著業(yè)務(wù)繼續(xù)擴大, 我們就不得不考慮對數(shù)據(jù)庫做水平或垂直拆分:

  • 水平拆分:將同一個表中的數(shù)據(jù)拆分至多個數(shù)據(jù)庫中
  • 垂直拆分:將不同業(yè)務(wù)的數(shù)據(jù)放到不同的數(shù)據(jù)庫中
大白話給你講分布式架構(gòu),3分鐘讓你學(xué)一遍

 


應(yīng)用拆分

業(yè)務(wù)繼續(xù)增長,數(shù)據(jù)庫達到瓶頸時可以繼續(xù)增加服務(wù)器解決,但是應(yīng)用層呢?也只是單純的增加服務(wù)器么?

基于二八原則,其實大部分訪問量是集中在20%的功能上的,如果我們只是單純的增加服務(wù)器,那么無疑會浪費掉許多的資源,所以我們會想到能不能針對這20%的應(yīng)用做擴展呢?

當(dāng)然是可以的,只不過我們需要先將應(yīng)用拆分為多個子系統(tǒng)(一般是根據(jù)業(yè)務(wù)):

大白話給你講分布式架構(gòu),3分鐘讓你學(xué)一遍

 

隨著應(yīng)用拆分隨之而來的問題是,公用的代碼如何處理?各服務(wù)之間如何通信?

公用代碼我們不可能放到每個服務(wù)中去,而是應(yīng)該提出來對外提供服務(wù),同時服務(wù)之間的調(diào)用可以通過RPC或者HTTP方式來實現(xiàn)。

演化至此,這樣的架構(gòu)就是一個成熟的分布式架構(gòu)了。

但是,架構(gòu)還是會隨著業(yè)務(wù)和技術(shù)的提升不停地演化;而此時你有沒有發(fā)現(xiàn)這樣的一個架構(gòu)和馮諾伊曼結(jié)構(gòu)很像呢!

輸入輸出設(shè)備對應(yīng)用戶和服務(wù)之間的輸入輸出,數(shù)據(jù)庫服務(wù)器就像是存儲設(shè)備,而整個應(yīng)用層就像是一個CPU(控制器、運算器)。

所以,分布式架構(gòu)可以簡單的理解為將多臺計算機組成的一臺超級計算機。

三、分布式架構(gòu)的設(shè)計

在設(shè)計分布式架構(gòu)時,我們需要了解幾個基本的概念。

  • 主流架構(gòu)模型-SOA和微服務(wù)
  • CAP和BASE理論
  • DDD(領(lǐng)域驅(qū)動設(shè)計)

這些理論限于篇幅原因,這里就不展開詳述,讀者可自行查閱。下面主要來談?wù)劮植际郊軜?gòu)的高可用設(shè)計。

分布式架構(gòu)的高可用設(shè)計

在分布式架構(gòu)中,常常面臨的兩個矛盾的問題是一致性高可用,這兩個是無法同時滿足的,那我們舍誰取誰呢?

從用戶的角度分析,我們寧可獲取到舊數(shù)據(jù),也不愿意等半天都打不開應(yīng)用,所以常常是保證高可用,讓數(shù)據(jù)達到最終一致性,那么如何設(shè)計高可用的分布式架構(gòu)呢?主要從以下幾個方面:

  • 搭建服務(wù)集群,提高負(fù)載,避免單點故障。尤其是特別重要的服務(wù),如訪問量較高的服務(wù)和核心服務(wù)(一旦掛掉就會導(dǎo)致整個應(yīng)用不可用的服務(wù))。
  • 應(yīng)對災(zāi)難,搭建異地災(zāi)備,預(yù)防地區(qū)因發(fā)生地震、臺風(fēng)等自然災(zāi)害導(dǎo)致地區(qū)的集群服務(wù)器都不可用。
  • 接口限流以及服務(wù)降級。為防止過高的并發(fā)量造成服務(wù)器負(fù)載過高而出現(xiàn)故障,應(yīng)對接口限流,同時,當(dāng)某個或多個服務(wù)出現(xiàn)故障時,應(yīng)當(dāng)服務(wù)降級,避免拖累整個應(yīng)用。比如支付時因網(wǎng)絡(luò)故障等導(dǎo)致無法支付,但搜索商品和下單仍然可用。
  • 故障監(jiān)控報警。
  • 服務(wù)的可伸縮性,易于水平擴張服務(wù)器數(shù)量。
  • 使用緩存降低數(shù)據(jù)庫壓力。
  • 使用CDN等加速靜態(tài)資源的訪問。

高可用的分布式架構(gòu)需要考慮非常多的方面,針對不同的場景有不同的解決方案,而對于不同的公司而言也不需要一應(yīng)俱全,需要在實踐中多思考總結(jié),根據(jù)自己的業(yè)務(wù)情況來設(shè)計。

總結(jié)

本文從理論層面講述了分布式的基本概念、演化過程,以及設(shè)計,從宏觀角度搞清楚分布式的起源以及分布式帶來的一系列問題,也就能明白各項技術(shù)出現(xiàn)的原因以及應(yīng)用的場景。

作者:夜勿語 來源:https://blog.csdn.net/l6108003/article/details/94835586

分享到:
標(biāo)簽:分布式 架構(gòu)
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定