成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

高速飛機上換引擎,MQ如何實現平滑遷移?

開發 開發工具 架構
前幾天,楊紫瓊同學在知識星球提問,說公司要切換MQ,從一個舊的服務商升級為新的服務商,問有沒有什么好方案。這個需求估計還挺普遍的,這里分享一些經驗。

 

前幾天,楊紫瓊同學在知識星球提問,說公司要切換MQ,從一個舊的服務商升級為新的服務商,問有沒有什么好方案。

這個需求估計還挺普遍的,這里分享一些經驗。

一、MQ架構簡述

如上圖,使用MQ異步通信,一般分為三層:消息發送方:使用MQ客戶端生成消息。

  1. MQ-client::SendMsg(topic, msg); 

MQ服務:中轉消息。 消息接收方:使用MQ客戶端消費消息。

  1. MQ-client::RecvMsg(topic, msg, CALLBACK_FUNC); 

這是一個典型的pub-sub架構,如果要替換MQ供應商,至少三個地方要替換:

  • 發送方mq-client
  • MQ-server
  • 接收方mq-client

如何平滑遷移,是今天要討論的話題。

二、平滑遷移方案

平滑遷移的目標是:不停服,平滑升級。 如果有很多主題,需要一個一個主題的遷移,每個主題的遷移,分為三個步驟。

步驟一:消費方雙向訂閱

如上圖所示,不妨設:

  • 粉色是舊MQ體系
  • 藍色是新MQ體系

平滑遷移最終目的,是“發布-服務-訂閱”三層全由粉色升級為藍色。 第一步升級消費方,同一個主題,既要訂閱舊MQ,又要訂閱新MQ。

此時,“新服務-新訂閱”之間雖然有TCP連接,但“新發布”沒有上線,實際上不會有消息發送過來(上圖虛線),消息仍走的是舊MQ(上圖實線)。

步驟二:生產方升級為新發布

第二步升級生產方,由舊MQ發布,升級為新MQ發布。

此時,“新發布-新服務-新訂閱”之間會建立TCP連接,消息會轉移到新通道(上圖實線),“舊服務-舊訂閱”之間雖然有TCP連接,但實際不會有消息發送過來(上圖虛線)。

步驟三:消費方下線舊訂閱

第三步升級消費方,將舊訂閱下線,整個MQ的遷移完成。

三、架構啟示

MQ更換服務商,螞蟻搬家,一步步平滑遷移,成本其實還挺高的。

之所以這么麻煩,不能統一升級,本質是業務與底層基礎設施細節(即,具體使用哪個MQ)的耦合。如果公司在早期技術體系規劃的時候,能夠“淺淺的封裝一層”,便能隔離“業務代碼”與“底層基礎設施細節”。

舉個更通俗的例子。

假如沒有封裝一層,業務代碼是:

  1. ActiveMQ-client::SendMsg(topic, msg); 
  2. ActiveMQ-client::RecvMsg(topic, msg, CALLBACK_FUNC); 

即,業務方需要關心ActiveMQ,如果基礎設施升級為RabbitMQ,業務代碼需要升級。 假如有一層淺淺的封裝:

  1. ShenJianMQ::SendMsg(topic, msg){ 
  2. ActiveMQ-client::SendMsg(topic,msg); 
  3.   
  4. ShenJianMQ::RecvMsg(topic, msg,CALLBACK_FUNC) 
  5. ActiveMQ-client::RecvMsg(topic,msg, CALLBACK_FUNC); 

業務方不需要關心底層是什么MQ,而只需要依賴基礎組件ShenJianMQ。

此時如果基礎設施升級為RabbitMQ,只需要基礎組件ShenJianMQ升級。

第一步:RecvMsg升級為雙向訂閱。

  1. ShenJianMQ::RecvMsg(topic, msg,CALLBACK_FUNC) 
  2. ActiveMQ-client::RecvMsg(topic, msg, CALLBACK_FUNC); 
  3. RabbitMQ-client::RecvMsg(topic, msg, CALLBACK_FUNC); 

第二步:SendMsg升級為新發布。

  1. ShenJianMQ::SendMsg(topic, msg){ 
  2. RabbitMQ-client::SendMsg(topic, msg); 

第三步:RecvMsg下線舊訂閱。

  1. ShenJianMQ::RecvMsg(topic, msg,CALLBACK_FUNC) 
  2. RabbitMQ-client::RecvMsg(topic, msg, CALLBACK_FUNC); 

會發現,除了升級依賴新版的ShenJianMQ基礎組件,業務代碼不需要修改代碼。

不僅MQ,緩存與數據庫的客戶端,淺淺封裝一層也能實現業務代碼與基礎組件的解耦,在基礎組建替換,或者基礎組建升級的時候,業務代碼不需要升級。

畫外音:淺淺封裝一層之后,監控/告警/數據收集等工作都更容易統一實現了。 

關于MQ平滑遷移的問題,先聊這么多,希望能解答楊紫瓊同學的問題。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

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

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2025-01-07 12:43:14

2021-03-01 10:10:39

數據遷移擴容

2017-01-05 08:54:15

OctopressHugo遷移

2014-07-01 10:15:52

2025-01-10 08:20:00

MQ消息架構

2012-12-24 08:59:13

iOSUnity3D

2018-01-19 10:00:52

禁令互聯網航空公司

2013-07-29 11:12:38

開發產品電子設備

2023-11-14 08:44:55

數倍數據

2018-07-16 15:09:38

遷移數據中心網絡

2023-11-20 11:32:50

2009-12-29 16:25:14

全業務接入網

2011-11-18 14:03:43

技術

2009-04-01 10:41:00

GSMWCDMA的

2024-08-22 14:16:08

2022-07-27 22:48:29

消息中間件RocketMQ架構設計

2025-01-13 05:00:00

2024-11-13 00:59:13

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久性色精品国产免费观看 | www.97国产| 久久久精品一区 | 精品国产乱码久久久久久闺蜜 | 欧美在线一区二区三区 | 欧美色影院 | 做a视频在线观看 | 欧美日本韩国一区二区三区 | 久久久精| 在线精品一区 | 亚洲一区二区三区四区五区午夜 | 久久精品一级 | 毛片入口| 亚洲欧美综合 | 国产在线精品一区 | 国产视频综合 | 亚洲香蕉 | 日日碰狠狠躁久久躁婷婷 | 久久精品国产一区二区电影 | 成人不卡视频 | 久久ww| 国产一区二区三区视频 | 欧美高清性xxxxhd | 欧美日韩午夜精品 | 日韩中文字幕一区二区 | 亚洲国产成人av好男人在线观看 | 亚洲一区二区三区久久久 | 国产精品一区久久久 | 欧美日韩在线电影 | 国产精品九九九 | 成人在线播放网站 | 日韩免费高清视频 | 久久精品一区二区三区四区 | 欧美成人免费在线 | a级在线观看 | 亚洲一区二区三区国产 | 亚洲精品白浆高清久久久久久 | 99re国产精品 | 国产精品久久久久999 | 日本在线一二 | 国产精品视频www |