日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

分布式中的異步通信

系統(tǒng) 1824 0

我也要談?wù)劥笮途W(wǎng)站架構(gòu)之系列(4)——分布式中的異步通信

?

?

  我們知道在面向?qū)ο缶幊讨校倳?huì)想著各種辦法來(lái)實(shí)現(xiàn)代碼的解耦,從而讓項(xiàng)目中的各種人員面對(duì)自己熟悉的業(yè)務(wù)進(jìn)行開發(fā),

做到術(shù)業(yè)有專攻,比如大家非常熟悉的三層架構(gòu),MVC,MVP以及MVVM模式,讓前端設(shè)計(jì)專注于html的制作,讓后端開發(fā)人員

更加專注于業(yè)務(wù)邏輯的編寫,可以看到,我們這么做的目的就是想最大程度的做到系統(tǒng)的可擴(kuò)展和可維護(hù)性,那么我們的大型網(wǎng)站

是不是也要遵守這種模式呢?

?

一:分層和分割

1:分層

??? 對(duì)于分層,我們可能非常熟知了,數(shù)據(jù)訪問(wèn)層,業(yè)務(wù)邏輯層,緩存層,應(yīng)用層,層層專注于自己的業(yè)務(wù),然后根據(jù)需要建立起

?各自的集群,各自分離部署,而從達(dá)到系統(tǒng)的擴(kuò)展性和維護(hù)性。

?

2:分割

? ? 如果說(shuō)前面是橫向切割,那分割就是縱向切割,我們可以把網(wǎng)站的整體業(yè)務(wù)切分成很多的小業(yè)務(wù),比如博客園的導(dǎo)航欄,我們都

可以認(rèn)為是一個(gè)獨(dú)立的網(wǎng)站,配上各自的二級(jí)域名,建立各自的集群來(lái)實(shí)現(xiàn)系統(tǒng)的擴(kuò)展性,當(dāng)然這個(gè)粒度可大可小。

如果說(shuō)這些子網(wǎng)站不存在相互調(diào)用,那么我們新增模塊或者修改模塊基本上都不會(huì)對(duì)其他模塊造成影響,這也是我們做擴(kuò)展性的終極

目標(biāo),現(xiàn)在既然都做到解耦了,下面的目標(biāo)就是做如何通信了,通信可以分為“同步”和“異步”,這篇主要是討論下異步操作,在分布式

系統(tǒng)中做到"異步操作“,當(dāng)然少不了強(qiáng)大的消息隊(duì)列。

?

二:消息隊(duì)列

? ? 在分布式的系統(tǒng)中使用消息隊(duì)列后,我們的生產(chǎn)者只管向消息隊(duì)列中甩完數(shù)據(jù)后立即返回,而不管是哪個(gè)消費(fèi)者來(lái)消費(fèi),可以看到

其實(shí)消息隊(duì)列有如下三個(gè)優(yōu)點(diǎn)。

?

1. ?加快網(wǎng)站的相應(yīng)速度

  ? 這個(gè)剛才也說(shuō)了,應(yīng)用層直接把消息給消息隊(duì)列然后直接返回調(diào)用端,這樣就避免了處理復(fù)雜的業(yè)務(wù)邏輯然后同步的插入到數(shù)據(jù)

? 庫(kù)后再返回造成的響應(yīng)延遲,在很多網(wǎng)站上用戶提交訂單就是這么處理的,應(yīng)用層生成一個(gè)訂單號(hào)之后,將訂單丟給消息隊(duì)列,然后

? 直接到訂單成功頁(yè)面,此時(shí)后端消費(fèi)者對(duì)訂單還沒(méi)有處理完畢,因?yàn)楹竺鏁?huì)有比較多的數(shù)據(jù)操作,比如減庫(kù)存,數(shù)據(jù)庫(kù)同步等等,而

? 用戶如果想要看到訂單詳情,需要點(diǎn)擊“訂單號(hào)”才能進(jìn)入到訂單詳情頁(yè),這種處理也是因?yàn)橄㈥?duì)列的非及時(shí)性,所以需要得到網(wǎng)站

? 設(shè)計(jì)方改進(jìn)和支持

?

2. 提供系統(tǒng)的可用性

? ? 既然是異步操作,就造成了生產(chǎn)者不知道消費(fèi)者的存在,而反過(guò)來(lái)消費(fèi)者不知道生產(chǎn)者的存在,如果消費(fèi)者掛了就不會(huì)影響到生產(chǎn)者,

? 生產(chǎn)者還會(huì)照常無(wú)誤的向消息隊(duì)列甩消息,當(dāng)消費(fèi)者恢復(fù)正常后就會(huì)繼續(xù)消費(fèi)消息隊(duì)列,系統(tǒng)的表現(xiàn)可能就是email或者短信延遲收到,

? 不會(huì)對(duì)系統(tǒng)造成太大的影響。

?

3. 并發(fā)削峰

? ?既然是大型網(wǎng)站就免不了高并發(fā)的讀寫操作,很典型的一個(gè)例子就是電商中的秒殺,這種高并發(fā)的寫操作,如果一下子都涌入到數(shù)據(jù)庫(kù)

里面去了,會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的壓力非常大,從而導(dǎo)致客戶端的訪問(wèn)延遲,就是不掛也容易造成數(shù)據(jù)庫(kù)的死鎖從而造成很多靈異事件,遇到這

種一擁而入的情況,我們就必須進(jìn)行線性化操作,在代碼層面上我們可以用lock機(jī)制來(lái)串行化,在分布式中我們用“消息隊(duì)列”來(lái)串行化,

而且還可以通過(guò)邏輯操作來(lái)對(duì)消息隊(duì)列進(jìn)行動(dòng)態(tài)的防洪,控洪。

?

?在消息隊(duì)列的選擇上,微軟有自己的MSMQ,但是在大型網(wǎng)站中,我們的消息隊(duì)列同樣需要集群,并且希望能跑在內(nèi)存中,并且支持序列

化硬盤,同時(shí)在“伸縮性”和“可靠性”上要有好的作為,所以推薦大家用用開源的RabbitMQ,網(wǎng)址: http://www.rabbitmq.com/ ? 不過(guò)很

多公司都有自己開發(fā)的消息隊(duì)列,比如攜程的CMessage,淘寶的MetaQ。

?

?

?
?

分布式中的異步通信


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 洞头县| 乡宁县| 锦州市| 九龙县| 沁阳市| 诏安县| 花莲县| 张家川| 阿克| 田阳县| 当阳市| 大石桥市| 巢湖市| 台湾省| 黄浦区| 阿图什市| 洛宁县| 桑日县| 阿克苏市| 古田县| 凤凰县| 墨竹工卡县| 广宁县| 浑源县| 龙海市| 扬中市| 饶平县| 孟州市| 潜山县| 凤台县| 冷水江市| 民县| 阳西县| 青岛市| 荥阳市| 化隆| 英山县| 赤城县| 阿勒泰市| 岚皋县| 杨浦区|