互聯(lián)網(wǎng)架構(gòu)解耦神器-MQ

在互聯(lián)網(wǎng)架構(gòu)中,MQ是一種非常常見的上下游“邏輯解耦+物理解耦”的消息通知服務(wù)葡粒。

什么時(shí)候不使用MQ份殿?

上游實(shí)時(shí)關(guān)注執(zhí)行結(jié)果,通常采用RPC嗽交。

什么時(shí)候使用MQ伯铣?

(1)數(shù)據(jù)驅(qū)動的任務(wù)依賴。

(2)上游不關(guān)心執(zhí)行結(jié)果轮纫。

(3)上游關(guān)注結(jié)果腔寡,但執(zhí)行時(shí)間很長。

(4)削峰填谷掌唾,流量控制放前,保護(hù)下游

場景1:不適宜用MQ通信

圖(1)MQ通信

圖(2)RPC調(diào)用

如上圖(1)所示,登錄頁面調(diào)用passport服務(wù)糯彬,會根據(jù)passport服務(wù)的返回結(jié)果凭语,區(qū)別執(zhí)行登錄成功,登錄失敗撩扒,執(zhí)行錯誤似扔。調(diào)用方關(guān)注執(zhí)行結(jié)果時(shí)吨些,不宜使用MQ通訊。使用MQ通訊炒辉,調(diào)用方不能直接告之用戶登錄成功又或失敗豪墅,阻塞住等待MQ通知回調(diào)不但使得編碼復(fù)雜,還會引入消息丟失的風(fēng)險(xiǎn)黔寇,中間多加入一層偶器,多此一舉,基本沒有人這么玩缝裤。MQ的不足:(1)系統(tǒng)更復(fù)雜屏轰,多了MQ組件(2)消息傳遞路徑長,延時(shí)會增加(3)消息可靠性和重復(fù)性相互矛盾憋飞,消息的不丟不重難以保證(4)上游無法知道下游執(zhí)行結(jié)果霎苗,這一點(diǎn)很致命場景2:如果調(diào)用方不關(guān)心執(zhí)行結(jié)果,卻仍然使用RPC調(diào)用榛做,會引發(fā)上下游極大的耦合與瓶頸叨粘。

耦合范圍: 上游服務(wù)?what,一萬個(gè)策馬奔騰消息通知耦合:每每在心里怒罵“MD 明明是業(yè)務(wù)變更? 為什么要改通用模塊”如上圖:有一個(gè)上游服務(wù)upper瘤睹,例如:“帖子發(fā)布中心”服務(wù)升敲。負(fù)責(zé)產(chǎn)品通用的帖子發(fā)布業(yè)務(wù)。有些個(gè)性化的業(yè)務(wù)關(guān)心帖子發(fā)布事件轰传,例如
  • 下游服務(wù)biz1:用戶發(fā)布帖子后驴党,大數(shù)據(jù)部門要更新用戶的畫像

  • 下游服務(wù)biz2:用戶發(fā)布帖子后,信息質(zhì)量部門要異步檢查帖子是否合規(guī)

  • 下游服務(wù)biz3:招聘業(yè)務(wù)最近在做用戶促活获茬,如果用戶發(fā)布的是招聘帖子港庄,要增加積分

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

耦合為何存在把还?

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

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

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

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

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

如何解耦呢托慨?

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

MQ能夠做到上下游物理上和邏輯上都解耦:
  • 物理上解耦,增加MQ之后蔼紧,上游互不知道彼此的存在婆硬,不會建立物理連接了,大家都只與MQ建立物理連接
  • 邏輯上解耦奸例,事件發(fā)布方甚至不用知道哪些下游訂閱了這個(gè)消息彬犯,新增消息的訂閱方只需要連接MQ就行了,不需要上游關(guān)注
用MQ解耦的好處:
  1. 上游執(zhí)行時(shí)間短查吊,它只需要向MQ發(fā)送一個(gè)異步的消息即可
  2. 上下游沒有物理谐区、邏輯上的依賴關(guān)系
  3. 下游只需要向MQ訂閱上游的執(zhí)行成功消息即可,增減下游上游都不要關(guān)心
一篇架構(gòu)知識逻卖,每天進(jìn)度一點(diǎn)點(diǎn)

面試方法論:

1. cap理論

CAP理論指的是一個(gè)分布式系統(tǒng)最多只能同時(shí)滿足一致性(Consistency)宋列、可用性(Availability)和分區(qū)容錯性(Partition tolerance)這三項(xiàng)中的兩項(xiàng)。

結(jié)論:CAP三個(gè)特性肯定是不能同時(shí)滿足的评也,但是可以滿足其中兩個(gè)炼杖。要么滿足CP要么滿足AP。

我們分析一下既然可以滿足兩個(gè)盗迟,那么舍棄哪一個(gè)比較好呢坤邪?

(1)滿足CA舍棄P,也就是滿足一致性和可用性罚缕,舍棄容錯性艇纺。但是這也就意味著你的系統(tǒng)不是分布式的了,因?yàn)樯婕胺植际降南敕ň褪前压δ芊珠_邮弹,部署到不同的機(jī)器上喂饥。(既然是分布式,這就不可取了3辍T卑铩!)

(2)滿足CP舍棄A导饲,也就是滿足一致性和容錯性捞高,舍棄可用性氯材。如果你的系統(tǒng)允許有段時(shí)間的訪問失效等問題,這個(gè)是可以滿足的硝岗。就好比多個(gè)人并發(fā)買票氢哮,后臺網(wǎng)絡(luò)出現(xiàn)故障,你買的時(shí)候系統(tǒng)就崩潰了型檀。

(3)滿足AP舍棄C冗尤,也就是滿足可用性和容錯性,舍棄一致性胀溺。這也就是意味著你的系統(tǒng)在并發(fā)訪問的時(shí)候可能會出現(xiàn)數(shù)據(jù)不一致的情況裂七。

實(shí)時(shí)證明,大多數(shù)都是犧牲了一致性仓坞。像12306還有淘寶網(wǎng)背零,就好比是你買火車票,本來你看到的是還有一張票无埃,其實(shí)在這個(gè)時(shí)刻已經(jīng)被買走了徙瓶,你填好了信息準(zhǔn)備買的時(shí)候發(fā)現(xiàn)系統(tǒng)提示你沒票了。這就是犧牲了一致性嫉称。

但是不是說犧牲一致性一定是最好的侦镇。就好比mysql中的事務(wù)機(jī)制,張三給李四轉(zhuǎn)了100塊錢织阅,這時(shí)候必須保證張三的賬戶上少了100壳繁,李四的賬戶多了100。因此需要數(shù)據(jù)的一致性蒲稳,而且什么時(shí)候轉(zhuǎn)錢都可以氮趋,也需要可用性。但是可以轉(zhuǎn)錢失敗是可以允許的江耀。

END

請毫不留情的點(diǎn)贊吧剩胁!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市祥国,隨后出現(xiàn)的幾起案子昵观,更是在濱河造成了極大的恐慌,老刑警劉巖舌稀,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啊犬,死亡現(xiàn)場離奇詭異,居然都是意外死亡壁查,警方通過查閱死者的電腦和手機(jī)觉至,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來睡腿,“玉大人语御,你說我怎么就攤上這事峻贮。” “怎么了应闯?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵纤控,是天一觀的道長。 經(jīng)常有香客問我碉纺,道長船万,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任骨田,我火速辦了婚禮耿导,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盛撑。我一直安慰自己碎节,他們只是感情好捧搞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布抵卫。 她就那樣靜靜地躺著,像睡著了一般胎撇。 火紅的嫁衣襯著肌膚如雪介粘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天晚树,我揣著相機(jī)與錄音姻采,去河邊找鬼。 笑死爵憎,一個(gè)胖子當(dāng)著我的面吹牛慨亲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宝鼓,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刑棵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了愚铡?” 一聲冷哼從身側(cè)響起蛉签,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沥寥,沒想到半個(gè)月后碍舍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡邑雅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年片橡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淮野。...
    茶點(diǎn)故事閱讀 39,953評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捧书,死狀恐怖狂塘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鳄厌,我是刑警寧澤荞胡,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站了嚎,受9級特大地震影響泪漂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歪泳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一萝勤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呐伞,春花似錦敌卓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至癣防,卻和暖如春蜗巧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕾盯。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工幕屹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人级遭。 一個(gè)月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓望拖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挫鸽。 傳聞我的和親對象是個(gè)殘疾皇子说敏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容