从Eureka到Polaris,好未来AI中台注册中心是如何实现0代码迁移的

news2024/11/16 4:15:30

导语:2021年,好未来的AI 中台业务规模激增,日调用量超6亿,总调用量上千亿。业务的快速发展给中台的现有技术架构带来一定的冲击。好未来AI中台是微服务架构,完成一个业务请求涉及多个服务之间相互调用,可以说注册中心的稳定性会直接决定业务调用的成功率。在技术升级过程中,腾讯云和好未来工程师在注册中心模块上,实现了零代码修改从Eureka迁移至北极星PolarisMesh的最佳实践,树立了国内企业在服务发现、服务治理领域的一个新标杆。

背景

作为国家新一代人工智能开放创新平台在教育行业的代表,好未来深耕教育场景,目前已积累15大类共计170余种AI能力,覆盖视觉、语音、自然语言处理等多个方向。

2021年好未来 AI 中台业务规模激增,日调用量超6亿,总调用量上千亿。相比2020年增长约9倍,并呈现持续增长趋势。业务规模井喷式增长,给平台带来的稳定性技术挑战也越发强烈,对现有技术架构也提出了更高的要求。

第一代架构:使用K8S作为注册中心

AI中台是基于K8S构建的服务层,早期是单集群架构,服务之间的调用是基于K8S域名寻址到Cluster IP进行调用。

为了解决单K8S集群所带来的IaaS资源不足、没有灾备容灾、升级困难等问题,AI中台的服务层需要改造并支持跨集群部署。为了实现服务层跨集群,系统需要做以下改造:

  1. 需要切换注册中心:K8S域名无法跨集群,服务要做跨集群调用需要依赖全局注册中心。
  2. 需要支持多语言技术栈:因历史遗留问题,AI中台的技术栈不统一,存在Java、Go、C++等多语言开发的服务。

第二代架构:使用Eureka作为注册中心

第二代AI中台改造使用完全的微服务架构,由于AI中台大部分的应用都是Java应用,因此选型使用了业界最常用的Spring Cloud Netflix框架来作为微服务的底座。由于Spring Cloud Neflix默认对接了Eureka注册中心,因此AI中台也选用了Eureka作为全局注册中心。

  1. 采用Eureka作为独立的注册中心:直接使用POD IP进行寻址,解决原K8S ClusterIP无法跨集群的问题。
  2. 除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注册中心所带来的稳定性和成本问题,需要对注册中心进行选型。

除了功能满足度以外,性能、可扩展性与迁移成本是好未来选型时重点考虑的因素。在对比了开源和业内其他厂商的注册中心之后,决定选择PolarisMesh(北极星)作为AI中台的全局注册中心,替换原有的Eureka,主要基于以下考虑:

(1)北极星服务端采用计算存储分离架构,数据一致性通过存储层保证,无需计算层参与进行请求复制和数据同步。计算层可随着接入节点的增加进行水平扩展。

在单节点性能方面,同等规格下,北极星的注册发现性能是Eureka的10倍,能轻松解决Eureka在万级节点下服务发现的性能问题。

北极星

Eureka

服务发现单机TPS

80277

6431

服务注册单机TPS

29457

4793

平均时延

79ms

400ms

(2)北极星社区官方提供了多语言SDK,以及多种主流框架(SpringCloud,Dubbo,gRPC)的集成插件,无需通过第三方社区以及自研的方式解决客户端接入的问题。

北极星

Eureka

Java语言

支持

支持

Go语言

支持

不支持

C++语言

支持

不支持

(3)北极星服务端基于插件化开发,通过扩展API插件的方式,实现了对Eureka接口的全兼容,AI中台的存量业务,无需修改代码即可直接接入,迁移成本低。

无缝迁移

迁移方案选型

AI中台已经完成了微服务的改造,服务层代码已经与Eureka进行了深度集成,且现网节点已经全部注册到Eureka,北极星注册中心的切换需要做到业务无感的迁移。

业界注册中心迁移一般有以下2种方案:

方案一:客户端双注册双发现

 

迁移后的应用,通过集成SDK或者JavaAgent的方式,同时往新老注册中心进行双注册双发现,以此保证迁移后的应用以及未迁移的应用,都可以获取到全量的服务数据。

方案二:服务端数据同步

 

新老注册中心服务端通过同步服务进行数据的双向同步,客户端无需感知即可获取全量的服务数据。

两种迁移方案的对比如下:

客户端双注册双发现

服务端数据同步

应用无侵入

Java应用通过JavaAgent的机制实现应用无侵入迁移,其他语言则需要修改代码进行迁移。

应用代码无感知

适用场景

Java应用或者愿意对应用代码进行修改的业务(比如刚开始进行微服务改造)

适用于对现网在运营的业务进行迁移

由于AI中台业务存在多语言的场景,且服务已经在现网运行,因此选用服务端数据同步的方案来进行Eureka到北极星的迁移。

迁移过程实现

北极星对Eureka的API进行了全兼容,因此,业务可以把北极星集群作为一个Eureka节点,加入到Eureka原来的集群中,基于Eureka原生的同步协议进行新老注册中心的服务数据双向同步。

 

基于上面的迁移方案,新的应用只需要修改一下注册中心地址,即可实现迁移,无需任何代码修改。业务可以按自己的节奏将服务从Eureka注册中心迁移到北极星,中途发现问题可随时回滚。

AI中台迁移后的业务结构如下:

总结与收益

好未来AI中台零代码修改,将注册中心由Eureka迁移至北极星,并发注册服务数有极大的提升,吞吐量得到了10倍的提升,并解决了业务规模激增场景下开源注册中心可靠性问题,有效避免线上再次故障。北极星计算存储分离、控制面无状态,可以随着未来业务规模的继续扩大,高效方便的继续扩容。

除此之外,好未来还获得了服务治理、可视化控制台、服务治理监控等方面的收益。

流量管理:北极星提供全方位的流量管理能力,可轻松满足用户针对应用的灰度发布、多环境隔离、故障熔断、访问限流等诉求。

可视化控制台:北极星提供简单易用的可视化控制台,用户可通过控制台界面简化服务管理、配置管理、以及服务治理规则管理等相关的操作。

流量监控:北极星Polaris提供可视化的监控能力,提供服务调用、故障熔断、访问限流等曲线监控以及告警的能力。

本文作者:

苏珂好未来AI中台PaaS平台负责人

李佳南腾讯云中间件团队高级产品经理

单家骏:腾讯云中间件团队技术专家,北极星开源社区PMC成员

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/71080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DVWA靶场下的xss漏洞练习及分析

目录 JavaScript操作cookie 反射型xss漏洞 存储型xss漏洞 JavaScript操作cookie 1.alert(document.cookie)&#xff1b; 2.document.cookie"coleak"; 3.document.cookie"modify"; 反射型xss漏洞 low级别 <script>alert(11)</script> med级别…

知识点10--Docker的DockerFile

Docker有两种镜像生成的方式&#xff0c;供我们在打包自己的环境时选择&#xff0c;前面的知识点都提到过&#xff0c;分别是commit和DockerFile build&#xff0c;两者的区别就在于commit使用自己已有的容器生成&#xff0c;而DockerFile是直接通过操作基础镜像来生成&#xf…

树——算法专项刷题(八)

八、树 主要是对二叉树的前、中、后、层序遍历的应用 &#xff08;这四种遍历详见 二叉树遍历&#xff09; 8.1二叉树的最近公共祖先 原题链接 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 例如&#xff0c;给定如下二叉树: root [3,5,1,6,2,0,8,null,null,…

Kamiya艾美捷环丁烷嘧啶二聚体CPD相关说明

CPD学名环丁烷嘧啶二聚体&#xff0c;是紫外线照射后DNA损伤的产物&#xff0c;通过免疫组化检测&#xff0c;可以很明显地看出CPD含量变化——CPD的含量越高&#xff0c;代表DNA损伤越严重。因此可以通过CPD含量变化来检测待测物的抗皱功效。 环丁烷嘧啶二聚体&#xff1a;紫外…

m对比PSO,WPA,GWPA以及GWO四种优化算法的优化性能,优化目标函数为10个来自CEC2017的标准测试函数

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 灰狼优化算法(GWO),灵感来自于灰狼.GWO算法模拟了自然界灰狼的领导层级和狩猎机制.四种类型的灰狼,如 α,β,δ,w 被用来模拟领导阶层。此外&#xff0c;还实现了狩猎的三个主要步骤:寻找猎物、包…

活动报名丨泛娱乐社交产品,存量破局方法论

「网易 MCtalk 娱乐社交公开课」网易 MCtalk 娱乐社交公开课是网易云信自主开发的面向从事娱乐社交产品开发、运营、市场推广等工作岗位的实战公开课。公开课通过邀请网易内外部行业技术专家、产品经理以及投放和市场负责人&#xff0c;结合多年实践经验&#xff0c;围绕娱乐社…

难倒90%英雄的阿里对象继承面试题 ,看看你答的对吗?

思考下面的输出结果 class Father {int x 10;public Father() {System.out.println("Father " x);this.print();x 20;}public void print() {System.out.println("Father.x " x);} } class Son extends Father {int x 30;public Son() {System.out.…

跨设备链路聚合 M-LAG配置案例

组网需求 如下图所示&#xff0c;通过配置M-LAG双归接入IP网络可以满足以下要求&#xff1a; ​当一条接入链路发生故障时&#xff0c;流量可以快速切换到另一条链路&#xff0c;保证可靠性。 为了高效利用带宽&#xff0c;两条链路同时处于active状态&#xff0c;可实现使用…

【教学类-15-05】20221207《八款字体的描字帖-2*4格》(大班主题《我是中国人-中国字》 中班描字)

成品样式&#xff1a; 80号字&#xff08;适应2-3个名字的大小&#xff09; 68号字&#xff08;适应4个名字大小&#xff08;2-3个名字也可以用&#xff0c;字会很小&#xff09;&#xff09; 打印样式&#xff1a; 背景需求&#xff1a; 前期进行多次的Python学具教学活动&a…

NLP关系抽取和事件抽取

关系抽取 关系抽取又称实体关系抽取&#xff0c;以实体识别为前提&#xff0c;在实体识别之后&#xff0c;判断给定文本中的任意两个实体是否构成事先定义好的关系&#xff0c;是文本内容理解的重要支撑技术之一&#xff0c;对于问答系统&#xff0c;智能客服和语义搜索等应用都…

研究一段WPF 3D 机械臂代码

网上下一段代码&#xff0c;运行如下&#xff1b;显示了一个3D机械臂&#xff1b; xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&#xff0c;这是WPF命名空间&#xff0c;一般写在xaml头部&#xff0c;它的是这样的&#xff0c;<Viewport3D…

vue 数据手写分页算法,定时展示

我们在业务之中&#xff0c;其实会常常用到一些数据的分段展示 &#xff0c; 比如数据量过大导致echarts无法展示&#xff0c;我们就可以将数据进行算法分页 &#xff0c; 然后套用定时器实时更新分段数据&#xff1b; 例子展示 &#xff1a; 将下列数组截取成每页5条数据的分…

鞋子商店APP源码和设计报告

实 验 报 告 课程名称 实验名称 指导教师 专业 班级 学号 姓名 一、需求分析 1.需求分析 随着互联网和手机技术的蓬勃发展&#xff0c;网购已经成为许多人&#xff0c;尤其是年轻人的主要消费方式&#xff0c;这就对手机购物APP产生了大量的需求&#xff0c;商品的展…

01入门-ThreadLocal详解-并发编程(Java)

文章目录1 简介2 基本使用2.1 常用方法2.2 小案例3 ThreadLocal与Sycronized4 应用场景4.1 转账案例构建4.2 问题4.3 解决5 后记1 简介 官方JDK源码关于ThreadLocal描述&#xff1a;ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问&#xff08;通过get和…

【opensips】客户端的注册

opensips的注册能力 opensips可以通过registrar模块实现注册的能力&#xff0c; 所有的账户信息默认是在opensips的subscibe表中&#xff0c; 默认的subscibe表结构如上图&#xff0c; id是主键&#xff0c;username是账户名domain是opensips的域名password是密码email_addre…

ChatGPT 全网最新开通账号教程

&#x1f986;博主介绍&#xff1a;小黄鸭技术 &#x1f308;擅长领域&#xff1a;Java、实用工具、运维 &#x1f440; 系列专栏&#xff1a;&#x1f4e2;开发工具 Java之路 八股文之路 &#x1f4e7;如果文章写作时有错误的地方&#xff0c;请各位大佬指正&#xff0c;一起进…

掌握Redis的Sentinel哨兵原理,助你拿到25k的offer

— — | M1 |---------| R1 | | S1 | | S2 | — — Configuration: quorum 1 master宕机&#xff0c;s1和s2中只要有1个哨兵认为master宕机就可以进行切换&#xff0c;同时会在s1和s2中选举出一个执行故障转移. 但此时&#xff0c;需要majority&#xff0c;也就是大多数…

微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后)

文章目录一、前言二、前端代码wxml三、前端代码js四、后端java五、程序流程六、参考一、前言 大部分微信小程序开发者都会有这样的需求&#xff1a;获取小程序用户的手机号码。但是&#xff0c;因为小程序用户的手机号码属于重要信息&#xff0c;为了安全&#xff0c;所以需要如…

细粒度图像分类论文研读-2022

文章目录TransFG: A Transformer Architecture for Fine-grained RecognitionAbstractintroductionMethodVision transformer as feature extractorImage SequentializationPatch EmbeddingTransFG ArchitecturePart Selection ModuleConstrastive feature learningViT-FOD&…

从理论走向实战,阿里高工熬夜整理出的 Spring 源码速成笔记太香了

不知道大家面试的时候有没有被问到过 Spring 相关问题&#xff08;循环依赖、事务、生命周期、传播特性、IOC、AOP、设计模式、源码&#xff09;&#xff1f;反正我这个小学弟前段时间就来私信我说自己面试挂在了 Spring 这一块。&#xff08;原谅我不厚道地笑了&#xff0c;如…