从 B 站崩溃报告看分布式系统的技术栈

从B站实习面经看Java后端面试:除了八股文,面试官更想听你聊什么? 本文深入探讨了Java后端面试的最新趋势,指出面试官更关注技术选型、问题排查和架构设计的实际能力,而非机械背诵八股文。通过B站实习面经案例,分析了如何展示技术思考过程、系统性排查问题及架构权衡能力,帮助求职者在面试中脱颖而出。 阅读详情

前言

​

​不知道大家还记得去年 B 站(哔哩哔哩)挂了那次严重的事故不,记得当时在全网也是引起了热议。

离当时过去刚好一年多的时间,今天看到 B 站前两天在公众号上发的复盘报告。2021.07.13 我们是这样崩的 文章从八个方面全链路再现了当时事故发生和处理的全过程:

包括至暗时刻,初因定位,故障止损,根因定位,原因说明,问题分析,优化改进,总结。

不知道大家看过没,我全文看了一下,看完还挺唏嘘的,最终原因竟然是一个字符串类型的数字参数 0 导致的死循环。

不过文章本身写的还是非常专业和严谨,对于咱们技术的同学,好嘛,也是一次难得的学习机会。

只是,看到文章最后一段代码,我实在忍不住多说几句,一个求最大公约数的GCD 函数,居然就是导致 B 站崩溃的元凶..

因为,下面这段代码对我来说实在太熟悉不过了,在学校搞过程序竞赛的同学应该对它都不陌生吧。

看到上面的报告,第一感觉是因为没有做好类型转换带来的死循环,是个弱类型设计的坑,如果除零是抛出异常而不是变 NaN,应该很快就能定位到问题所在。

另外,从官方的这份报告里,我看到了多次提及多活,容灾,分布式这个词汇,异地多活是常见的分布式系统保证架构稳定性的一个方案。

毕竟这么体量的公司,系统架构肯定和分布式是绕不开的。那咱们以此来看看,分布式系统里面都有哪些技术栈呢?

之前记得在左耳朵耗子叔的专栏《左耳听风》里专门有写分布式架构,我把里面的部分内部摘抄在这里给大家分享。

构建分布式系统的目的是增加系统容量,提高系统的可用性,转换成技术方面,也就是完成下面两件事。

  • 大流量处理。通过集群技术把大规模并发请求的负载分散到不同的机器上。
  • 关键业务保护。提高后台服务的可用性。

说白了就是干两件事。一是提高整体架构的吞吐量,服务更多的并发和流量,二是为了提高系统的稳定性,让系统的可用性更高。

提高架构的性能

咱们先来看看,提高系统性能的常用技术。

缓存系统。加入缓存系统,可以有效地提高系统的访问能力。比如从前端的浏览器,到网络,再到后端的服务,底层的数据库、文件系统、硬盘和 CPU,全都有缓存,这是提高快速访问能力最有效的手段。对于分布式系统下的缓存系统,需要的是一个缓存集群。比如用一个 Proxy 来做缓存的分片和路由。

负载均衡系统。负载均衡系统是水平扩展的关键技术,它可以使用多台机器来共同分担一部分流量请求。

异步调用。异步系统主要通过消息队列来对请求做排队处理,这样可以把前端的请求的峰值给“削平”了,所谓削峰填谷。而后端通过自己能够处理的速度来处理请求。这样可以增加系统的吞吐量,但是实时性就会有影响。同时,还会引入消息丢失的问题,所以要对消息做持久化,这会造成“有状态”的结点,从而增加了服务调度的难度。

数据分区和数据镜像。数据分区是把数据按一定的方式分成多个区(比如通过地理位置),不同的数据区来分担不同区的流量。这需要一个数据路由的中间件,而数据镜像是把一个数据库镜像成多份一样的数据,这样就不需要数据路由的中间件了。可以在任意结点上进行读写,内部会自行同步数据。然而,数据镜像中最大的问题就是数据的一致性问题。

提高架构的稳定性

接下来,咱们再来看看提高系统系统稳定性的一些常用技术。

服务拆分。服务拆分主要有两个目的:一是为了隔离故障,二是为了重用服务模块。但服务拆分完之后,会引入服务调用间的依赖问题。

服务冗余。 服务冗余是为了去除单点故障,并可以支持服务的弹性伸缩,以及故障迁移。然而,对于一些有状态的服务来说,冗余这些有状态的服务带来了更高的复杂性。其中一个是弹性伸缩时,需要考虑数据的复制或是重新分片,迁移的时候还要迁移数据到其它机器上。

限流降级。当系统实在扛不住压力时,只能通过限流或者功能降级的方式来停掉一部分服务,或是拒绝一部分用户,以确保整个架构不会挂掉。这些技术属于保护措施。

高可用架构。通常来说高可用架构是从冗余架构的角度来保障可用性。比如,多租户隔离,灾备多活,或是数据可以在其中复制保持一致性的集群。总之,就是为了不出单点故障。

高可用运维。高可用运维指的是 DevOps 中的 CI/CD(持续集成 / 持续部署)。一个良好的运维应该是一条很流畅的软件发布管线,其中做了足够的自动化测试,还可以做相应的灰度发布,以及对线上系统的自动化控制。这样,可以做到“计划内”或是“非计划内”的宕机事件的时长最短。上述这些技术非常有技术含量,而且需要投入大量的时间和精力。

正如不想当将军的士兵不是好士兵,不想当架构师的程序员不是一个好的程序员,哈哈,道阻且长,慢慢加油吧。​

京东后端面试复盘:高并发与分布式系统实战解析 在分布式系统和高并发场景下,技术方案的选型与优化至关重要。Java内存模型(JMM)和数据库索引优化是后端开发的核心基础,理解其底层原理能有效提升系统性能。分布式锁和Redis缓存技术在高并发场景中广泛应用,尤其在电商秒杀系统中,如何保证数据一致性和系统稳定性是关键挑战。本文通过京东后端面试的真实案例,深入探讨了分布式事务、线程池设计、分库分表等实战技术,并结合电商业务场景,分析了高并发环境下的优化策略与解决方案。 阅读详情

相关推荐

高并发分布式系统全局唯一ID生成实战指南

全局唯一ID是分布式系统数据一致性的基石,其本质是在CAP约束下平衡可用性、有序性与可扩展性。从UUID的存储膨胀、Snowflake的时钟敏感性,到号段模式的强协调代价,不同方案背后是时间戳精度、机器标识治理、序列并发能力等底层物理约束。在电商大促、支付流水、社交Feed等典型场景中,ID需同时满足毫秒级生成、跨机房容灾、业务可解析(如含时间/机房信息)等工程需求。本文基于支付、物流、社交三大领域十年生产实践,聚焦高并发(QPS>5000)、分布式(节点>50、多IDC)环境下的ID生成器选型、参数调优与

lanmh的专栏 619

分布式架构的架构稳定性

分布式架构的架构稳定性 接上一期架构性能,本期讲架构稳定性 1.服务拆分 服务拆分主要有两个目的:一是为了隔离故障,二是为了重用服务模块。但服务拆分完之后,会引入服务调用间的依赖问题。 2.服务冗余 服务冗余是为了去除单点故障,并可以支持服务的弹性伸缩,以及故障迁移。然而,对于一些有状态的服务来说,冗余这些有状态的服务带来了更高的复杂性。其中一个是弹性伸缩时,需要考虑数据的复制或是重新分片,迁移...

Method.Jiao的博客 5772

隐形保镖:断路器如何守护你的系统不崩溃?

断路器模式(Circuit Breaker Pattern)是分布式系统中提高容错性和系统稳定性的核心设计模式。它通过监控服务调用失败率,在故障达到阈值时自动“熔断”请求,防止级联故障和服务雪崩。

一几文的编程学习笔记。 107

分布式系统技术栈(from左耳朵耗子)

提高架构的性能 1.缓存系统。 加入缓存系统,可以有效地提高系统的访问能力。从前端的浏览器,到网络,再到后端的服务,底层的数据库、文件系统、硬盘和 CPU,全都有缓存,这是提高快速访问能力最有效的手段。对于分布式系统下的缓存系统,需要的是一个缓存集群。这其中需要一个 Proxy 来做缓存的分片和路由。 2.负载均衡系统, 是做水平扩展的关键技术。其可以用多台机器来共同分担一部分流量请求。

Halleycomett的博客 3535

四足机器人关节电机FOC控制实战:从磁编码器校准到SVPWM调试避坑指南

本文详细解析了四足机器人关节电机FOC控制实战,涵盖磁编码器校准、电流环调试和SVPWM波形优化等关键环节。通过MIT Cheetah案例展示如何解决21倍电气误差问题,并提供相序自动校正、PI参数整定等实用代码片段,帮助工程师避开永磁同步电机(PMSM)控制中的常见陷阱。

weixin_29281915的博客 490

unity | 动画模块之滚动选项框

动画模块之滚动选项框

菌菌兹的博客 2075

分布式技术栈、微服务架构 区分

分布式技术栈【通信方式(RPC,Http)、Dubbo、Nacos、Zookeeper】、微服务架构【MVC,DDD】 区分

weixin_44040169的博客 1088

STM32按键中断切换红绿蓝灯

通过以上步骤,我们实现了使用STM32的按键中断来切换红绿蓝LED灯的功能。在实际应用中,可能还需要考虑更多的细节,如按键消抖、更精确的延时实现等。但上述代码提供了一个基本的框架和思路,可以根据具体需求进行扩展和优化。希望这篇博客对您有所帮助!

2301_79865940的博客 952

数据平台架构优化:提升系统性能与稳定性

1.背景介绍 在当今的数字时代,数据平台已经成为企业和组织中不可或缺的基础设施。随着数据量的增加,以及业务需求的变化,数据平台的性能和稳定性变得越来越重要。因此,优化数据平台架构成为了一项关键的任务。本文将从以下几个方面进行探讨: 背景介绍 核心概念与联系 核心算法原理和具体操作步骤以及数学模型公式详细讲解 具体最佳实践:代码实例和详细解释说明 实际应用场景 工具和资源推荐 总结:未来发展趋...

AI天才研究院 1095

智能车复工日记【3】:图像处理——基本扫线和基本特征提取和十字补线

目录前言基本扫线(除了进入环岛状态或者坡道或者十字路口的普通扫线)基本数据和初步特征进一步特征提取1、计算并且显示前n行左右线各丢失数目(不break和break的都有)2、计算左右线方差(以右线为例)【a】计算右线曲率(选三个点:r_start、中点、break点)【b】如果右线曲率在一定的范围,就进行右线拟合,从空白行开始计算斜率,否则则从0行开始计算 前言 图像大小185*70,通过扫线获取.........

hanhan的博客 3万+

YOLOv11官方代码库与预训练模型下载:介绍Ultralytics官方GitHub及模型权重(yolov11n.pt, yolov11s.pt等)

本文介绍了Ultralytics官方GitHub仓库和YOLOv11预训练模型。Ultralytics仓库是YOLO系列算法的官方实现,包含YOLOv11最新代码、预训练模型、文档和工具。仓库采用清晰的代码结构和活跃的更新策略,支持全流程开发。YOLOv11提供了5种不同规模的模型变体(YOLOv11n/s/m/l/x),在精度、速度和模型大小间权衡,适用于从移动设备到高精度检测等不同场景。各模型在COCO数据集上预训练,可直接使用或微调,满足多样化应用需求。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 5834

03 分布式系统的技术栈

参见:https://blog.youkuaiyun.com/william_n/article/details/103564312 1.学习/操作 打卡02 1.构建分布式系统的目的是增加系统容量,提高系统的可用性,转换成技术方面,也就是完成下面两件事。 -- 大流量处理。通过集群技术把大规模并发请求的负载分散到不同的机器上。 -- 关键业务保护。提高后台服务的可用...

"代码"的日常搬运 4885

【漏洞复现】永恒之蓝 MS17-010 远程溢出漏洞(CVE-2017-0143)

文章目录声明前言一、漏洞原理简述二、漏洞代码深层解析三、实验步骤四、漏洞补丁总结 声明 本篇文章仅用于技术研究与技术学习,切勿用于非授权下攻击行为,切记! 前言 Windows7 存在 MS17-010 永恒之蓝(远程溢出漏洞) ,该漏洞是方程式组织在其漏洞利用框架中一个针对SMB服务进行攻击的漏洞,该漏洞导致攻击者在目标系统上可以执行任意代码 一、漏洞原理简述 MS17-010漏洞出现在Windows SMB v1中的内核态函数 srv!SrvOs2FeaListToNt 在处理FEA(File Ex

李同學AI安全 9628

B站后端实习面经:Go语言高并发系统设计与工程实践全解析

在分布式系统和高并发场景下,系统架构设计与工程实践能力是后端开发的核心竞争力。理解从基础的数据结构、网络协议到复杂的缓存策略、消息队列原理,是构建可靠、高性能服务的技术基石。通过将异步处理、最终一致性、读写分离等设计模式应用于点赞计数等典型业务场景,可以在保证数据准确性的同时,极大提升系统的吞吐量和可用性。本文基于B站后端实习的真实面试与项目经历,深入探讨了Go语言在微服务架构中的应用,以及如何运用Kafka、Redis等中间件解决高并发下的技术挑战,为开发者提供了从理论到实践的完整视角。

weixin_30660027的博客 340

书旗app字符串加密分析

本文案例是对书旗app搜索接口的请求密文进行分析和逆向。

李玺 3158

我终于停止写 JUnit 了!用 JavaParser + GPT-4 自动生成 90% 覆盖率的单元测试

本文介绍了一种基于JavaParser和GPT-4的智能单元测试生成方案。针对开发者在单元测试编写中面临的繁琐、无聊和硬指标等问题,提出通过AST语法树分析代码结构,提取关键信息后生成精准提示词,再调用GPT-4自动生成高质量的单元测试代码。文章详细阐述了技术原理、实现步骤(包括JavaParser解析、上下文感知提示词构建和GPT-4调用),并展示了该方法能自动识别依赖、Mock对象和覆盖边界条件,显著提升测试效率。同时指出了在复杂数据结构、私有方法测试等方面的局限性,最终强调这种技术组合可以解放开发者,

BUG猿的博客 1131

分布式系统核心挑战与技术栈全解析:从CAP理论到微服务实践

分布式系统是应对业务规模扩张时,解决高可用、可扩展性和团队协作问题的关键技术架构。其核心原理建立在网络不可靠、无全局时钟、节点独立故障等基础约束之上,这直接催生了CAP理论、共识算法等经典理论。在技术价值层面,分布式架构通过服务拆分和治理,实现了系统弹性和开发效率的提升。现代分布式技术栈涵盖容器化编排(如Kubernetes)、服务网格、分布式数据库与缓存等多个层次,广泛应用于电商、金融等需要处理高并发和海量数据的场景。本文聚焦微服务拆分原则和分布式事务等实践难点,结合服务网格与混沌工程等热词,为工程师提供

weixin_26805597的博客 357

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

B站直播部Java实习面经复盘:从一面19分钟到二面44分钟,我都经历了什么?

本文详细记录了作者在B站Java实习面试中的经历,从一面19分钟的基础技术问答到二面44分钟的开放题挑战,分享了应对技术深挖和场景化问题的实战经验。文章特别强调了项目细节、MySQL间隙锁、Redis集群排查等核心考察点,并总结了从崩溃边缘到最终获得OC(Offer Call)的心得体会,为备战大厂技术面试的读者提供宝贵参考。

weixin_30301449的博客 387

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java技术栈面试核心:从基础到分布式系统实战

Java作为企业级开发的主流语言,其技术栈涵盖从基础语法到分布式系统的完整体系。理解JVM内存模型、并发编程原理和Spring框架设计是构建Java技术深度的基础。在实际工程中,这些技术通过MySQL索引优化、Redis持久化策略等数据存储方案落地,最终支撑起分布式系统下的CAP理论实践。本文以Java技术面试为切入点,剖析如何将语言特性、框架原理与系统设计相结合,特别针对AQS并发机制、Spring循环依赖解决等高频考点进行深度解析,帮助开发者建立完整的知识图谱应对现代技术面试的网状考察模式。

weixin_33994429的博客 293

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Agent工程师技术栈解析与实战指南

智能体(Agent)作为连接AI与业务系统的关键技术组件,其开发涉及分布式架构、算法工程和业务建模的深度融合。从技术原理看,Agent系统基于微服务架构实现环境感知与自主决策,依赖gRPC/Thrift等高性能通信协议和Kafka等消息中间件构建可靠的消息管道。在工程实践中,模型部署优化(如TensorRT加速)、实时特征工程(Flink+Redis方案)和在线学习机制(Bandit算法)是提升Agent性能的关键。典型应用场景包括电商推荐系统优化(实现CTR提升)、智能客服对话系统(BERT模型延迟优化)

weixin_34246529的博客 318

线上压测崩溃瞬间:P7技术面杀器VS手撕Tomcat应届生,JVM调优硬碰硬

在终面倒计时5分钟的关键时刻,线上压测系统突然崩溃,GC暂停飙升至5秒。P7技术面杀器面试官紧盯FullGC日志,而手撕Tomcat的应届生临危不乱,用JOL分析内存布局,结合JVM调优经验现场优化,展示出扎实的技术实力和问题解决能力。

Ared 434

后端技术栈的深度拓展计划:数据库、中间件、分布式系统的学习路线

后端技术栈的拓展不是"学更多框架",而是"把已经在用的技术学得更深"。8 月的核心任务是数据库深入——从"会写 SQL"到"理解 SQL 的执行过程"。这是后端能力从量的积累到质的飞跃的关键一步。学习方法上,每个技术主题按"读文档 → 做实验 → 写总结 → 讲出来"四步走。特别是"讲出来"这一步:把自己对 B+树索引原理的理解讲给同事听,讲得对方听懂了,你才算真的懂了。

cannonjinx的博客 4386

【Python零基础到精通】第3讲 | 分布式系统:微服务架构与云原生实践

摘要: 本文探讨了从单体架构到微服务架构的演进路径,分析了两种架构的优缺点及适用场景。重点介绍了分布式系统的核心概念(CAP定理、BASE理论)和微服务间的三种通信方式(REST API、RPC、消息队列),并提供了Python代码示例(如gRPC实现)。文章建议根据业务规模选择架构,强调不要盲目采用微服务,同时推荐了学习资源。适用于2024-2025年云原生技术趋势下的分布式系统入门学习。

帅哥 1251
上一篇: Java 中的面向数据编程
下一篇: 自定义 spring boot starter 三部曲之二:实战开发
程序员职业指南
博客等级 码龄4年 2138粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值