虎牙直播在微服务改造的实践总结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 上一些服务注册的同步。

 

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

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

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

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

 

三、服务配置的实践

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

传统的配置下发方式是服务端下发文件,更新配置的生效时间较长。由于需要提前知道负责均衡集群的机器信息,扩展和缩小容量需要等元信息同步以后才能接入流量,使得扩容流量的接入时间较长。为解决这一问题,虎牙引入 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微服务开篇

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡布奇诺-海晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值