从Eureka到PolarisMesh,好未来是如何实现0代码迁移的
“
第一代架构
使用K8S作为注册中心
为了解决单K8S集群所带来的IaaS资源不足、没有灾备容灾、升级困难等问题,AI中台的服务层需要改造并支持跨集群部署。为了实现服务层跨集群,系统需要做以下改造:
需要切换注册中心:K8S域名无法跨集群,服务要做跨集群调用需要依赖全局注册中心。 需要支持多语言技术栈:因历史遗留问题,AI中台的技术栈不统一,存在Java、Go、C++等多语言开发的服务。
第二代架构
使用Eureka作为注册中心
采用Eureka作为独立的注册中心:直接使用POD IP进行寻址,解决原K8S ClusterIP无法跨集群的问题。 除Java语言外,其他语言服务使用第三方或自研的Eureka客户端。
改造并使用Eureka作为注册中心后,在现网运营过程中,遇到了以下问题:
稳定性问题
好未来有4000左右的服务数,平均每个服务3节点。将service(cluster ip)注册改为pod ip注册后,客户端注册量由4000+增长至超过10000+。
AI中台Eureka服务采用的是多节点集群部署,节点间通过请求复制的方式维持节点间数据的一致性。在正常情况下,每秒复制的请求数=(节点数*续约请求数)/续约间隔。按照5秒的续约间隔,每个节点大约每秒处理6000个续约请求。
当其中一个Eureka服务出现异常时(比如网络中断等),续约失败的请求会进行重试,出现重试风暴,剩余的Eureka节点所需要处理的续约请求增加到原来的2倍,峰值到3倍。导致剩余节点出现了高负载。
高负载会导致Eureka的计算逻辑出现延迟,续约请求处理不过来导致实例被异常下线,影响业务正常调用。
维护成本问题
Eureka官方只提供了Java版本的客户端,其他语言客户端则需要依赖第三方开源实现(Go)或者自研(C++)。非官方客户端存在质量风险,需要额外投入成本进行优化和测试。
下一代架构
使用PolarisMesh作为注册中心
为解决Eureka注册中心所带来的稳定性和成本问题,需要对注册中心进行选型。
(1)北极星服务端采用计算存储分离架构,数据一致性通过存储层保证,无需计算层参与进行请求复制和数据同步。计算层可随着接入节点的增加进行水平扩展。
在单节点性能方面,同等规格下,北极星的注册发现性能是Eureka的10倍,能轻松解决Eureka在万级节点下服务发现的性能问题。
北极星 | Eureka | |
服务发现单机TPS | 80277 | 6431 |
服务注册单机TPS | 29457 | 4793 |
平均时延 | 79ms | 400ms |
北极星 | Eureka | |
Java语言 | 支持 | 支持 |
Go语言 | 支持 | 不支持 |
C++语言 | 支持 | 不支持 |
(3)北极星服务端基于插件化开发,通过扩展API插件的方式,实现了对Eureka接口的全兼容,AI中台的存量业务,无需修改代码即可直接接入,迁移成本低。
无缝迁移
迁移方案选型
AI中台已经完成了微服务的改造,服务层代码已经与Eureka进行了深度集成,且现网节点已经全部注册到Eureka,北极星注册中心的切换需要做到业务无感的迁移。
业界注册中心迁移一般有以下2种方案:
方案一:客户端双注册双发现
新老注册中心服务端通过同步服务进行数据的双向同步,客户端无需感知即可获取全量的服务数据。
两种迁移方案的对比如下:
客户端双注册双发现 | 服务端数据同步 | |
应用无侵入 | Java应用通过JavaAgent的机制实现应用无侵入迁移,其他语言则需要修改代码进行迁移。 | 应用代码无感知 |
适用场景 | Java应用或者愿意对应用代码进行修改的业务(比如刚开始进行微服务改造) | 适用于对现网在运营的业务进行迁移 |
由于AI中台业务存在多语言的场景,且服务已经在现网运行,因此选用服务端数据同步的方案来进行Eureka到北极星的迁移。
迁移过程实现
北极星对Eureka的API进行了全兼容,因此,业务可以把北极星集群作为一个Eureka节点,加入到Eureka原来的集群中,基于Eureka原生的同步协议进行新老注册中心的服务数据双向同步。
基于上面的迁移方案,新的应用只需要修改一下注册中心地址,即可实现迁移,无需任何代码修改。业务可以按自己的节奏将服务从Eureka注册中心迁移到北极星,中途发现问题可随时回滚。
AI中台迁移后的业务结构如下:
#
总结与收益
除此之外,好未来还获得了服务治理、可视化控制台、服务治理监控等方面的收益。
流量管理:北极星提供全方位的流量管理能力,可轻松满足用户针对应用的灰度发布、多环境隔离、故障熔断、访问限流等诉求。
可视化控制台:北极星提供简单易用的可视化控制台,用户可通过控制台界面简化服务管理、配置管理、以及服务治理规则管理等相关的操作。
流量监控:北极星Polaris提供可视化的监控能力,提供服务调用、故障熔断、访问限流等曲线监控以及告警的能力。
本文作者:
苏珂:好未来AI中台PaaS平台负责人
李佳南:腾讯云中间件团队高级产品经理
单家骏:腾讯云中间件团队技术专家,北极星开源社区PMC成员