怎么做能防止B站再崩?

2023-05-16

点赞关注,不会迷路!    

本文转载自:敖丙

大家都知道虽然我是一个程序员,但是我非常热爱运动,比如跳舞,这不每天回家睡前我都会在B站舞蹈区学习相关的舞蹈。

 

昨天也不例外,我一洗漱完就飞奔坐在电脑前,打开B站舞蹈区准备学习咬人喵,欣小萌、小仙若他们新的舞蹈动作,不得不说老婆们跳的真好,连我这种内向的人也不自觉的跟着扭动了起来。

正当我准备学下一个动作的时候,我发现怎么404 NOT found了。

坏了,作为开发的我第一直觉是系统崩了,我甚至怀疑是我网的问题,我发现手机网络正常电脑访问其他网页也正常,我就知道开发要背锅了。

 

我刷新了几次,发现还是这样,我就有点同情对应的开发同学了,年终应该没了。(到我写这个文章的时候网站还没恢复)

作为前程序员的我,就习惯性的去想B站的网站架构组成,以及这次事故复盘下来,可能会出问题的点。(老职业习惯了)

首先我们可以大致画一下简单的一个网站组成的架构图,我们再去猜想这次问题可能出在什么地方。

因为熬夜写文章哈,我也没在这种主要靠视频直播的公司呆过,技术栈也不是很了解,所以就用电商的大概逻辑,画了一个草图,大家轻点喷。

 

从上到下,从入口到cdn内容分发,到前端服务器,后端服务器,分布式存储,大数据分析,风控到搜索引擎推荐这我就随便画了一下,我想整体架构应该不会差异特别大。

我去网上随便查了一些类似斗鱼,B站,a站这样的公司,主要技术栈和技术难点主要有:

视频访问存储


就近节点
视频编解码
断点续传(跟我们写的io例子差多)
数据库系统&文件系统隔离

并发访问


流媒体服务器(各大厂商都有,带宽成本较大)
数据集群,分布式存储、缓存
CDN内容分发
负载均衡
搜索引擎(分片)


弹幕系统


并发、线程
kafka
nio框架(netty)


其实跟我们大家学的技术都差不多,不过他们的对应微服务的语言组成可能go、php、vue、node占比比较大。

我们分析下这次事故可能出事的原因和地方:

1.删库跑路

之前微盟发生过这个事情,我觉得各个公司应该都不会把运维的权限给这么大了,比如主机权限直接禁止了rm-rf、fdisk、drop这样的命令。

而且数据库现在大概率都是多主多从,多地备份的,容灾也应该是做的很好的,而且光是数据库炸了,那cdn的很多静态资源应该也不会加载不出,整个页面直接404了。

2.单微服务挂掉拖垮大集群

现在都是前后端分离的,如果是后端挂了,前端很多东西依然是能加载只是数据出不来报错,所以集群要挂也可能是前端挂了,或者前后端一起挂了,但是还是那个问题,现在看起来是所有静态资源都无法访问了。

不过这个点我觉得也有一点可能,因为部分服务挂了,导致大量报错,拉挂了集群,而且越是这样大家越会不断刷新页面,给其他服务重启增加难度,但是这个可能性没我最后说的可能性大。

3.服务器厂商出问题了

这种大网站都是cdn+slb+站集群,各种限流降级、负载均衡按道理都会做的很好,而且他们按道理不会不做容灾。

所以只有可能是这些前置服务的服务器厂商出问题了,CDN如果挂了那网关负载均衡啥的压力都大了,最后导致连锁的雪崩效应打挂了整套系统。

但是我比较疑惑的是B站的BFF应该会路由到一些接入节点比较进的机房,这样全国各地的小伙伴刷的时候,应该是有些人好,有些人坏,有些人时好时坏才对,但是现在看来是全坏了,难道他们押宝了一个厂商的一个节点片区?

我看网上也在传云海数据中心起火了,不知道真假,只能等醒来看看B站官宣了,B站原则上,理论上,从CDN、分布式存储、大数据、搜索引擎都应该做了很多保证措施才对,如果真all in了一个地方那确实不太明智。

我的感觉就是没做好全部上云,线下的服务器出了问题,刚好是没上云的是关键业务,现在公司都是公有云+私有云这样的混合云搭配用的,但是私有云部分都是B站自己的内部业务,所以应该不会他自己的机房出问题。

如果真像我说的,押宝了一个服务器厂商,只是cdn出问题还好,如果物理机还出问题了,那数据恢复可能就慢了,我自己之前做大数据的,我知道数据备份都是增量+全量,恢复的时候真的好了一部分还可以从其他地区节点拉,但是如果是放在一个地方了,那就麻烦了。

复盘


我想不管最后是什么原因造成的,我们技术人和公司应该思考的就是怎么去避免这样事情的发生。

数据备份: 备份一定要做,不然如果真发生什么自然灾害,那是很难受的,所以很多云厂商现在都选在贵州我老家这样自然灾害比较少的地方、或者湖底、海底(比较凉快成本能下去不少)。

全量、增量基本上都是一直要做的,分天、周、月不断的增量数据,以及按时的全量数据备份,这样可以让损失降低很多,就怕所有地区的机械盘都坏了(异地容灾除了地球毁灭不然都能找回来)。

运维权限收敛,还是怕删库跑路,反正我是经常在服务器上rm-rf,不过一般有跳板机才能进去的都可以做命令禁止。

上云+云原生: 云产品的各种能力现在很成熟的,企业应该对对应的云厂商有足够的信任,当然也得选对才行,云产品的各种能力是其一,还有关键时刻的容灾、应急响应机制都是很多公司不具备的。

云原生是近些年才大家才重视的技术,docker+k8s这对应的一些组合,加上云计算的各种能力,其实可以做到无人值守,动态缩扩容,以及上面说的应急响应,但是技术本身是需要一些尝试成本的,而且我也不知道B站这样视频为主的体系,适不适合。

kubernetes的设计上也会存在一些编排、通信的问题。

自身实力打造: 其实我觉得不管是上云,还是不上云,都不能太依赖很多云厂商,自己的核心技术体系和应急机制还是要有,如果云厂商真的靠不住怎么办?怎么去做真正的高可用,这我觉得是企业技术人员需要去思考的。

举个例子,很多云厂商都是一个物理机隔成多个虚拟机售卖,然后就会存在单物理机多宿主的情况,假如其中一方是电商玩双十一,一方是游戏厂商,对方大量占用网络带宽,你就可能存在丢包的情况,这对游戏用户来说是体验极差的,这样就是我说为啥不要过于信任和依赖云厂商的原因。

对方万一买了去挖矿,那更过分,把算力榨干,满负荷跑更难受。

B站这次,好在这样的问题提前暴露了,而且是晚上,应该有不少流量低谷的时间去恢复,我写到这里的时候,网页大部分恢复了,但是我发现还是部分恢复。

不管怎么说下次就可以完全杜绝了,相信B站后面很长一段时间都会忙于架构体系改造,去保证自己真正的高可用。

希望以后能让我稳定的在晚上看看舞蹈区,而不是盯着502、404的2233娘发呆,嘻嘻


原文链接:https://blog.csdn.net/qq_35190492/article/details/118717121

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

怎么做能防止B站再崩? 的相关文章

  • 常见驱动电路

    常见驱动电路 1 基础知识补充 xff08 三极管和MOS管 xff09 2 网上搜集的一些资料 xff08 个人认为可行 xff09 3 实践中使用过的一些驱动电路 4 学习开发板上面的驱动电路 三极管和MOS管的区别 1 三极管和MOS
  • VScode+keil插件-取代keil开发不要太爽了

    VScode 43 keil插件 取代keil开发不要太爽了 前言 xff1a 之前几年开发都是使用的keil xff0c 所以基本所有工程都是keil的工程 xff0c 一时间开发项目还不能及时转变使用HAL库开发 xff08 stm32
  • 关于maven项目中pom.xml文件报红问题的解决方法

    主要原因是可能需要的依赖没有进行自动的加载到本地仓库 xff0c 可以通过设置File gt Settings 设置好maven的本地仓库的位置以及maven的位置 xff0c 即可解决依赖的问题
  • 网络调试助手——局域网广播消息——模拟HTTP服务器

    网络调试助手 局域网广播消息 模拟HTTP服务器 前言 xff1a 作为一名嵌入式开发者 xff0c 不能熟练使用网络调试助手 xff0c 我羞愧至极 xff0c 赶紧弄明白记录下来才是正事 怎么使用网络调试助手向局域网广播消息 注释 xf
  • AT89C51、AT89S51、STC89C51有什么区别?

    标题AT89C51 AT89S51 STC89C51有什么区别 xff1f 1 首先明确一点 xff0c 这几个型号都属于51单片机 xff0c 程序和电路是通用的 xff1b 2 AT89C51是美国ATMEL公司生产的 xff0c 下载
  • 新装的GIT需要配置秘钥才能正常使用

    新装的GIT需要配置秘钥才能正常使用 实际这个过程就是git配置SSH 1 打开git 命令行终端输入指令生成秘钥 操作过程 xff1a 连击三次回车 xff0c 如下图即为成功 ssh span class token operator
  • 正则表达式_总结

    正则表达式 总结 说明 xff1a 限定SpinBox控件的输入范围 span class token comment 限定输入框为1 120 span SpinBox span class token punctuation span i
  • 电路设计_运算放大器应用

    电路设计 运算放大器应用 说明 xff1a 运算放大器是个万用宝 xff0c 要好好利用起来 xff0c 1 电压跟随 xff1a 起到隔离作用 xff0c 高阻抗变低阻抗 2 同向比例放大器 xff1a 放大输入电压信号 xff0c 在输
  • ESP32_IDF_基于win11的开发环境搭建

    ESP32 IDF 基于win11的开发环境搭建 说明 xff1a 1 安装ofline 2 编译下载 xff08 本来打算使用vscode配合使用来开发的 xff0c 奈何vscode环境真难搞 xff0c 放弃了 xff0c 用不惯 x
  • 树莓派的联网方式

    树莓派的多种联网方式 配置WiFi文件将空白的ssh文件放入sd卡配置WiFI文件 家庭局域网或热点查找树莓派ip 通过网线联网 配置WiFi文件 在sd卡中烧录系统之后 xff0c sd卡中会有如下程序 xff1a 将空白的ssh文件放入
  • STM32F103系列PWM波

    话不多说 xff0c 直接上我能跑通的代码 pwm h span class token macro property span class token directive hash span span class token direct
  • HTTP的几种认证方式之DIGEST 认证(摘要认证) 服务端

    https www cnblogs com xy ouyang p 12609387 html
  • Ubuntu 22.04LTS中使用aptitude来解决build-essential安装过程中过高版本包依赖问题

    小白近日安装完Ubuntu 22 04LTS后 xff0c 记不清是不是用了Software Updater还是自己手动upgrade了包 xff0c 导致在配置编译工具build essential 输入sudo apt install
  • 解决com.github.penggle kaptcha 2.3.2 报错

    需要从该地址处kaptcha的jar包下载位置 xff0c 从该地址下载jar包后 xff0c 可以把该jar包存放在C Users hp Desktop这个位置 xff0c 通过windows的cmd命令进入命令操作界面 执行以下命令 x
  • children 获取所有的子元素节点 2020/11/21

    children 获取所有的子元素节点 也是我们实际开发常用的 span class token operator lt span span class token operator span span class token consta
  • window常见事件 2020/11/24

    window onload是窗口 xff08 页面 xff09 加载时间 xff0c 当文档内容完全加载完成后触发该事件注意 xff1a window onload传统注册事件方式只能写一次 xff0c 如果有多个 xff0c 会以最后一个
  • 用if函数,进入无限循环,如何退出当前函数

    用if函数 xff0c 进入无限循环 xff0c 如何退出当前函数 wxml文件 span class token operator lt span view class span class token operator 61 span
  • form-type:submit和reset用法

    form type submit和reset用法 span class token operator lt span form bindsubmit span class token operator 61 span span class
  • checkbox背景颜色设置

    checkbox背景颜色设置 js文件 data span class token punctuation span languages span class token punctuation span span class token
  • MongoDB安装方案

    安装MongoDB 黑马头条项目 43 人力资源后台项目的接口服务均采用了 MongoDB 43 KOA2 技术栈 xff0c 所以在使用本地服务之前 xff0c 我们需要首先安装MongoDB xff0c 这也是该环节中出问题最多的一项

随机推荐

  • 小程序生成海报携带参数-云函数生成二维码

    1 逻辑代码 span class token keyword async span span class token function qcFn span span class token punctuation span span cl
  • 小程序动画

    小程序动画 点击事件 span class token comment lt 三大特色 gt span span class token tag span class token tag span class token punctuati
  • 小程序云开发--内容安全审查API云调用

    云调用 云调用是小程序 云开发提供的在云函数中调用微信开放接口的能力 xff0c 需要在云函数中通过 wx server sdk 使用 接口方法 openapi span class token punctuation span secur
  • 如何通过异或运算快速简单的实现两个数的值的交换

    实现代码如下图所示 xff1a public class class01 public static void swap int a int b a 61 a b b 61 a b a 61 a b System out println a
  • Cisco ISE AAA认证

    ISE 介绍 思科身份服务引擎 ISE 是一种身份验证安全服务 可以在简单而灵活的界面中显示用户和设备 查看并通过网络平台共享详细信息 使其了解用户 设备和网络的具体情况 当然Cisco还有类型的产品 xff0c 比如NAC ACS 那么三
  • PNET模拟器 安装(附下载地址)

    PNET模拟器介绍 Lab is Simple PNET安装步骤 1 将OVA文件导入Vmware 2 注意点 3 开机 xff0c 进行安装 4 选择第一个 5 安装成功 6 打开浏览器输入上边的IP地址 7 选择Online Mode
  • Python自动化备份网络设备配置

    前提 xff1a https blog csdn net weixin 50299079 article details 109300864 好嘞 xff0c 废话不多说 xff0c 开始搞 本文以Cisco CSR1000V设备配合Pyt
  • Check Point R80.40 防火墙

    Check Point 它是一家以色列的公司 xff0c 是面向全球企业用户业内领先的信息安全解决方案提供商 Check Point 解决方案对恶意软件 勒索软件和高级目标威胁的防范率处于业界领先水准 xff0c 可有效保护客户免受网络攻击
  • YangSuite 与 Netconf

    Cisco YangSuite 提供了一组工具和插件 xff0c 用于学习 xff0c 测试采用yang模型的可编程接口 xff0c 例如Netconf Restconf gNMI等 关于理论可以参考之前写的Cisco YangExplor
  • DMVPN 动态多点隧道技术

    DMVPN的特点 配置简单 中心站点只需要配置一次即可 xff0c 增加站点无需修改中心站点配置 xff0c 分支站点配置几乎相同 xff1b 性能好 能够实现动态mGRE隧道 xff0c 数据在分支之间能够直接通信 xff0c 一次加解密
  • Cisco Viptela SD-WAN 基本部署

    Cisco SD WAN Cisco SD WAN四平面 xff0c 四组件 管理平面 vManage xff1b 提供了一个高度可视化的仪表板 xff0c 可简化网络操作 它在整个 SD WAN 结构中提供集中配置 管理 操作和监控 编排
  • Ubuntu20.04安装ROS系统(其中里边出现了很多错误并解决了)

    目录 前言配置流程1 Software amp Update设置2 ifconfig命令3 安装支持SSH4 安装源5 密钥6 更新7 开始安装ROS8 配置环境变量9 验证是否安装成功 前言 首先非常感谢网上的各种安装教程 xff0c 以
  • 大龄程序员没有出路吗?

    点赞关注 xff0c 不会迷路 xff01 前言 说好的更新终于来了 文末有福利 关于这篇文章 xff0c 其实一直在犹豫怎么跟大家说 因为大龄程序员是一个群体 xff0c 但是每个人的情况又各有不同 这篇文章只能给你一个参考 xff0c
  • 怎么做一个分分钟哄女朋友开心的小程序

    点赞关注 xff0c 不会迷路 xff01 主要目的 xff1a 做一个以女朋友照片为背景的画布 xff0c 装饰点小花小草小气球小爱心 xff0c 另设一个女朋友的小图片可以自由的移动 那么就需要创建一个小花类一个气球类 xff0c 一个
  • maven中Profiles的配置及作用

    1 maven中Profiles的配置方法 xff1a pom xml xff1a pom xml中声明的profile只对当前项目有效 当你的项目存在父模块和字模块的时候 xff0c 通常配置在父模块即可 用户settings xml x
  • Java如果在try,catch里面执行return,那么还会不会执行finally?

    点赞关注 xff0c 不会迷路 xff01 总结 xff1a 1 不管有没有异常 xff0c finally中的代码都会执行 2 当try catch中有return时 xff0c finally中的代码依然会继续执行 3 finally是
  • 从三本院校到斩获字节跳动后端研发Offer

    文章篇幅较长 xff0c 都是满满的干货 xff0c 看完收获绝对很多 xff0c 文末有学习笔记和学习资料领取 前言 大家好 这次应博主的邀约 xff0c 写一篇关于我的 Java 自学经历 xff0c 希望对小伙伴们有所帮助 我本科就读
  • 【面试必看】肝出万字攻略,详解腾讯面试

    点赞关注 xff0c 不会迷路 xff01 2021最新学习面试资料 点击一起学习 暗号 xff1a csdn 最新学习资料 43 简历优化资源 前言 今天给大家分享下腾讯面试攻略 标题涉及的范围很广 xff0c 对多数面试腾讯的人而言 x
  • 国内最简单易用的源码,Nacos必须榜上有名!

    点赞关注 xff0c 不会迷路 xff01 2021最新学习面试资料 点击一起学习 暗号 xff1a csdn 最新学习资料 43 简历优化资源 最近新组件新的小组 xff0c 开始了新的项目 xff0c 项目的注册组件选择了我们国产的Na
  • 怎么做能防止B站再崩?

    点赞关注 xff0c 不会迷路 xff01 本文转载自 xff1a 敖丙 大家都知道虽然我是一个程序员 xff0c 但是我非常热爱运动 xff0c 比如跳舞 xff0c 这不每天回家睡前我都会在B站舞蹈区学习相关的舞蹈 昨天也不例外 xff