国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

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

2019-11-14 16:40:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

 

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

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

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

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

 

一:分層和分割

1:分層

    對(duì)于分層,我們可能非常熟知了,數(shù)據(jù)訪問(wèn)層,業(yè)務(wù)邏輯層,緩存層,應(yīng)用層,層層專(zhuān)注于自己的業(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ā)的讀寫(xiě)操作,很典型的一個(gè)例子就是電商中的秒殺,這種高并發(fā)的寫(xiě)操作,如果一下子都涌入到數(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)存中,并且支持序列

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

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

 

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新巴尔虎右旗| 天镇县| 葵青区| 高碑店市| 青海省| 南溪县| 凤庆县| 梁平县| 东丽区| 金昌市| 罗江县| 舞钢市| 岑巩县| 隆回县| 新巴尔虎左旗| 旬阳县| 皮山县| 谢通门县| 大名县| 临武县| 衡山县| 奉新县| 常熟市| 瑞安市| 永善县| 阿拉善右旗| 河津市| 元氏县| 岫岩| 五家渠市| 郯城县| 拉萨市| 日土县| 纳雍县| 岱山县| 赫章县| 余姚市| 中阳县| 乳源| 韶关市| 信宜市|