偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

為什么說,MQ,是互聯(lián)網(wǎng)架構(gòu)的解耦神器?

開發(fā) 開發(fā)工具
作為技術(shù)人,每每在心中罵上下游,罵兄弟部門,明明不應(yīng)該聯(lián)動,卻要被動配合,就可能有潛在的耦合。今天一起來看一個,用錯RPC的耦合場景。

什么是耦合?

耦合,是架構(gòu)中,本來不相干的代碼、模塊、服務(wù)、系統(tǒng)因?yàn)槟承┰蚵?lián)系在一起,各自獨(dú)立性差,影響則相互影響,變動則相互變動的一種架構(gòu)狀態(tài)。

[[419744]]

感官上,怎么發(fā)現(xiàn)系統(tǒng)中的耦合?

作為技術(shù)人,每每在心中罵上下游,罵兄弟部門,“這個東西跟我有什么關(guān)系?為什么需要我來配合做這個事情?”。明明不應(yīng)該聯(lián)動,卻要被動配合,就可能有潛在的耦合。

今天一起來看一個,用錯RPC的耦合場景。

一個架構(gòu)常識:當(dāng)調(diào)用方需要關(guān)心執(zhí)行結(jié)果,通常使用RPC調(diào)用。

  1. ret = PassportService::userAuth(name, pass); 
  2. switch(ret){ 
  3.  case(YES) : return YesHTML(); 
  4.  case(NO) : return NoHTML(); 
  5.  case(JUMP) : return 304HTML(): 
  6.  default : return 500HTML(); 

上一篇《明明服務(wù)化了,為啥耦合更加嚴(yán)重了?》提到,執(zhí)行結(jié)果的處理和業(yè)務(wù)強(qiáng)相關(guān),則switch case應(yīng)該放在上游業(yè)務(wù)方,而不應(yīng)該放到底層通用服務(wù)。

登錄頁面調(diào)用passport服務(wù),會根據(jù)passport服務(wù)的返回結(jié)果,區(qū)別執(zhí)行登錄成功,登錄失敗,執(zhí)行錯誤。調(diào)用方關(guān)注執(zhí)行結(jié)果時,不宜使用MQ通訊。

如果強(qiáng)行使用MQ通訊,調(diào)用方不能直接告之用戶登錄成功又或失敗,阻塞住等待MQ通知回調(diào)不但使得編碼復(fù)雜,還會引入消息丟失的風(fēng)險,中間多加入一層,多此一舉,基本沒有人這么玩。

但如果調(diào)用方不關(guān)心執(zhí)行結(jié)果,卻仍然使用RPC調(diào)用,會引發(fā)上下游極大的耦合與瓶頸。

場景還原

有一個通用的上游服務(wù),例如“帖子發(fā)布”服務(wù),負(fù)責(zé)公司通用的帖子發(fā)布業(yè)務(wù)。有一些個性化的業(yè)務(wù)關(guān)心“用戶發(fā)布帖子”這個事件,例如:

  • 用戶發(fā)布帖子后,大數(shù)據(jù)部門要更新用戶的畫像;
  • 用戶發(fā)布帖子后,信息質(zhì)量部門要異步檢查帖子是否合規(guī);
  • 招聘業(yè)務(wù)最近在做用戶促活,如果用戶發(fā)布的是招聘帖子,要增加積分;

個性化下游關(guān)注這個事件,但下游對事件的執(zhí)行結(jié)果,“帖子發(fā)布”服務(wù)卻并不關(guān)心,如果“帖子發(fā)布”服務(wù)通過RPC的方式去通知下游,就會有很大的問題。

耦合為何存在?

帖子發(fā)布服務(wù),這本來應(yīng)該是一個非?;A(chǔ)的服務(wù),上游upper通過RPC調(diào)用將事件同步給事件關(guān)注業(yè)務(wù)方biz1/biz2/biz3:

(1)一旦有新的業(yè)務(wù)需求要關(guān)注這個事件,修改代碼的是通用上游upper,此時通用服務(wù)的owner就在心里罵娘了“為何有需求的是你,修改代碼的卻是我”;

(2)一旦業(yè)務(wù)側(cè)出問題,會影響上游通用基礎(chǔ)服務(wù),此時通用服務(wù)的owner又在心里罵娘了“我ca,穩(wěn)定性的KPI,全被兄弟部門毀了”;

(3)一旦業(yè)務(wù)側(cè)接口升級,上游基礎(chǔ)服務(wù)需要配合升級,此時通用服務(wù)的owner可能又會抱怨“為何被動升級的人總是我”;

架構(gòu)不合理,簡直痛不欲生。

如何解耦呢?

如果事件發(fā)出方不關(guān)心訂閱方的執(zhí)行結(jié)果,不能用RPC,應(yīng)該用MQ。

MQ能夠做到上下游物理上和邏輯上都解耦:

(1)物理上解耦,增加MQ之后,上游互不知道彼此的存在,不會建立物理連接了,大家都只與MQ建立物理連接;

(2)邏輯上解耦,事件發(fā)布方甚至不用知道哪些下游訂閱了這個消息,新增消息的訂閱方只需要連接MQ就行了,不需要上游關(guān)注;

MQ是一個非常常見的物理上解耦、邏輯上也解耦的利器。

  • 關(guān)注下游執(zhí)行執(zhí)行結(jié)果,用RPC。
  • 不關(guān)注下游執(zhí)行結(jié)果,用MQ,不用RPC。

這只是一個很小的優(yōu)化點(diǎn),但對于通知解耦卻是非常有效。

希望每天收獲一點(diǎn)點(diǎn),架構(gòu)就能美好一點(diǎn)點(diǎn)。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文 

 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-12-26 15:52:31

MQ互聯(lián)網(wǎng)耦合

2018-01-01 06:41:44

耦合互聯(lián)網(wǎng)架構(gòu)配置中心

2016-09-22 15:01:59

微服務(wù)互聯(lián)網(wǎng)架構(gòu)

2020-09-09 16:20:16

區(qū)塊鏈比特幣數(shù)字貨幣

2019-12-26 07:39:36

互聯(lián)網(wǎng)架構(gòu)ip

2018-11-05 11:22:00

物聯(lián)網(wǎng)平臺物聯(lián)網(wǎng)IOT

2021-09-23 22:34:03

區(qū)塊鏈互聯(lián)網(wǎng)技術(shù)

2025-08-13 08:33:55

MapReduce架構(gòu)分層架構(gòu)

2022-05-13 09:49:05

區(qū)塊鏈互聯(lián)網(wǎng)模型

2017-05-19 10:01:53

互聯(lián)網(wǎng)

2019-11-28 16:09:29

架構(gòu)模板存儲

2017-01-11 21:40:03

互聯(lián)網(wǎng)架構(gòu)高并發(fā)

2022-06-09 08:01:43

秒殺系統(tǒng)互聯(lián)網(wǎng)架構(gòu)

2019-04-10 14:10:02

高并發(fā)分布式系統(tǒng)架構(gòu)

2019-05-13 10:30:34

互聯(lián)網(wǎng)架構(gòu)容量

2019-03-18 07:08:53

高可用互聯(lián)網(wǎng)架構(gòu)分布式

2016-12-06 11:56:13

互聯(lián)網(wǎng)架構(gòu)高可用

2016-09-22 15:55:39

互聯(lián)網(wǎng)架構(gòu)容量設(shè)計

2021-07-29 16:06:48

行為互聯(lián)網(wǎng)IoB互聯(lián)網(wǎng)

2012-09-19 15:43:21

云時代
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號