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炸掉,限流无解,用户刷新导致多活机房流量挂掉,导致崩溃。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微软近日推出了Phi-2,这是一款小型语言模型,但其性能却十分强大

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

数据的个人视角:数据可视化的意义

当谈论到数据可视化对个人用户的实用价值时,很多人可能会想到它仅适用于企业或专业领域。然而,数据可视化对个人用户同样具有重要的实用价值。本文将从可视化从业者的角度出发,简单说说数据可视化对个人用户的实用价值。 首先,数…

【大数据存储与处理】第四次作业

一. 简答题(共8题) 1. (简答题)此题为mongodb操作题,使用在线平台或分享的虚拟机平台软件,写出命令,并把结果截图一起提交。对testdb数据库items集合进行聚合分组,然后在统计卖出的平均数量(“…

云存储在 AIOps、数字人以及训练推理场景的最佳实践

云布道师 在以 AIGC 大模型为代表的技术新浪潮中,存储作为数据基础设施,将在数据采集、训练与推理、应用部署、内容审核与协同等多个关键环节发挥重要作用,助力 AI 创新加速。据 IDC 调研显示,67% 的中国企业已经开始探索 AIGC 在…

【PIE-Engine 数据资源】全球2.5分分辨率累积降水量数据集

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球2.5分分辨率累积降水量数据集时间范围1961年- 2018年空间范围全球数据来源worldclim代码片段var images pie.lmageCollection(WORLDCLIME/GLOBAL_PREC_MONTH") 二、描述 全球2.5分分率果…

Linux笔记---用户和权限管理基本命令介绍

🍎个人博客:个人主页 🏆个人专栏:Linux学习 ⛳️ 功不唐捐,玉汝于成 目录 ​编辑 前言: 命令: whoami: passwd: useradd: userdel: chm…

直升机产权共享,让飞行成为触手可及的梦想!

你曾想过能开直升机?甚至想拥有一架直升机?那种飞跃人生的心境,翱翔蓝天白云。可面临居多疑问,比如:学开直升机需要怎样的条件(年龄、学历、费用、学习内容及周期等)?到哪里学/买直升机比较安全…

【C语言】自定义类型之联合和枚举

目录 1. 前言2. 联合体2.1 联合体类型的声明2.2 联合体的特点2.3 相同成员的结构体和联合体对比2.4 联合体大小的计算2.4 判断当前机器的大小端 3. 枚举3.1 枚举类型的声明3.2 枚举类型的优点3.3 枚举类型的使用 1. 前言 在之前的博客中介绍了自定义类型中的结构体,…

利用Spark构建房价分析与推荐系统:基于58同城数据的大数据实践

利用Spark构建房价分析与推荐系统:基于58同城数据的大数据实践 基于Spark的房价数据分析预测推荐系统引言技术栈功能概述项目实现1. 数据爬取与处理2. 大数据分析与可视化3. 房价预测模型4. 协同过滤推荐系统5. Web应用开发6. 数据管理与用户管理 总结与展望 基于Sp…

常见的Web攻击手段分析总结,实战案例:通过 X-Forwarded-Host 的密码重置令牌泄漏

常见的Web攻击手段分析总结,实战案例:通过 X-Forwarded-Host 的密码重置令牌泄漏。 常见的 Web 攻击手段主要有 XSS 攻击、CSRF 攻击、SQL 注入攻击、DDos 攻击、文件漏洞攻击等。这几种攻击方式的防护手段并不复杂,却还是有很多企业遭受了该攻击,朔源到头,还是因为人为的…

【实时绘画】krita + comfyUI 实时绘画 儿童海报

1:打开comfyUI 2: 打开krita 打开 cd custom_nodes 输入命令 安装控件 git clone https://github.com/Acly/comfyui-tooling-nodes.git

Gamma分布

分布的概率密度为: 其中参数 分布的数学期望等于,方差等于。

java:用ClassLoader将文件转化为输入流

代码示例: package com.thb;import java.io.IOException; import java.io.InputStream;public class Demo4 {public static void main(String[] args) throws IOException {String resource "com/thb/test.properties";// 获得ClassLoaderClassLoader c…

大数据HCIE成神之路之数据预处理(3)——数值离散化

数值离散化 1.1 无监督连续变量的离散化 – 聚类划分1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 无监督连续变量的离散化 – 等宽划分1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实…

用户管理第2节课-idea 2023.2 后端--删除表,从零开始

一、鱼皮清空model文件夹下 二、鱼皮清空mapper文件夹下 三、删除 test 测试类下的部分代码 3.1删除SampleTest 3.2删除部分代码 UserCenterApplicationTests

自动化测试|Eolink Apikit 如何保存、使用测试用例

测试用例是测试过程中很重要的一类文档,它是测试工作的核心,是一组在测试时输入和输出的标准,是软件需求的具体对照。 测试用例可以帮助测试人员理清测试思路,确保测试覆盖率,发现需求漏洞,提高软件质量&a…

VC++ MinGW编译器将图片、字体等资源文件编译进程序和使用

Mingw使用附带的windres.exe可以将资源文件编译成.o文件, 之后与其他目标文件一起g++.exe链接生成程序 为了方便,使用mingw编译器版本的codeblock编写程序 用位图资源作为例子,新建一个空项目,在项目下新建一个资源文件,resource.rc,一个cpp文件main.cpp,一个头文件reso…

YOLOv8轻量化模型:模型轻量化创新 | MobileNetV3结合轻量级MLCA模块

💡💡💡本文解决什么问题:MobileNetV3结合轻量级的 Mixed Local Channel Attention (MLCA) 模块,实现轻量化 1.MLCA原理介绍 论文:https://www.sciencedirect.com/science/article/abs/pii/S0952197623006267 摘要:本项目介绍了一种轻量级的 Mixed Local Channel At…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -SpringMVC搭建框架

第一章 初识SpringMVC 1.1 SpringMVC概述 SpringMVC是Spring子框架 SpringMVC是Spring 为**【展现层|表示层|表述层|控制层】**提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的MVC 框架。 SpringMVC是非侵入式:可以使用注解让普通java对象&…

2万字揭秘阿里巴巴数据治理平台建设经验(上),附推荐系统完整源码

原文链接 https://mp.weixin.qq.com/s?__bizMjM5MjA0OTYwNQ&mid2247484210&idx1&sn5ceffbba79553219b792e2fcfb9c6789&chksma6ad739891dafa8eeabcde82ed24f04d9ffbbb837137fe7c1c72b38c986b38aa83f0c593e02a&token909431872&langzh_CN#rd 本文从七个…