上次半夜被404给吓了一跳,那个时候我刚刚洗漱完,想跟着网上的视频学点新舞步,结果页面直接弹出了404 NOT FOUND。第一反应就是系统崩了,我检查了手机网络和其他网页都没问题,估计是开发同仁们熬夜搞出来的动静。刷了好多次都没用,我就开始拆解B站的架构,从CDN到SLB,再到Kafka、NIO和Netty这些模块,慢慢理清头绪。 后来我画了一张草图,把B站的“骨架”给展示出来了。入口层主要是域名、CDN和SLB;应用层是前端服务器和后端微服务;数据层是分布式存储、大数据以及搜索引擎;传输层是流媒体编解码和断点续传;消息层还有Kafka、弹幕缓存和负载均衡。PHP、Node、Vue这几个技术栈也在里面。 我把斗鱼、A站和B站的技术难点列了出来,发现视频网站离不开视频存储、流媒体节点选择、编解码与断点续传这些麻烦事。数据库和文件系统隔离也很重要。还有数据库的高并发读写、流媒体服务器带宽成本巨坑这些问题。现在的问题是,哪一环先“爆”了?我想了想可能是三种情况:删库跑路可能性低,微服务拖垮集群可能性中等,服务器厂商团灭可能性最高。 不管是哪种情况,我们都要提前做好准备。数据备份一定要全量增量天天跑,最好放在贵州山沟或者湖底海底这些地方。运维权限要收敛,高危命令锁死不说还得最小权限原则。上云的时候要选好容灾机制透明的厂商,Docker和K8s能帮我们把扩容缩容玩得更轻松。关键业务不能全放在云上,还要有物理机兜底。 凌晨演练很重要,这次事故幸亏发生在深夜流量低谷才有时间窗口抢救。但愿这次事故能让大家意识到高可用不是口号。现在网页已经部分恢复了,但还是有些地方残留着404的冷风。今晚继续蹲舞蹈区打卡吧,希望刷新十次也别再跳出2233娘的怀抱了。