Dubbo 应用切换 ZooKeeper 注册中心实例,流量无损迁移

首先思考一个问题:如果 Dubbo 应用使用 ZooKeeper 作为注册中心,现在需要切换到新的 ZooKeeper 实例,如何做到流量无损?

本文提供解决这个问题的一种方案。

场景

  • 有两个基于 Dubbo 的微服务应用,一个是服务提供者,简称 Provider,另一个是服务消费者,简称 Consumer;

  • 使用 ZooKeeper 作为注册中心;

  • 现在要将注册中心从旧实例「ZooKeeper(旧)」 切换到新实例「ZooKeeper(新)」;

  • 要求流量无损;

注:实际的场景可能要复杂得多,比如可能涉及很多个应用,有的应用既是服务提供者又是服务消费者等等,但原理一致。

解决方案

主要利用 Dubbo 支持多注册中心的特性来进行设计。

Dubbo 多注册中心的用法参考 多注册中心 | Apache Dubbo。

Step 1 是现状;

Step 2 将新实例「ZooKeeper(新)」加入到 Provider 的注册中心列表中,且放在首位,此时 Provider 同时向「ZooKeeper(新)」和「ZooKeeper(旧)」注册,默认为新;

Step 3 将 Consumer 的注册中心修改为「ZooKeeper(新)」;

Step 4 将「ZooKeeper(旧)」从 Provider 的注册中心列表中移除。

注:有一种特殊情况是一个服务既作为服务提供者又作为其它服务的消费者,这种情况应将其视为 Provider。

至此,我们已经实现了流量无损的迁移。

相关推荐
IT_陈寒3 小时前
为什么我的React状态更新总是不按套路出牌?
前端·人工智能·后端
一路向北North3 小时前
Spring Security OAuth2.0(22):分布式系统授权-搭建网关
java·后端·spring
存在的五月雨3 小时前
SpringBoot后端限制重复提交
java·spring boot·后端
paopaokaka_luck3 小时前
基于Springboot3+Vue3的宠物殡葬管理系统(webSocket实时通讯、接入腾讯地图、支付宝沙盒支付、Echarts图形化分析)
java·开发语言·网络·后端
卷无止境4 小时前
Python 中基于 Qt 的 GUI 库授权方式全解析
后端·python
程序员爱钓鱼4 小时前
Rust 注释与文档注释详解:从代码说明到 cargo doc
后端·rust
前鼻音太阳熊4 小时前
【MES系统】MES为什么需要SSE?从设备实时监控谈Spring Boot流式推送设计
java·spring boot·后端
卷无止境4 小时前
Guardrails.ai:为大语言模型加一道"安全阀"
后端·python
尚早立志4 小时前
六)Spring Boot 源码研读之prepareContext 准备上下文
java·spring boot·后端·spring
Dovis(誓平步青云)5 小时前
《Linux CPU频率为何忽高忽低:cpufreq、idle状态与性能抖动教程》
linux·运维·服务器·spring boot·后端·生成对抗网络