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

news2024/11/24 11:01:28

博主介绍:✌全网粉丝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微服务开篇

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

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

相关文章

常用的Jmeter参数化技巧总结,总有一个你不知道

说起接口测试,相信大家在工作中用的最多的还是Jmeter。 JMeter是一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具。具有高可扩展性、支持Web(HTTP/HTTPS)、SOAP、FTP、JAVA 等多种协议。 在做…

安全狗云原生安全能力亮相2023年智能汽车信息安全大会

5月19日,2023年智能汽车信息安全大会在上海顺利落幕。作为国内云原生安全领导厂商,安全狗受邀出席此次活动。 据悉,在领导致辞后,来自汽车行业以及网络安全行业的专家们就智能汽车涉及到的数据安全、安全合规、网络安全等话题展开…

Prompt Engineering | 迭代式优化和完善prompt

😄 在尝试编写第一个 prompt时,满足上一博客说过的两个原则:清晰明确,并且给系统足够的时间思考。然后您可以运行它并查看结果。如果第一次效果不好,那么迭代的过程就是找出为什么指令不够清晰或为什么没有给算法足够的…

数据结构初阶——堆

目录 一,堆的概念 二,创建堆 2.1堆的结构 2.2堆的初始化 2.3堆的数据插入 2.4堆的数据的删除 注意点: 2.5 堆顶元素 2.6堆的长度 2.7堆的销毁 思维导图: 一,堆的概念 堆是什么?对于一个对于电脑储存结…

爆肝整理,接口测试到接口自动化测试小技巧,你的测试之路不再简单...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

Vue3 详细教程

文章目录 一、API 风格1.1 选项式 API1.2 组合式 API 二、Vue 指令2.1 {{}} 文本插值2.2 v-html 标签元素2.3 v-on 绑定事件2.4 v-show 隐藏元素2.5 v-if 消除元素2.6 v-bind 属性渲染2.7 v-for 列表渲染2.8 v-model 数据双向绑定 三、组件3.1 组件组合3.2 Props 组件交互3.3 自…

Linux:命令date、ntp查看和修改(校准)时间和地区。

Linux:命令date、ntp查看和修改(校准)时间和地区。 date -d 不仅可以1还可以加其他数字,表达后多久,-表达前多久: 备注:中国所在的时区是东八区 单独使用date时,会出现一串内容&…

Linux驱动入门——基础概念

文章目录 Linux内核简介Unix的历史Linux简介操作系统和内核简介单内核与微内核设计之比较小结 设备驱动简介驱动程序的角色划分内核设备和模块的分类安全问题版权条款 Linux驱动开发概述驱动程序概述设备驱动程序的作用设备驱动的分类Linux操作系统与驱动的关系Linux驱动开发编…

小程序容器技术在构建超级App的技术价值

今年来,随着软件及开源技术的发展,软件应用架构的概念也随之流行起来。它提供了一种组织和设计软件系统的有效方法,具有许多优势和好处: 模块化和可维护性:软件应用架构将系统拆分为模块化的组件,每个组件…

linux 部署jenkins

安装Jenkins 使用wget 命令下载Jenkins 先安装wget yum install wget ,如果已经安装过了,忽略直接到下一步; 若你的java环境为11~17,可以执行:wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war 若你的java环境为8&#xff0…

Python实战基础10-正则表达式

1、正则表达式 在处理字符串时,经常会有查找符合某些复杂规则的字符串需求。正则表达式就算用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。 1.1 行定位符 行定位符就是用来描述字符串的边界,“A”表示行的开始&…

2023新星导师活动【electron+vue3】方向,开营知识点提纲(2)

文章目录 前言一、vue是什么?二、vue的优势1.依托数据渲染2.新人的边界2.选项式和组合式 总结 前言 上篇文章主要讲解了electron、nodejs的相关概念。本篇文章将主要介绍vue3,以及vue3如何与electron协作完成桌面端功能。 同上篇文章一样,这…

系统集成项目管理工程师 下午 真题 及考点(2019年上半年)

文章目录 一:第10章 项目质量管理,规划质量管理输出,质量成本法(一致性成本【预防、评价】 和 非一致性成本【内部失败、外部失败】),七种工具二:第8章 项目进度管理,总浮动时间&…

2023高频前端面试题合集之网络篇

近期整理了一下高频的前端面试题,分享给大家一起来学习。如有问题,欢迎指正! 欢迎大家关注该专栏:点赞👍 收藏🤞 大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐&…

数据结构学习分享之链式二叉树(二)

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:数据结构学习分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你了解更多数据结构的知识   🔝🔝 数据结构第八课 1. 前言&a…

ClickHouse:(二)数据类型

1.整型 固定长度的整型分为:有符号和无符合整型 有符号整型无符号整型类型范围类型范围Int8 -128 : 127 UInt8 0 : 255 Int16 -32768 : 32767 UInt16 0 : 65535 Int32 -2147483648 : 2147483647 UInt32 0 : 4294967295 Int64 -9223372036854775808 : 9223372036854…

SpringSecurity框架|荣耀磨练

🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎 📚系列专栏:Java全栈,…

Unity之使用Photon Server + PUN2 开发局域网多人游戏

一.前言 Photon Engine是一款跨平台的实时多人游戏引擎,它提供了可靠的基础设施和工具,使开发者能够轻松地构建和部署多人游戏。Photon Engine支持多种平台,包括PC、移动设备和Web,同时还提供了多种语言的SDK,如C++、C#、Java、JavaScript等,使得开发者可以使用自己熟悉…

多元回归预测

多元回归就像线性回归(一个变量预测一个值)一样,但是具有多个独立值,这意味着我们试图基于两个或多个变量来预测一个值。 比如在线性回归中我们可以根据发动机排量的大小预测汽车的二氧化碳排放量,但是通过多元回归&a…

Kotlin泛型<in, out, where>概念及示例

Kotlin泛型<in, out, where>概念及示例 在 Kotlin 中&#xff0c;泛型用于指定类、接口或方法可以操作的对象类型。 in in关键字用于指定泛型类型是“输入”类型&#xff0c;这意味着它将仅用作函数或类的参数。 interface ReadOnly {fun read(): Any }class ReadW…