去B站总部交流技术,我差点没能走出公司....
励志当最强课代表的我来给大家总结总结👍👍👍
B站的直播架构演进之路
视频内容:
1️⃣前言✍️
2️⃣从0到1📄
3️⃣局座来了🏷️
4️⃣微服务化📑
5️⃣容器化🔖
6️⃣Golang真香📖
视频内容:
1️⃣前言✍️
哗哩哗哩直播成立于2014年,经过8年时间的发展已经从最初的业务试水成长为公司重要的业务板块之一。
技术架构也从一个单体服务演进为由数百个微服务组成的复杂系统。本文将回顾8年来哗哩哗哩直播架构演进中一步步的变化,了解它是如何从О开始逐渐成为能够承载千万在线的微服务系统。

2️⃣从0到1📄
和大多数网站一样直播也是始于一套LAMP 架构,即Linux + Apache + MySQL + PHP。前端、服务端、定时任务所有功能都集中在一个叫做“live-app-web"的项目中。

一个典型直播后台架构由三部分组成:业务系统用于直播各种业务功能逻辑实现、推拉流系统用于主播推流和用户拉流观看、长连接系统用于在直播中的各类实时业务数据推送触达。而live-app-web 即承担了application server的角色。
live-app-web的应用架构

live-app-web最初的项目结构
主播系统,用户系统,弹幕系统,礼物系统,成就系统,排行榜系统,积分系统,任务系统
3️⃣局座来了🏷️
不了解局座B站直播梗的同学可以先通过这个链接了解一下事件背景:如何看待张召忠将军7月13日的b站直播?1],一句话总结就是:局座来了直播挂了,睿总在知乎公开道歉。

4️⃣微服务化📑
而当时正好有一款在国内很火的PHP高性能服务框架Swoole,通过进程常驻的方式显著提升了PHP 服务的运行性能。经过一定的技术调研之后团队决定以 Swoole为基础构建直播的微服务框架,并定义了以下原则:
1.按业务领域进行微服务拆分
2.每个微服务拥有自己独立的数据库、缓存
3.每个微服务仅能访问自己的数据库、缓存,服务间只能通过RPC访问4.微服务负责人对自己的负责业务的服务稳定性负责
服务框架:我们基于Swoole开发了我们自己的微服务框架,这套微服务柜,实现服务进程管理、平滑重启、ORM、Cache、Logging 等,业务只需要按照模板实现controller和对应service代码即可,能够比较快速地上手开发。

5️⃣容器化🔖
一直以来直播服务均采用物理机部署的方式,这种方式存在明显的缺陷:需要为每个服务分配独立的端口避免端口冲突、部署目录需要隔离、存在资源竞争、单个服务容量无法准确评估等等。
而随着B站业务规模的扩大,公司的基建团队也提供了更为稳定的容器平台,在充分调研后我们启动了服务Docker 化改造并在很短的时间内完成了全部服务的容器化部署。

6️⃣Golang真香📖
2018年是Golang 大火的一年,毛老师作为Golang布道师在哗哩哗哩主站推进Golang服务化演进非常成功,并通过Golang 开发出了一系列的微服务框架和中间件,如Kratos(Go微服务框架)、Discovery(服务发现)、Overload(缓存代理)等,相当一部分项目也同时在github上进行了开源。


