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

news2024/12/26 0:38:58

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

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

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

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

Java项目案例《100套》

uniapp小程序《100套》

目录

一、为什么选择Nacos

二、DNS-F的技术价值

三、DNS-F的应用场景

四、DNS-F在数据库场景的落地

💖微服务实战


一、为什么选择Nacos

虎牙关注 Nacos 是从 v0.2 开始的,也参与了社区的建设,可以说是最早期的企业用户。

在虎牙的微服务场景中,原先存在多个注册中心,每个注册中心服务于不同的微服务部分,导致缺少一个能够整合这些注册中心,并将它们逐一打通的大型注册中心来管理整个微服务生态系统。因此,考虑使用Nacos作为服务注册中心,以下是考虑使用Nacos的原因:
1. 相比其他方案,Nacos可以与多个开源产品集成,例如k8s,spring cloud和dubbo, 并使用dns-f作为agent,因此不需要额外的配置或本地安装agents或SDK。
2. Tseer Agent, Consul等方案需要本地安装agents或SDK,且他们仅仅提供限定的接口,因此,它们不太适合支持不同的开源产品。
3. K8s使用coreDNS来查询IP地址,但为集群配置单个DNS,因此无法管理整个微服务生态系统,而Nacos则可以用来管理整个微服务生态系统。
4. Spring Cloud的大部分功能需要深度集成SDK中才能实现,这使得它难以支持其他语言。
5. L5是腾讯内部的服务发现方案,同样需要本地安装L5 agent,向L5 DNS获取到服务数据,因此也不能适应不同的开源产品。 综上,我们认为使用Nacos作为服务注册中心是一个非常好的选择,因为它可以通过dns-f作为agent,并且支持多种开源产品的集成,同时也为提供了一个管理整个微服务生态系统的中心。

心。

Nacos支持DNS-F功能,可以集成多个开源产品(如K8S、Spring Cloud和Dubbo)以实现服务的注册。在选择服务配置中心方案时,希望能够打通配置中心和注册中心,以省去在微服务治理方面的投入。因此,还比较了几个服务配置中心的开源方案

在当前技术发展的背景下,许多开发者都在关注和探索不同的配置中心(Configuration Center),如Nacos、Spring Cloud Config Server、ZooKeeper和Etcd等。这些工具通过提供一个中心化存储器和API接口,使得配置修改、版本管理和配置推送等功能变得更加高效。 虽然这些配置中心都有着其独特的优势,但是它们同时也存在一些不同的缺点。
下面将这些配置中心进行优缺点对比:
- Nacos: Nacos提供一个直接在控制台上进行配置修改的功能,并且修改的配置能够自动推送到监听的客户端。同时,它还支持多种API接口(RESTful API,Java Native接口,Spring Cloud接口等),并且能够自动记录各个修改的版本信息,便于追踪和管理。总的来说,Nacos具有易用性高、扩展性强、功能丰富等特点。
- Spring Cloud Config Server: Spring Cloud Config Server需要使用Git仓库进行配置修改,并且客户端只能在启动的时候加载。虽然它也支持多种API接口和其他语言客户端,但是在版本管理方面相对比较弱。总的来说,Spring Cloud Config Server适用于Web应用程序,特别是基于Spring的应用程序。
- ZooKeeper: ZooKeeper是一个支持Java原生接口的配置中心,同时提供配置自动推送的功能。但是,它没有自动记录版本信息和配置推送历史等功能,需要通过调用ZK API进行相应的修改。总的来说,ZooKeeper适用于分布式系统的管理和控制。
- Etcd: Etcd通过提供RESTful API进行配置修改,并且修改的配置能够自动推送到监听的客户端。但是,它也没有自动记录版本信息和配置推送历史等功能,且也需要通过调用来Etcd API进行相应的修改。总的来说,Etcd适用于基于容器的云原生应用程序和大规模分布式系统。 基于以上对比和综合分析,建议选择Nacos作为配置中心。因为它不仅易于使用和扩展,而且具有较强的版本管理和配置推送追踪能力,适合各种类型的应用程序
针对微服务体系现状以及业务场景,在诸多可选服务注册和服务发现的方案中,综合对比了Spring Cloud Config Server、Zookeeper 和 ETCD,最终选择了Nacos。在使用过程中,发现Nacos的优势远比调研过程中发现的更多。下面,将以DNS-F、Nacos-Sync、CMDB 和负载均衡为例,分享虎牙的实践

二、DNS-F的技术价值

Nacos提供的DNS-F功能带来的技术价值有以下四个方面。
首先,DNS-F功能填补了内部微服务缺乏全局动态调度能力的空白。相比之下,多个微服务体系之间缺乏独立和协同操作能力,需要借助Nacos来融合注册中心以使微服务体系之间实现全局动态调度。
其次,DNS-F解决了服务端内部面临的挑战,包括延时、解析不准和故障牵引慢的问题。在具体应用时,一些微服务框架并不支持同机房或者CMDB路由。在一个服务被注册到多个IDC中心后,即使在同一机房内,也可能调用不同机房的节点,导致无端延迟和解析不准。即使在DNS解析优化之后,也不可能解决全部 延时和解析不准问题,因为DNS只是IP策略的近地解析,并不能根据服务的物理状态和物理信息进行路由,同时缺乏统一的注册中心,当核心服务出现异常问题时,难以准确判断如何进行故障牵引,从而导致故障牵引慢。连接Nacos的全局注册中心和配置中心可以解决这些问题。(目前,虎牙还在微服务体系的改造过程中,未完全实现统一的注册中心)
第三,DNS-F功能提供了专线流量牵引能力,解决了核心机房流量互通的问题。专线特有的物理建设特性和专线容量的冗余只有50%的情况下,某个服务可能出现突发流量大于平时两百倍的情况,超出专线的建设能力,从而可能导致全网故障。但是,通过Nacos的全局注册中心和调度能力,可以将流量牵引到其他地方,例如迁移到公网或者牵引到一个不存在的地址来平衡流量。某个服务出现问题,也不会影响全局服务。
第四,DNS-F功能支持服务端的多种调度需求,包括同机房路由、同机器路由,以及同机架路由。同时,基于Nacos的DNS-F功能,还实现了外部域名解析的加速和服务故障牵引的秒级生效。

三、DNS-F的应用场景

该图描绘了 Nacos DNS-F 的实际运作。它通过拦截 OS 层的 DNS 请求来处理域名。当 DNS 请求的域名属于内部服务时,Nacos DNS-F会从 Nacos Server 获取结果。如果域名并非内部服务,Nacos DNS-F 将会将其转发给其他 LocalDNS 完成解析。

四、DNS-F在数据库场景的落地

以数据库高可用的应用场景为例,数据库切换效率较低,依赖业务方手动修改配置,时效不确定,通常需要10分钟以上。尽管数据库已经实现了主备功能,但当主服务出现问题而需切换IP时,仍需要时间与运维和开发协作。 为了解决这个问题,我们引入DNS技术。DNS可快速使用备用主机的IP地址进行切换,屏蔽故障,同时自动实现故障检测和故障切换,无需运维和开发协作,节省宝贵时间。此外,也可使用MySQL-Proxy等其他场景适用的解法,但MySQL-Proxy还在建设中,使用DNS技术是目前最为合适的解决方案。 最后,分享基于DNS-F对LocalDNS的优化。目前还没有建设自己的LocalDNS,而是使用公共的DNS,大致有以下组成部分。

在应用程序中,使用公共 DNS 能够带来某些好处。然而,这种组成方式存在一个问题:如果服务突然崩溃然后又马上恢复,我们将无法重现崩溃原因。这是因为在许多情况下,请求超时或解析失败是由公共 DNS 引起的。由于无法保留现场信息,导致难以发现问题。 根据我们的监测数据,使用公共 DNS时,DNS 解析错误率约为1‰,而超时比例则更高。这意味着如果服务没有做好容错处理,服务会出现异常。值得注意的是,许多公共 DNS 解析节点的延迟是不稳定的,导致解析延迟相差较大。比如在亚马逊上部分不良节点,解析延迟平均超过三四十毫秒。

为了优化使用公共 DNS 所带来的问题,我们针对本地DNS基于DNS-F进行了一系列优化。
优化效果如下:
● 平均解析时间从之前超过两百毫秒降低至两毫秒以下;
● 缓存命中率从92%提升至99%以上;
● 解析失败率之前为1‰,现在基本上没有了。
这些优化效果还体现在我们的风控服务上。平均延迟与异常比例分别降低了10毫秒和25%,有效降低了因延迟或服务超时导致用户上传的图片或文字违规事件。

💖微服务实战

✨【微服务】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/544849.html

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

相关文章

一文快速了解浏览器Sui Explorer

Sui作为一条基于第一原理重新设计和构建而成的L1公链,所有区块和交易信息皆公开透明,每个人都能自行查看。通过Sui链上浏览器,用户可以迅速了解链上的交易情况,比如当前的TPS和Gas价格,也可以使用Digest来查看特定交易…

工厂安灯呼叫系统解决方案

在选择安灯呼叫系统之前,需要先了解自己的需求。不同的工厂可能有不同的需求,例如生产线的规模、生产过程中可能会出现的问题等。因此,选择安灯呼叫系统之前,需要先考虑自己的需求,以便选择到最适合自己的系统。要从多…

三十九、分布式事务、seata、

1、事务 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列SQL操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。 1.1 ACID事务的特点 原子性: 一致性:隔离性持久性 1.2 事务并发带来的问题 脏读 幻读 不可重复读 …

Mongodb Shell 常用操作命令

目录 一、启动与关闭mongodb服务 二、进入shell操作 三、常用shell命令 一、启动与关闭mongodb服务 启动:命令: ./mongod -config ../data/mongodb.conf 关闭命令: ./mongod -config ../data/mongodb.conf -shutdown 二、进入shell操作 命令:./mongo 三、常用shell命令 sh…

mysql查看实时执行的sql

MySQL默认不能实时查看执行的SQL语句,因为这会消耗一定的资源。 要开启这个功能,稍微配置一下,打开这个LOG记录就可以了。 查看开启情况 SHOW VARIABLES LIKE "general_log%";general_log值为OFF说明没有开启: 打开…

C++——内存管理+模块

作者:几冬雪来 时间:2023年5月19日 内容:C——内存管理模块 目录 前言: 1.new和delete操作自定义类型: operator new/delete: 定位new表达式(placement-new): …

横向对比 11 种算法,多伦多大学推出机器学习模型,加速长效注射剂新药研发

内容一览:长效注射剂是解决慢性病的有效药物之一,不过,该药物制剂的研发耗时、费力,颇具挑战。对此,多伦多大学研究人员开发了一个基于机器学习的模型,该模型能预测长效注射剂药物释放速率,从而…

软件物料清单:打开软件资产黑匣子的关键钥匙

大家有没有遇到过,手机被免费召回维修的情况? 有些人可能遇到这样的问题,手机购买一段时间后,突然收到手机品牌官方发布的通知:听筒模块上的某个组件可能会发生故障,会出现拨打或接听电话时听筒发不出声音的…

接口自动化【五】(HandleRequests类的封装,及postman上下接口依赖的初步认识)

文章目录 前言一、封装发送请求的操作二、迷惑的知识点三、postman的全局变量机制总结 前言 所有的封装就是一种思想,这种思想能不能想到,其实跟写代码建立思维有很大的关系。 下面也是我学到的一种思想,其中对每个函数有解读。以及易错点的…

算法小课堂(九)分支限界法

一、概述 1.1概念 分支限界法是一种求解最优化问题的算法,常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。其基本思想是把问题的可行解展开,再由各个分支寻找最佳解。 在分支限界法中,分支是使用广…

Go 语言核心编程-环境入门篇

第 1 章 Golang 开山篇 1.1 Golang 的学习方向 Go 语言,我们可以简单的写成 Golang 1.2 Golang 的应用领域 1.2.1区块链的应用开发 1.2.2后台的服务应用 1.2.3云计算/云服务后台应用 1.3 学习方法的介绍 1.4 讲课的方式的说明 努力做到通俗易懂注重 Go 语言体系&…

【软件测试项目】湖南交警一网通测试计划_2.0正版

目录 一、引言 1.1 编写目的 1.2 项目背景 1.3 适用范围 1.4 专业术语 二、测试任务 2.1 测试范围 2.2 测试目标 2.3 参考文档 2.4 提交文档(交付件) 三、测试进度 四、测试资源 4.1 人力资源 4.2 环境资源 4.3 测试工具 五、测试策略 5.1 功能测试 5.2 压力…

vue中 process.env与process.VUE_CLI_SERVICE

在vue中设置环境变量离不开process.env属性,那么如何设置自定义环境变更呢? 可以通过设置.env文件或者借助process.VUE_CLI_SERVICE来设置 process process 对象是一个 global (全局变量),提供有关信息,控…

基于差分进化算法的微电网调度研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Java经典笔试题—day12

Java经典笔试题—day12 🔎选择题🔎编程题🥝二进制插入🥝查找组成一个偶数最接近的两个素数 🔎结尾 🔎选择题 (1)以下方法,哪个不是对add方法的重载? public class Test {public void add( in…

智慧井盖监测终端,智能井盖-以科技解决智慧城市“顽疾”,守护城市生命线

平升电子智慧井盖监测终端,智能井盖-以科技解决智慧城市“顽疾”,守护城市生命线-智慧井盖,实现对井下设备和井盖状态的监测及预警,是各类智慧管网管理系统中不可或缺的重要设备,解决了井下监测环境潮湿易水淹、电力供应困难、通讯不畅等难题…

MySQL主从复制原理

一、概述 1、什么是主从复制 主从复制是用来建立一个和 主数据库完全一样的数据库环境称为从数据库;主数据库一般是准实时的业务数据库。 2、主从复制的作用 高可用,实时灾备,用于故障切换。比如主库挂了,可以切从库。读写分离…

nginx配置监听443端口,开启ssl协议,走 https 访问

本文目录 前言一、检查 linux 服务器上的 nginx 是否安装 ssl 模块二:为 nginx 安装 ssl 模块三、nginx 开启 443 端口监听(https配置)成功配好后的效果如下遇到的问题一:证书无效遇到的问题二:连公司的网络走 https 能…

飞书自建无需代码连接Flomo的方法

飞书自建用户使用场景: 公司的飞书群里,有一个名为“新产品开发”的群组,用于讨论公司新产品的开发。该群组中设置了一个机器人,名为“新产品助手”。当群组成员在讨论中需要记录一个新的产品想法时,他们可以这个机器人…

[Halcon3D] 主流的3D光学视觉方案及原理

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…