存在多个不同注册中心的时候,如何平滑的统一注册中心?

这几天在不同的微信群和社区里连续碰到了类似的问题:

比如spring4all的帖子:http://bbs.spring4all.com/thread/21

又比如今天在秦总的群里也进行了类似的讨论。

虽然描述不同,但核心都围绕着一个问题:两个不同注册中心下的服务要如何互相调用?

下面就针对这个问题,展开说说我的思考、实践与建议。

为什么会有这样的场景?

先来说说背景问题,有的群友在看到这类问题的时候,第一反应就是怎么用多个注册中心,是不是蛋疼了瞎搞的?

显然有点脑子的人都不会这样做!那么为什么会存在这样的场景呢,通常都是这样演变而来的:

  1. 缺少统一的基础技术平台管理,几乎所有做大的企业都会碰到这样的问题。为了业务野蛮发展的时期,技术团队是很少有精力去做这些治理的,通过系统边界划分好之后,因为系统与系统间的交互通过协议定义规范就好,每个系统内部的技术栈根据团队特性选择自己最擅长的就行,并不需要去统一就能又好又快的去完成各个系统的建设。所以,不同的系统选择不同的注册中心来治理自己的服务,并没有什么不妥。

  2. 随着业务的发展,业务需要调整,架构需要进化,复杂的系统关系(以往我们自己开发的系统,并购进来的系统,外部采购的系统)需要被重建。不论是以微服务的方式,还是中台的方式去重新划分系统边界,势必要对现有服务做重新规划与治理。

  3. 由于系统复杂,我们没法一步就位,只能一点点的往改造目标去转变。势必会存在一个新老共存,逐步转化的演进过程。为了能够平滑的过渡改造的过程,我们第一个想到的就是先把服务治理统一起来,让所有内部服务都可以简单和便捷的发现彼此并能够互相调用。

于是,就有了文首大家讨论的这种场景。所以,这是一个架构演进的过程产物,并不是设计不好才出来的怪胎。

两种统一服务治理的思路

方案一:在业务服务端,实现多注册中心的注册与发现

这种方式就是文首,大家所提问题的方案,实现这种方案涉及几点核心问题的解决:

  1. 服务注册的扩展:我们知道Spring Cloud的注册机制是对单注册中心的,同时配套的发现也一样。我们并不能通过多配置一套服务发现接口的实现来实现多注册中心的实现。所以,你需要以一套主注册中心为Spring Cloud自身的Bean实现,外围需要另外去学多套(根据注册中心数量)注册客户端的实现。

  2. 服务发现的扩展:对于非主注册中心的注册操作实现了一套,那么发现机制也要实现一套。同时,因为这里的服务发现,并不与Spring Cloud的服务发现机制绑定,所以这些服务并不会进入到Spring Cloud配置的注册中心下的ServiceList和对应的ServerList里。所以在服务发现模块,需要自己把这些外部注册中心获取的服务和实例加入到主注册中心下的ServiceList和ServerList里。同时,这里需要注意的几个点:

  • 因为业务服务往每个注册中心里都注册了,所以在发现的时候,是会有重叠的,这里要做好去重。
  • 对于服务名称的管理也需要防重,不同系统下有一些比如用户中心之类的服务命名是很容易冲突的。通常可以把系统编码做前缀来加工服务名,以保证融合后不存在重复的出现。

通过这样一顿操作,每个业务服务与所有注册中心都建立了联系,原本处于不同系统的各种服务也都能互相发现并实现互相调用了。

方案二:在各个注册中心之间,实现服务数据的同步

这种方法是新建一个注册中心同步的服务,它的任务很简单,就是把每个注册中心上的服务信息同步到其他注册中心上,同时监听每个注册中心的变化以保持所有不同注册中间都包含了所有系统下的服务。

在这种情况下,只要是Spring Cloud构建的业务服务,那么就只需要逐步的更换注册中心的依赖,就能轻松的把原本处于不同注册中心下的服务,转移到同一注册中心下的服务了。

两种思路的优缺点比较

上面所述两种方案的大致优缺点如下:

方案一 方案二
优点 不需增加部署成本 业务服务侵入性小
缺点 业务服务侵入性大 需要增加部署成本

当然,对于方案二也会有一些复杂情况,如果对注册过程有一些特殊定制的,会需要做一些扩展兼容。但比起第一种实现方式来说,在业务应用侧的逻辑复杂度植入是非常小的。

同时,因为要统一服务治理,那么事后最终状态往往就是只保留最后想要集中维护的注册中心的,这个时候。如果采用第一种方案,那么势必还要去重新调整注册与发现机制,将要淘汰的注册与发现逻辑去除,又是一件比较复杂的事情。

所以,综合比较这两种方法方法来说。个人认为采用方案二,同步注册中心的数据来完成统一服务治理的任务,要比方案一更加稳妥,对于业务开发的影响面最小。虽然会引入一些部署成本,但这些成本对于一个多系统的基础下,那是微乎其微的。

那么,大家是否有碰到类似的问题呢?又有什么好的方案呢?留言一起讨论下吧!如果你想与更多有趣的灵魂碰撞,也可以加入我们的技术交流群一起探讨我们的技术人生!

欢迎关注我的公众号:程序猿DD,分享外面看不到的干货!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容