虎牙直播在微服务改造的实践总结2

博主介绍:✌全网粉丝4W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌

博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

开源项目免费哦:点击这里克隆或者下载 ,已经发布Vue3版  

文末获取联系精彩专栏推荐订阅 不然下次找不到哟

Java项目案例《100套》

https://blog.csdn.net/qq_57756904/category_12173599.html

uniapp小程序《100套》

https://blog.csdn.net/qq_57756904/category_12199600.html

目录

一、服务注册的实践

二、对接 CMDB,实现就近访问

三、服务配置的实践

四、虎牙对 Nacos 改造和升级的总结

微服务实战


一、服务注册的实践

虎牙的核心业务是跑在Tars上的。

Tars:腾讯开源的一款微服务框架。

Tars 主要是支持 C++,但对 Java、PHP 等开发语言的支持力度比较差,这就使得我们非 C++ 的业务方去调用它就会很别扭。引入 Nacos 以后,通过 Nacos 支持的 DNS 协议来实现服务发现过程中对全语言的支持。

当然,Nacos 不只是一个注册中心,它具备了融合多个数据中心的能力,支持多数据源的同步,例如,目前已经支持了 Taf(虎牙内部的一个重要微服务体系)、Nacos 自身、ZooKeeper、以及 K8s 上一些服务注册的同步。

虎牙直播在微服务改造的实践总结2_第1张图片

 

  同时虎牙基于 Nacos 集群的双向同步功能(Nacos-Sync),成功实现了数据值在国内两个可用区和国外多个可用区之间的同步,最终达到一处注册,多处可读的目的。这项技术通过事件机制实现同步任务的触发和灵活开启与关闭,同时根据服务变化事件触发监听,保证同步的实时性,并通过定时的全量突发同步事件保证服务数据的最终一致性。 此外,Nacos-Sync还支持服务心跳维持,即多个数据中心的心跳可以使用 Nacos-Sync 来实现远端同步。同时,心跳与同步任务可以绑定,便于灵活控制任务的进行。 针对Taf上数万个注册服务,在Nacos-Sync做了一些改进,通过任务分片来保证数万服务同步的可用性。具体的改进步骤是,以服务为粒度定义任务,然后在多个分片上分散任务负载,并以单分片多副本来保证任务的可用性。这项改进措施为数万服务的同步提供了更加有效和可靠的保障。

二、对接 CMDB,实现就近访问

在进行多机房或多地域的部署时,不同地域之间的网络延迟可能会显著增加,这会对服务的性能产生不利影响。例如,在同一个城市内,机房之间的网络延迟通常只有1毫秒左右,而在跨越城市的网络中,如上海到北京的网络延迟可能高达30毫秒以上。因此,为了提供更好的服务性能,需要考虑实现同地域访问的方案。 一种可行的解决方案是通过Nacos定义的服务提供者接口(SPI)来实现。SPI接口包含了与第三方CMDB所约定的一些方法,用户可以按照协议实现相应的SPI接口,并将其打包成Jar文件放置在Nacos安装目录下。通过重启Nacos,就可以实现与CMDB数据的无缝对接,从而在同一地域内提供更稳定和高效的服务。

虎牙直播在微服务改造的实践总结2_第2张图片

在实际的落地过程中,是在 DNS-F 接入 Taf,在 DNS-F 上实现 Taf 的中控接口,无缝对接 Taf 的 SDK。DNS-F 提供缓存负载均衡和实例信息,Nacos 则提供负载均衡信息的查询接口。

 

三、服务配置的实践

为了提高虎牙直播平台的服务稳定性和弹性,虎牙的域名(http://www.huya.com)采用了多个 IDC机房来实现负载均衡。每个机房都安装了 Nginx用于负载均衡。当经过负载均衡的流量返回到虎牙的后端服务器时,如果需要更改负责中间件的配置,需要下发配置到多个机房的数百台负载均衡机器上,这可能导致故障。此外,由于负载均衡机器的弹性要求较高,在高峰期无法快速扩容的情况下,整个虎牙直播平台可能会崩溃。

虎牙直播在微服务改造的实践总结2_第3张图片

传统的配置下发方式是服务端下发文件,更新配置的生效时间较长。由于需要提前知道负责均衡集群的机器信息,扩展和缩小容量需要等元信息同步以后才能接入流量,使得扩容流量的接入时间较长。为解决这一问题,虎牙引入 Nacos作为配置中心监听器,然后采用了客户端主动监听配置更新的方式。因此,配置可以在秒级别内即时生效,并且新扩容服务可以主动拉取全量配置,将流量接入时间减少了若干分钟。 这种方法的优势在于,随着业务的快速发展,虎牙直播平台可以快速适应不同场景的用户需求,同时保持平台的稳定性和弹性。另外,Nacos 还提供了高可用性和故障恢复机制,可保障系统的可靠性。在虎牙直播平台中,Nacos 已成为了负载均衡方案的关键组成部分,为平台的运行提供了有力的保障。

 

四、虎牙对 Nacos 改造和升级的总结

在引入 Nacos 的过程中,进行了一系列的系统优化和升级,旨在为技术栈加入更具领先性的服务。

下面,对具体的改造和升级进行了总结:
首先,在 DNS-F 的部分,增加了对外部域名的预缓存,这一改动有助于提升 DNS-F 在解析外部域名时的效率,让系统更快速地响应客户端请求。此外,还将 Agent 的监控数据对接到公司的内部监控平台,并将日志输出对接到内部的日志服务。同时,将 DNS-F Cluster 集群整合进了系统中,从而防止因内存、硬盘或版本问题导致 DNS服务无效的情况出现。当本地 Agent 出现问题的时候,集群就可以代理和解析 DNS 请求,保障系统的可用性和稳定性。 其次,在 Nacos-Sync 的部分,对接了 TAF 注册服务和 K8S 注册服务,并解决了多数据中心环形同步的问题。这一改动让系统的注册服务得到了更好的管理和调度,同时降低了注册服务对系统的影响,保证了系统的高效和稳定。 最后,在 Nacos CMDB 的部分,对 Nacos CMDB 进行了扩展,并对接了虎牙自己的 CMDB。与此同时,还对内部的负载均衡策略进行了对接,从而提升了系统的可扩展性和可维护性。
这些改进不仅让系统更加健壮、高效,还为技术栈增添了更为先进的服务,更好地满足业务需求和用户体验。

微服务实战

✨【微服务】SpringCloud的OpenFeign与Ribbon配置

✨集Oauth2+Jwt实现单点登录

✨Spring Cloud Alibaba微服务第29章之Rancher

✨Spring Cloud Alibaba微服务第27章之Jenkins

✨Spring Cloud Alibaba微服务第24章之Docker部署

✨Spring Cloud Alibaba微服务第23章之Oauth2授权码模式

✨Spring Cloud Alibaba微服务第22章之Oauth2

✨Spring Cloud Alibaba微服务第21章之分布式事务

✨Spring Cloud Alibaba微服务第18章之消息服务

✨Spring Cloud Alibaba微服务第16章之服务容错

✨Spring Cloud Alibaba微服务第14章之分库分表

✨Spring Cloud Alibaba微服务第11章之MyBatis-plus

✨Spring Cloud Alibaba微服务第8章之OpenFeign

✨Spring Cloud Alibaba微服务第7章之负载均衡Ribbon

✨SpringCloud Alibaba微服务第6章之Gateway

✨SpringCloud Alibaba微服务第4章之Nacos

✨SpringCloud Alibaba微服务开篇

你可能感兴趣的:(SpringCloud,微服务,java,spring,boot)