? 高速飞机上换引擎,MQ如何实现平滑迁移?_CQITer_重庆IT人之家 yabo10.com亚博体育,亚博娱乐在线网站,亚博国际娱乐7171 ?

高速飞机上换引擎,MQ如何实现平滑迁移?

高速飞机上换引擎,MQ如何实现平滑迁移?

前几天,杨紫琼同学在知识星球提问,说公司要切换MQ,从一个旧的服务商升级为新的服务商,问有没有什么好方案。

这个需求估计还挺普遍的,这里分享一些经验。

一、MQ架构简述

高速飞机上换引擎,MQ如何实现平滑迁移?

如上图,使用MQ异步通信,一般分为三层:消息发送方:使用MQ客户端生成消息。

MQ-client::SendMsg(topic,?msg);?

MQ服务:中转消息。 消息接收方:使用MQ客户端消费消息。

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

这是一个典型的pub-sub架构,如果要替换MQ供应商,至少三个地方要替换:

发送方mq-client

MQ-server

接收方mq-client

如何平滑迁移,是今天要讨论的话题。

二、平滑迁移方案

平滑迁移的目标是:不停服,平滑升级。 如果有很多主题,需要一个一个主题的迁移,每个主题的迁移,分为三个步骤。

步骤一:消费方双向订阅

如上图所示,不妨设:

粉色是旧MQ体系

蓝色是新MQ体系

平滑迁移最终目的,是“发布-服务-订阅”三层全由粉色升级为蓝色。 第一步升级消费方,同一个主题,既要订阅旧MQ,又要订阅新MQ。

此时,“新服务-新订阅”之间虽然有TCP连接,但“新发布”没有上线,实际上不会有消息发送过来(上图虚线),消息仍走的是旧MQ(上图实线)。

步骤二:生产方升级为新发布

高速飞机上换引擎,MQ如何实现平滑迁移?

第二步升级生产方,由旧MQ发布,升级为新MQ发布。

此时,“新发布-新服务-新订阅”之间会建立TCP连接,消息会转移到新通道(上图实线),“旧服务-旧订阅”之间虽然有TCP连接,但实际不会有消息发送过来(上图虚线)。

步骤三:消费方下线旧订阅

高速飞机上换引擎,MQ如何实现平滑迁移?

第三步升级消费方,将旧订阅下线,整个MQ的迁移完成。

三、架构启示

MQ更换服务商,蚂蚁搬家,一步步平滑迁移,成本其实还挺高的。

之所以这么麻烦,不能统一升级,本质是业务与底层基础设施细节(即,具体使用哪个MQ)的耦合。如果公司在早期技术体系规划的时候,能够“浅浅的封装一层”,便能隔离“业务代码”与“底层基础设施细节”。

举个更通俗的例子。

假如没有封装一层,业务代码是:

ActiveMQ-client::SendMsg(topic,?msg);?

ActiveMQ-client::RecvMsg(topic,?msg,?CALLBACK_FUNC);?

即,业务方需要关心ActiveMQ,如果基础设施升级为Rabbyabo10.com亚博体育MQ,业务代码需要升级。 假如有一层浅浅的封装:

ShenJianMQ::SendMsg(topic,?msg){?

ActiveMQ-client::SendMsg(topic,msg);?

}?

??

ShenJianMQ::RecvMsg(topic,?msg,CALLBACK_FUNC)?

ActiveMQ-client::RecvMsg(topic,msg,?CALLBACK_FUNC);?

}?

业务方不需要关心底层是什么MQ,而只需要依赖基础组件ShenJianMQ。

此时如果基础设施升级为Rabbyabo10.com亚博体育MQ,只需要基础组件ShenJianMQ升级。

第一步:RecvMsg升级为双向订阅。

ShenJianMQ::RecvMsg(topic,?msg,CALLBACK_FUNC)?

ActiveMQ-client::RecvMsg(topic,?msg,?CALLBACK_FUNC);?

RabbitMQ-client::RecvMsg(topic,?msg,?CALLBACK_FUNC);?

}?

第二步:SendMsg升级为新发布。

ShenJianMQ::SendMsg(topic,?msg){?

RabbitMQ-client::SendMsg(topic,?msg);?

}?

第三步:RecvMsg下线旧订阅。

ShenJianMQ::RecvMsg(topic,?msg,CALLBACK_FUNC)?

RabbitMQ-client::RecvMsg(topic,?msg,?CALLBACK_FUNC);?

}?

会发现,除了升级依赖新版的ShenJianMQ基础组件,业务代码不需要修改代码。

不仅MQ,缓存与数据库的客户端,浅浅封装一层也能实现业务代码与基础组件的解耦,在基础组建替换,或者基础组建升级的时候,业务代码不需要升级。

画外音:浅浅封装一层之后,监控/告警/数据收集等工作都更容易统一实现了。

关于MQ平滑迁移的问题,先聊这么多,希望能解答杨紫琼同学的问题。

【本文为51CTO专栏作者“58沈剑”原创稿件,转载请联系原作者】

高速飞机上换引擎,MQ如何实现平滑迁移?

戳这里,看该作者更多好文

【编辑推荐】

交易峰值突增1200倍,阿里基础设施架构如何演进?

数据库软件架构,到底要设计些什么?

1万属性,100亿数据,每秒10万吞吐,架构如何设计

亚博娱乐在线网站架构的演变,看了好多这个讲的确实清楚!

AI中台——智能聊天机器人平台的架构与应用

相关推荐
新闻聚焦
猜你喜欢
热门推荐
  • 微软AI面试题有多难?这里有一份样卷

      究竟什么样的AI人才能被微软这样的巨头聘用呢?今天,文摘君就淘来了几道微软AI 面试题,同时给出了最基本的解答......

    06-25????来源:澎湃新闻网

    分享
  • 全球最聪明的大脑怎么看AI?他们预测了

      2017年AI领域取得了诸多成果。2018年AI又将何去何从?以下是来自世界顶级研究人员和行业领军人物对2018年AI领域发展作......

    02-20????来源:虎嗅网

    分享
  • 2017JavaScript框架战报 - React分战场

      我们来看看与React有关的软件包的生态系统。当Facebook构建React时,就有许多来自开源社区的第三方软件包。为提供完......

    02-27????来源:湖北新闻网

    分享
  • 小白学数据:教你用Python实现简单监督学

      监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段。即便是在无监督学习兴起的近......

    03-05????来源:今日头条

    分享
  • 现代编程语言Swift、Kotlin等十大有趣功能

      最近学习了一些现代编程语言,比如Reason,Swift,Kotlin和Dart。这些编程语言提供了许多新功能,本文主要分享了我认......

    04-29????来源:祁东新闻网

    分享
  • 领域场景分析的6W模型

      组成场景的要素常常被称之为6W模型,即描写场景的过程必须包含Who,What,Why,Where,When与hoW这六个要素。......

    04-30????来源:砍柴网

    分享
  • 开源应用服务器WildFly 12发新季度交付模式

      WildFly 12 Final版本现在已经可以下载了,WildFly是一款灵活的开源应用服务器,支持开发人员构建轻量级应用程序。支持......

    05-10????来源:青岛新闻网

    分享
  • 基于Spring Cloud的微服务落地

      微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,......

    06-04????来源:广西新闻网

    分享
  • 为什么阿里工程师纷纷在内网晒代码?

      前阵子,在阿里一个小黑屋里,5名对代码有着极致追求的工程师参与阿里代码领域最高荣誉“多隆奖”的最终角逐。......

    06-08????来源:四川新闻网

    分享
  • 超级大汇总!200多个最好的机器学习、

      我把这篇文章分为了四个部分:机器学习,自然语言处理,python和数学。在每个部分中我都列举了一些主题,但是因......

    09-25????来源:洛阳新闻网

    分享
返回列表
Ctrl+D?将本页面保存为书签,全面了解最新资讯,方便快捷。