b站高可用架构 笔记
b站高可用架构
关键点:主机房,多活和多活机房
参考文章:bilibili技术总监毛剑:B站高可用架构实践
1. 前端和数据中心负载均衡
-
前端负载均衡(动态CDN):最近节点、带宽策略、可用服务容量
-
数据中心负载均衡:均衡流量、识别异常节点、扩容、提高可用性
-
子集选择算法:减少心跳检测成本,平均分配后端至客户端,节点变更持续均衡
-
高并发:多集群提高吞吐量,数据保存多缓存,单集群故障迁移成本降低
2. 负载均衡算法
-
正常:轮询
-
问题:请求处理成本不同、物理机差异、k8s容器切换用户感知
-
关键:考虑服务器可用性,构建全局视图,负载+可用性
-
算法:choice-of-2 算法,选2节点打分选择;预热新节点;低分节点统计衰减避免“永久黑名单”
3. 分布式限流
-
作用:服务器过载,先降级服务->限流保证服务稳定
-
正常:静态QPS
-
问题:某用户请求过重,挤兑其他用户
-
关键:不同流量、重要性、用户对应不同QPS,最重要服务自保
-
解决:使用算法quota-server获取quota,基于滑动窗口(一段时间内使用的次数)最大值计算quota;最大最小公平算法解决大消耗者饥饿;客户端概率公式截流,不全部拒绝
-
配额获取:基于统一错误码
4. 重试、超时、应对连锁故障
-
重试:限制次数,只失败层重试,失败返回错误码避免级联,设置周期速率诊断
-
超时:高并发高延迟引发故障,超时为fail fast让请求消耗或丢弃,上下游不一致导致资源浪费
-
“默认值策略”:每个请求每个阶段检查足够剩余时间
-
跨进程超时控制:rpc承诺超时时间,不足取消传递,超时时间覆盖上游
-
应对连锁故障:避免过载,限流->降级,重试退避,超时控制,变更管理,压测演练,扩容重启消除流量
5. 其他
当客户端访问服务时,将用户数据保存到多个缓存上
-
当Quota耗尽或申请Quota的时间过期,也能主动拉取数据。
-
quota server故障:降级本地策略或直接放行
-
Apisix vs Envoy:Apisix基于nginx ,nginx的多 worker 的协作方式具有高并发优势,Envoy总线设计使得处理东西向流量具有优势
多服务器心跳检测成本过高:
解决:子集选择。client不连接全集,只连接一部分服务器进行负载均衡。
6. b站架构
-
无限递归导致主机房CPU爆掉,限流无解,用户刷新多活机房流量挂掉
-
崩溃不影响CDN静态资源
-
多活:不同业务不同机房,主机房承载所有在线业务
无限递归导致主机房CPU爆掉,限流无解,用户刷新多活机房流量挂掉
问题:
1. b站架构如何实现高效和可靠的负载均衡
-
前端和数据中心负载均衡器(BFE和Envoy),选择最近节点、根据带宽和容量均衡流量
-
子集选择算法,减少连接和心跳检测成本,持续均衡节点变更
-
choice-of-2算法考虑服务器可用性,选2节点打分选择,预热新节点,统计衰减低分节点
2. 如何优化超大规模集群的连接和限流
-
子集选择算法,客户端只连接后端子集,减少连接和心跳成本
-
quota-server获取和计算quota,减少请求backend频次;滑动窗口算法;最大最小公平算法防大消耗者饥饿
-
客户端概率公式截流,不全部拒绝,配额获取基于统一错误码
3. 如何设置合理的重试和超时策略- 重试:限制次数,只失败层重试,失败返回错误码避免级联,设置周期速率诊断
- 超时:高并发高延迟引发故障,超时为fail fast让请求消耗或丢弃
- “默认值策略”:每个请求每个阶段检查足够剩余时间
- 跨进程超时控制:rpc承诺超时时间,不足取消传递,超时时间覆盖上游
4. 如何防止和处理连锁故障- 避免过载,限流->降级,重试退避,超时控制
- 变更管理,压测演练,扩容重启消除有害流量
5. 如何利用多活机房来提高服务可用性
- 多活(容灾):根据不同业务选择不同机房,主机房承载所有在线业务
其他:主机房CPU炸掉,限流无解,用户刷新导致多活机房流量挂掉,导致崩溃。
相关文章:

b站高可用架构 笔记
b站高可用架构 关键点:主机房,多活和多活机房 参考文章:bilibili技术总监毛剑:B站高可用架构实践 1. 前端和数据中心负载均衡 前端负载均衡(动态CDN):最近节点、带宽策略、可用服务容量 数据中心负载均衡:均衡流量、识别异常节…...

Android: Ubuntu下交叉环境编译常用调试工具demo for lspci命令(ARM设备)
lspci命令交叉环境编译(ARM设备) 交叉编译工具下载: https://releases.linaro.org/components/toolchain/binaries https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/ lspci命令交叉环境编译(ARM设备): 1&a…...
《2023全球IPv6支持度白皮书》近日发布
近日,全球IPv6论坛联合中国的下一代互联网国家工程中心面向全球发布《2023全球IPv6支持度白皮书》。白皮书显示,在过去一年,全球IPv6支持度大幅提升,部署应用成效显著。全球IPv6部署率超过40%的国家数量同比增长了30%,…...

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Spring的AOP前奏
第一章 AOP前奏 1.1 代理模式 代理模式:我们需要做一件事情,又不期望自己亲力亲为,此时,可以找一个代理【中介】 我们【目标对象】与中介【代理对象】不能相互转换,因为是“兄弟”关系 1.2 为什么需要代理【程序中…...

2023年度佳作:AIGC、AGI、GhatGPT 与人工智能大模型的创新与前景展望
🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 写在前面参与规则 ✅参与方式:关注博主、点赞、收藏、评论,任意评论(每人最多评论…...

直播电商“去网红化”势在必行,AI数字人打造品牌专属IP
近年来,网红直播带货“翻车”事件频发,给品牌商带来了信任危机和负面口碑的困扰,严重损害了企业的声誉。这证明强大的个人IP,对于吸引粉丝和流量确实能起到巨大的好处,堪称“金牌销售”,但太过强势的个人IP属性也会给企业带来一定风险&#x…...

Java如何开发PC客户端(Windows,Mac,Linux)
项目编译工具:Gradle开发工具: Idea开发语言: 建议java17以上ui组件:openjfx (org.openjfx.javafxplugin)打包工具: jpackage (org.beryx.jlink) 一、如何解决打包问题 java 14以后,有了jpackage工具,能够…...
热红外图像非均匀校正方法
热红外图像中的非均匀性通常指的是热像仪在感知温度时出现的空间上的灵敏度不均匀。这种非均匀性可能是由于热像仪本身的制造差异、温度梯度引起的热漂移、光学系统中的不均匀性等因素引起的。为了获得更准确、可靠的温度信息,需要进行非均匀校正。 原因࿱…...

性能压力测试--确保企业数字化业务稳健运行
随着企业的数字化转型和依赖云计算的普及,软件系统的性能已经成为企业成功运营的关键因素之一。性能压力测试作为确保系统在各种条件下都能高效运行的关键步骤,对企业的重要性不可忽视。以下是性能压力测试对企业的几个重要方面的影响和作用:…...
【Java】7种逻辑运算,你了解几种
嗨,朋友们!今天我们聊点轻松的,来看看Java中那些常用的逻辑运算。可能你在学习编程的路上已经遇到过它们,但是让我们像闲聊一样,再重新认识一下这些小伙伴们! 那个老实巴交的“与”(AND&#x…...

达梦到达梦的外部链接dblink(DM-DM DBLINK)
一. 使用场景: 部链接对象(LINK)是 DM 中的一种特殊的数据库实体对象,它记录了远程数据库的连接和路径信息,用于建立与远程数据的联系。通过多台数据库主库间的相互通讯,用户可以透明地操作远程数据库的数…...

create-react-app 打包去掉 map文件
前言: 在使用 create-react-app 创建的React应用中,默认情况下会生成带有.map文件的打包文件,这些.map文件包含了源代码和调试信息,用于开发和调试过程中进行错误跟踪。然而,在生产环境中,这些.map文件通常…...
fdisk工具详解
fdisk 是一个在Unix和类Unix系统中用于管理磁盘分区的强大工具。以下是对你列出的每个参数的解释和示例: rootswitch:/home/admin# fdisk -l /dev/mmcblk0 Disk /dev/mmcblk0: 57.63 GiB, 61865984000 bytes, 120832000 sectors Units: sectors of 1 * 512 512 by…...

【蓝桥杯选拔赛真题81】Scratch旅游相册 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
目录 scratch旅游相册 一、题目要求 编程实现 二、案例分析 1、角色分析...
水平居中、垂直居中、水平垂直居中
1.水平居中 1.1块级元素 text-align:center; 1.2块级元素 注意:需要给标签指定宽度 margin:0 auto; 1.3绝对定位 和 自我位移 position:absolute; left:50%; transform:translateX(-50%); 注意:使用绝对定位会使元素脱离文档流 1.4flex布局 d…...
flex布局换行后出现间隙问题
问题:换行后,行间出现空白间隔,如果没有设置父容器的高度,不会出现这个问题,父容器高度会随子项增多,而变大。 .content {height: 8rem;display: flex;flex-wrap: wrap;justify-content: space-between;al…...

RPC(3):HttpClient实现RPC之GET请求
1HttpClient简介 在JDK中java.net包下提供了用户HTTP访问的基本功能,但是它缺少灵活性或许多应用所需要的功能。 HttpClient起初是Apache Jakarta Common 的子项目。用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 H…...
PHP函数里面写JQ CSS HTML的写法案例
/*** description: 返回顶部* param {*}* return {*}*/public function gotop() {global $_L, $COMCFG;$plugin $COMCFG[plugin][gotop] ?: [];$plugin array_merge(["right" > 30,"bottom" > 80,"color" > "rgba(255, 25…...
爬虫工作量由小到大的思维转变---<第十八章 Scrapy请求处理与返回策略>
前言: 今天我们来聊一聊Scrapy爬虫中的请求处理与返回策略。你有没有遇到过一个Item需要由多个请求组成的情况?如果是的话,那么对请求的处理和决定是否返回处理过的Item对象就变得格外重要。看一下Scrapy中的相关策略,实现爬虫的完美康复。 …...

【免费直播今天下午!】见微知著 唤醒视觉:机器视觉与成像应用解决方案,诚邀您的参与!
机器视觉的出现和应用突破了人眼目之所及的限制,在工业制造、生物医疗和科学研究等领域,我们利用各种视觉和光电设备,得以在“方寸之地”收获细微之处的画面。 如何找寻行业领先的视觉方案、拓宽视觉应用行业?如何拨开云雾、见微…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...