上次說(shuō)了分布式架構(gòu)的歷史,分布式架構(gòu)需要考慮的問(wèn)題,這次繼續(xù)說(shuō)分布式架構(gòu)。
負(fù)載均衡+容錯(cuò)+服務(wù)配置+健康檢測(cè) 這些功能怎么解決呢?一個(gè)一個(gè)的去編碼實(shí)現(xiàn)么?。有沒(méi)有現(xiàn)成的方案可以直接實(shí)現(xiàn)這些功能?Nginx完全支持這些功能。所以企業(yè)在做輕量級(jí)架構(gòu) 會(huì)采用 Http+Nginx 方式。
這個(gè)架構(gòu)有什么瓶頸,nginx掛了的話,是不是服務(wù)都不行了,可以在中間層可以搞keeplived,做nginx的負(fù)載。
完成nginx內(nèi)部的負(fù)載,Nginx本身還可以根據(jù)業(yè)務(wù)進(jìn)行垂直拆分。如果用戶server1,直接到serverN了怎么辦,其實(shí)這個(gè)架構(gòu)本身就是輕量級(jí)的,本身就支持不了了。
有老鐵愛(ài)說(shuō),性能不夠加服務(wù)器,在于自身是否支持彈性的擴(kuò)展,如果系統(tǒng)不支持,加服務(wù)器沒(méi)用的。
優(yōu)點(diǎn)
簡(jiǎn)單快速、幾乎沒(méi)有學(xué)習(xí)成本
適用場(chǎng)景
輕量級(jí)分布式系統(tǒng)、局部分布式架構(gòu)。
瓶頸
Nginx中心負(fù)載、Http傳輸、JSON序列化、開(kāi)發(fā)效率、運(yùn)維效率。
1.Http傳輸
http傳輸本身比較復(fù)雜有請(qǐng)求頭,有請(qǐng)求體,傳輸內(nèi)容比較多。如果RPC就不用考慮這些。
2.JSON序列化
真心不高,比java的二進(jìn)制序列化效率還要低,最大的瓶頸就在于json的解析上。
3.運(yùn)維效率
server1,server2的配置都是在nginx上的,配置多的話對(duì)于運(yùn)維人員增加了工作量。
4.開(kāi)發(fā)效率
也不是不高,反正就是需要解析麻煩,還得拼麻煩。
5.Nginx中心負(fù)載
層和層之間通信,消耗nginx,nginx中心進(jìn)行負(fù)載,肯定沒(méi)有直接連接塊,畢竟有中間商【賺差價(jià)】
基于瓶頸考慮大型系統(tǒng)需要一個(gè)更加專(zhuān)業(yè)的方案,該方案必須做到以下幾點(diǎn):
> springcloud和dubbo就是按照這些設(shè)計(jì)方案來(lái)進(jìn)行設(shè)計(jì)的。
1.去中心化,客戶端直連服務(wù)端
2.動(dòng)態(tài)注冊(cè)和發(fā)現(xiàn)服務(wù)
3.軟負(fù)載均衡實(shí)現(xiàn)
4.高效穩(wěn)定的網(wǎng)絡(luò)傳輸
5.高效可容錯(cuò)的序列化
(1)注冊(cè)中心邏輯
1.服務(wù)端動(dòng)態(tài)注冊(cè)服務(wù)提供者信息
2.客戶端從注冊(cè)中心接收服務(wù)提供者信息,并存儲(chǔ)至本地緩存
3.注冊(cè)中心實(shí)時(shí)監(jiān)聽(tīng)提供者狀態(tài),如果變更將即時(shí)通知客戶端
(2)調(diào)用邏輯
1.負(fù)載均衡
2.容錯(cuò)
3.對(duì)服務(wù)調(diào)用者透明,操作數(shù)據(jù)庫(kù)的時(shí)候只需要操作對(duì)應(yīng)的接口,就可以完成對(duì)數(shù)據(jù)庫(kù)的操作,這個(gè)就是透明。
(3)傳輸模塊
mina、servlet 容器、netty
(4)序列化模塊
kryo、hessian、java、protobuf、JSON、XML
所有RPC框架的邏輯
spring cloud
> 本身是個(gè)技術(shù)棧,
服務(wù)發(fā)現(xiàn)——Netflix Eureka
客服端負(fù)載均衡——Netflix Ribbon
斷路器——Netflix Hystrix
服務(wù)網(wǎng)關(guān)——Netflix Zuul
分布式配置——Spring Cloud Config
Doubbo
> Provider:暴露服務(wù)的服務(wù)提供方
Container:服務(wù)運(yùn)行容器
Consumer:調(diào)用服務(wù)的消費(fèi)方
Registry:注冊(cè)服務(wù)與發(fā)現(xiàn)服務(wù)中心
Monitor:統(tǒng)計(jì)服務(wù)調(diào)用的監(jiān)控中心(可有可無(wú))
官網(wǎng):http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
PS:微服務(wù)的業(yè)內(nèi)主流的java框架就是springcloud 和dubbo,他們的設(shè)計(jì)思路都是按照分布式的設(shè)計(jì)思路來(lái)的,主要還是圍繞服務(wù),發(fā)現(xiàn),注冊(cè),調(diào)用,負(fù)載。一定要明白他的設(shè)計(jì)思路。這樣對(duì)學(xué)習(xí)springcloud和dubbo好處多多。下面的開(kāi)始一起懟深入懟一把dubbo。
聯(lián)系客服