导语:2021年,好未来的AI 中台业务规模激增,日调用量超6亿,总调用量上千亿。业务的快速发展给中台的现有技术架构带来一定的冲击。好未来AI中台是微服务架构,完成一个业务请求涉及多个服务之间相互调用,可以说注册中心的稳定性会直接决定业务调用的成功率。在技术升级过程中,腾讯云和好未来工程师在注册中心模块上,实现了零代码修改从Eureka迁移至北极星PolarisMesh的最佳实践,树立了国内企业在服务发现、服务治理领域的一个新标杆。
背景
作为国家新一代人工智能开放创新平台在教育行业的代表,好未来深耕教育场景,目前已积累15大类共计170余种AI能力,覆盖视觉、语音、自然语言处理等多个方向。
2021年好未来 AI 中台业务规模激增,日调用量超6亿,总调用量上千亿。相比2020年增长约9倍,并呈现持续增长趋势。业务规模井喷式增长,给平台带来的稳定性技术挑战也越发强烈,对现有技术架构也提出了更高的要求。
第一代架构:使用K8S作为注册中心
AI中台是基于K8S构建的服务层,早期是单集群架构,服务之间的调用是基于K8S域名寻址到Cluster IP进行调用。
为了解决单K8S集群所带来的IaaS资源不足、没有灾备容灾、升级困难等问题,AI中台的服务层需要改造并支持跨集群部署。为了实现服务层跨集群,系统需要做以下改造:
- 需要切换注册中心:K8S域名无法跨集群,服务要做跨集群调用需要依赖全局注册中心。
- 需要支持多语言技术栈:因历史遗留问题,AI中台的技术栈不统一,存在Java、Go、C++等多语言开发的服务。
第二代架构:使用Eureka作为注册中心
第二代AI中台改造使用完全的微服务架构,由于AI中台大部分的应用都是Java应用,因此选型使用了业界最常用的Spring Cloud Netflix框架来作为微服务的底座。由于Spring Cloud Neflix默认对接了Eureka注册中心,因此AI中台也选用了Eureka作为全局注册中心。
- 采用Eureka作为独立的注册中心:直接使用POD IP进行寻址,解决原K8S ClusterIP无法跨集群的问题。
- 除Java语言外,其他语言服务使用第三方或自研的Eureka客户端。
改造并使用Eureka作为注册中心后,在现网运营过程中,遇到了以下问题:
稳定性问题
好未来有4000左右的服务数,平均每个服务3节点。将service(cluster ip)注册改为pod ip注册后,客户端注册量由4000+增长至超过10000+。
AI中台Eureka服务采用的是多节点集群部署,节点间通过请求复制的方式维持节点间数据的一致性。在正常情况下,每秒复制的请求数=(节点数*续约请求数)/续约间隔。按照5秒的续约间隔,每个节点大约