成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

到底什么時(shí)候該使用MQ

yedf / 1030人閱讀

摘要:典型場(chǎng)景二上游不關(guān)心執(zhí)行結(jié)果上游需要關(guān)注執(zhí)行結(jié)果時(shí)要用調(diào)用,上游不關(guān)注執(zhí)行結(jié)果時(shí),就可以使用了。

【典型場(chǎng)景一:數(shù)據(jù)驅(qū)動(dòng)的任務(wù)依賴(lài)】

什么是任務(wù)依賴(lài),舉個(gè)栗子,互聯(lián)網(wǎng)公司經(jīng)常在凌晨進(jìn)行一些數(shù)據(jù)統(tǒng)計(jì)任務(wù),這些任務(wù)之間有一定的依賴(lài)關(guān)系,比如:

1)task3需要使用task2的輸出作為輸入

2)task2需要使用task1的輸出作為輸入

這樣的話(huà),tast1, task2, task3之間就有任務(wù)依賴(lài)關(guān)系,必須task1先執(zhí)行,再task2執(zhí)行,載task3執(zhí)行。

對(duì)于這類(lèi)需求,常見(jiàn)的實(shí)現(xiàn)方式是,使用cron人工排執(zhí)行時(shí)間表:

1)task1,0:00執(zhí)行,經(jīng)驗(yàn)執(zhí)行時(shí)間為50分鐘

2)task2,1:00執(zhí)行(為task1預(yù)留10分鐘buffer),經(jīng)驗(yàn)執(zhí)行時(shí)間也是50分鐘

3)task3,2:00執(zhí)行(為task2預(yù)留10分鐘buffer)

這種方法的壞處是:

1)如果有一個(gè)任務(wù)執(zhí)行時(shí)間超過(guò)了預(yù)留buffer的時(shí)間,將會(huì)得到錯(cuò)誤的結(jié)果,因?yàn)楹笾萌蝿?wù)不清楚前置任務(wù)是否執(zhí)行成功,此時(shí)要手動(dòng)重跑任務(wù),還有可能要調(diào)整排班表

2)總?cè)蝿?wù)的執(zhí)行時(shí)間很長(zhǎng),總是要預(yù)留很多buffer,如果前置任務(wù)提前完成,后置任務(wù)不會(huì)提前開(kāi)始

3)如果一個(gè)任務(wù)被多個(gè)任務(wù)依賴(lài),這個(gè)任務(wù)將會(huì)稱(chēng)為關(guān)鍵路徑,排班表很難體現(xiàn)依賴(lài)關(guān)系,容易出錯(cuò)

4)如果有一個(gè)任務(wù)的執(zhí)行時(shí)間要調(diào)整,將會(huì)有多個(gè)任務(wù)的執(zhí)行時(shí)間要調(diào)整

無(wú)論如何,采用“cron排班表”的方法,各任務(wù)耦合,誰(shuí)用過(guò)誰(shuí)痛誰(shuí)知道(采用此法的請(qǐng)?jiān)u論留言)

優(yōu)化方案是,采用MQ解耦:

1)task1準(zhǔn)時(shí)開(kāi)始,結(jié)束后發(fā)一個(gè)“task1 done”的消息

2)task2訂閱“task1 done”的消息,收到消息后第一時(shí)間啟動(dòng)執(zhí)行,結(jié)束后發(fā)一個(gè)“task2 done”的消息

3)task3同理

采用MQ的優(yōu)點(diǎn)是:

1)不需要預(yù)留buffer,上游任務(wù)執(zhí)行完,下游任務(wù)總會(huì)在第一時(shí)間被執(zhí)行

2)依賴(lài)多個(gè)任務(wù),被多個(gè)任務(wù)依賴(lài)都很好處理,只需要訂閱相關(guān)消息即可

3)有任務(wù)執(zhí)行時(shí)間變化,下游任務(wù)都不需要調(diào)整執(zhí)行時(shí)間

需要特別說(shuō)明的是,MQ只用來(lái)傳遞上游任務(wù)執(zhí)行完成的消息,并不用于傳遞真正的輸入輸出數(shù)據(jù)。

【典型場(chǎng)景二:上游不關(guān)心執(zhí)行結(jié)果】

上游需要關(guān)注執(zhí)行結(jié)果時(shí)要用“調(diào)用”,上游不關(guān)注執(zhí)行結(jié)果時(shí),就可以使用MQ了。

舉個(gè)栗子,58同城的很多下游需要關(guān)注“用戶(hù)發(fā)布帖子”這個(gè)事件,比如招聘用戶(hù)發(fā)布帖子后,招聘業(yè)務(wù)要獎(jiǎng)勵(lì)58豆,房產(chǎn)用戶(hù)發(fā)布帖子后,房產(chǎn)業(yè)務(wù)要送2個(gè)置頂,二手用戶(hù)發(fā)布帖子后,二手業(yè)務(wù)要修改用戶(hù)統(tǒng)計(jì)數(shù)據(jù)。

對(duì)于這類(lèi)需求,常見(jiàn)的實(shí)現(xiàn)方式是,使用調(diào)用關(guān)系:

帖子發(fā)布服務(wù)執(zhí)行完成之后,調(diào)用下游招聘業(yè)務(wù)、房產(chǎn)業(yè)務(wù)、二手業(yè)務(wù),來(lái)完成消息的通知,但事實(shí)上,這個(gè)通知是否正常正確的執(zhí)行,帖子發(fā)布服務(wù)根本不關(guān)注。

這種方法的壞處是:

1)帖子發(fā)布流程的執(zhí)行時(shí)間增加了

2)下游服務(wù)當(dāng)機(jī),可能導(dǎo)致帖子發(fā)布服務(wù)受影響,上下游邏輯+物理依賴(lài)嚴(yán)重

3)每當(dāng)增加一個(gè)需要知道“帖子發(fā)布成功”信息的下游,修改代碼的是帖子發(fā)布服務(wù),這一點(diǎn)是最?lèi)盒牡?,屬于架?gòu)設(shè)計(jì)中典型的依賴(lài)倒轉(zhuǎn)

優(yōu)化方案是,采用MQ解耦:

1)帖子發(fā)布成功后,向MQ發(fā)一個(gè)消息

2)哪個(gè)下游關(guān)注“帖子發(fā)布成功”的消息,主動(dòng)去MQ訂閱

采用MQ的優(yōu)點(diǎn)是:

1)上游執(zhí)行時(shí)間短

2)上下游邏輯+物理解耦,除了與MQ有物理連接,模塊之間都不相互依賴(lài)

3)新增一個(gè)下游消息關(guān)注方,上游不需要修改任何代碼

【典型場(chǎng)景三:上游關(guān)注執(zhí)行結(jié)果,但執(zhí)行時(shí)間很長(zhǎng)】

有時(shí)候上游需要關(guān)注執(zhí)行結(jié)果,但執(zhí)行結(jié)果時(shí)間很長(zhǎng)(典型的是調(diào)用離線(xiàn)處理,或者跨公網(wǎng)調(diào)用),也經(jīng)常使用回調(diào)網(wǎng)關(guān)+MQ來(lái)解耦。

舉個(gè)栗子,微信支付,跨公網(wǎng)調(diào)用微信的接口,執(zhí)行時(shí)間會(huì)比較長(zhǎng),但調(diào)用方又非常關(guān)注執(zhí)行結(jié)果,此時(shí)一般怎么玩呢?

一般采用“回調(diào)網(wǎng)關(guān)+MQ”方案來(lái)解耦:

1)調(diào)用方直接跨公網(wǎng)調(diào)用微信接口

2)微信返回調(diào)用成功,此時(shí)并不代表返回成功

3)微信執(zhí)行完成后,回調(diào)統(tǒng)一網(wǎng)關(guān)

4)網(wǎng)關(guān)將返回結(jié)果通知MQ

5)請(qǐng)求方收到結(jié)果通知

這里需要注意的是,不應(yīng)該由回調(diào)網(wǎng)關(guān)來(lái)調(diào)用上游來(lái)通知結(jié)果,如果是這樣的話(huà),每次新增調(diào)用方,回調(diào)網(wǎng)關(guān)都需要修改代碼,仍然會(huì)反向依賴(lài),使用回調(diào)網(wǎng)關(guān)+MQ的方案,新增任何對(duì)微信支付的調(diào)用,都不需要修改代碼啦。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72789.html

相關(guān)文章

  • MappedByteBuffer VS FileChannel 孰強(qiáng)孰弱?

    摘要:而每個(gè)文件系統(tǒng)又可以設(shè)置不同的調(diào)度算法,另外,還有虛擬內(nèi)存缺頁(yè)中斷帶來(lái)的性能毛刺良心的提供了調(diào)優(yōu)的腳本,這點(diǎn)做的不錯(cuò)跑題了。測(cè)試環(huán)境核線(xiàn)程內(nèi)存磁盤(pán)讀寫(xiě)左右虛擬內(nèi)存未關(guān)閉,大小測(cè)試注意點(diǎn)為了防止緩存的影響,每次都生成一個(gè)新的文件進(jìn)行讀取。 前言 Java 在 JDK 1.4 引入了 ByteBuffer 等 NIO 相關(guān)的類(lèi),使得 Java 程序員可以?huà)仐壔?Stream ,從而使用基...

    diabloneo 評(píng)論0 收藏0
  • Android工程師轉(zhuǎn)型Java后端開(kāi)發(fā)之路,自己選的路,跪著也要走下去!

    本文是公眾號(hào)讀者jianfeng投稿的面試經(jīng)驗(yàn)恭喜該同學(xué)成功轉(zhuǎn)型目錄:毅然轉(zhuǎn)型,沒(méi)頭蒼蠅制定目標(biāo),系統(tǒng)學(xué)習(xí)面試經(jīng)歷毅然轉(zhuǎn)崗,沒(méi)頭蒼蠅首先,介紹一下我的背景。本人坐標(biāo)廣州,2016年畢業(yè)于一個(gè)普通二本大學(xué),曾經(jīng)在某機(jī)構(gòu)培訓(xùn)過(guò)Android。2018年初的時(shí)候已經(jīng)在兩家小公司工作干了兩年的android開(kāi)發(fā),然后會(huì)一些Tomcat、Servlet之類(lèi)的技術(shù),當(dāng)時(shí)的年薪大概也就15萬(wàn)這樣子。由于個(gè)人發(fā)展...

    番茄西紅柿 評(píng)論0 收藏0
  • Task一個(gè)輕量級(jí)的分布式任務(wù)計(jì)算系統(tǒng)

    摘要:已預(yù)留擴(kuò)展,可以實(shí)現(xiàn)自己的模塊你想好了嗎你是否真的需要這樣的一個(gè)工具,到底是異步還是同步,什么樣的才可以稱(chēng)的上任務(wù)。異步分布執(zhí)行雖然可以提高系統(tǒng)吞吐量,但它是在高于一定得計(jì)算量請(qǐng)求量的情況下才可以顯現(xiàn)出來(lái)這一特點(diǎn)。 Task系統(tǒng)設(shè)計(jì)與使用 Task是一個(gè)輕量級(jí)的分布式任務(wù)計(jì)算系統(tǒng),他可以幫助你快速編寫(xiě)一個(gè)可以在集群環(huán)境下運(yùn)行的分布式方法,而這只需要你使用一行代碼就可以在你原有的方法上做...

    monw3c 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<