去B站總部交流技術(shù),我差點沒能走出公司....

勵志當(dāng)最強課代表的我來給大家總結(jié)總結(jié)??????
B站的直播架構(gòu)演進之路
視頻內(nèi)容:
1??前言??
2??從0到1??
3??局座來了???
4??微服務(wù)化??
5??容器化??
6??Golang真香??
視頻內(nèi)容:
1??前言??
嘩哩嘩哩直播成立于2014年,經(jīng)過8年時間的發(fā)展已經(jīng)從最初的業(yè)務(wù)試水成長為公司重要的業(yè)務(wù)板塊之一。
技術(shù)架構(gòu)也從一個單體服務(wù)演進為由數(shù)百個微服務(wù)組成的復(fù)雜系統(tǒng)。本文將回顧8年來嘩哩嘩哩直播架構(gòu)演進中一步步的變化,了解它是如何從О開始逐漸成為能夠承載千萬在線的微服務(wù)系統(tǒng)。

2??從0到1??
和大多數(shù)網(wǎng)站一樣直播也是始于一套LAMP 架構(gòu),即Linux + Apache + MySQL + PHP。前端、服務(wù)端、定時任務(wù)所有功能都集中在一個叫做“l(fā)ive-app-web"的項目中。

一個典型直播后臺架構(gòu)由三部分組成:業(yè)務(wù)系統(tǒng)用于直播各種業(yè)務(wù)功能邏輯實現(xiàn)、推拉流系統(tǒng)用于主播推流和用戶拉流觀看、長連接系統(tǒng)用于在直播中的各類實時業(yè)務(wù)數(shù)據(jù)推送觸達。而live-app-web 即承擔(dān)了application server的角色。
live-app-web的應(yīng)用架構(gòu)

live-app-web最初的項目結(jié)構(gòu)
主播系統(tǒng),用戶系統(tǒng),彈幕系統(tǒng),禮物系統(tǒng),成就系統(tǒng),排行榜系統(tǒng),積分系統(tǒng),任務(wù)系統(tǒng)
3??局座來了???
不了解局座B站直播梗的同學(xué)可以先通過這個鏈接了解一下事件背景:如何看待張召忠將軍7月13日的b站直播?1],一句話總結(jié)就是:局座來了直播掛了,??傇谥豕_道歉。

4??微服務(wù)化??
而當(dāng)時正好有一款在國內(nèi)很火的PHP高性能服務(wù)框架Swoole,通過進程常駐的方式顯著提升了PHP 服務(wù)的運行性能。經(jīng)過一定的技術(shù)調(diào)研之后團隊決定以 Swoole為基礎(chǔ)構(gòu)建直播的微服務(wù)框架,并定義了以下原則:
1.按業(yè)務(wù)領(lǐng)域進行微服務(wù)拆分
2.每個微服務(wù)擁有自己獨立的數(shù)據(jù)庫、緩存
3.每個微服務(wù)僅能訪問自己的數(shù)據(jù)庫、緩存,服務(wù)間只能通過RPC訪問4.微服務(wù)負(fù)責(zé)人對自己的負(fù)責(zé)業(yè)務(wù)的服務(wù)穩(wěn)定性負(fù)責(zé)
服務(wù)框架:我們基于Swoole開發(fā)了我們自己的微服務(wù)框架,這套微服務(wù)柜,實現(xiàn)服務(wù)進程管理、平滑重啟、ORM、Cache、Logging 等,業(yè)務(wù)只需要按照模板實現(xiàn)controller和對應(yīng)service代碼即可,能夠比較快速地上手開發(fā)。

5??容器化??
一直以來直播服務(wù)均采用物理機部署的方式,這種方式存在明顯的缺陷:需要為每個服務(wù)分配獨立的端口避免端口沖突、部署目錄需要隔離、存在資源競爭、單個服務(wù)容量無法準(zhǔn)確評估等等。
而隨著B站業(yè)務(wù)規(guī)模的擴大,公司的基建團隊也提供了更為穩(wěn)定的容器平臺,在充分調(diào)研后我們啟動了服務(wù)Docker 化改造并在很短的時間內(nèi)完成了全部服務(wù)的容器化部署。

6??Golang真香??
2018年是Golang 大火的一年,毛老師作為Golang布道師在嘩哩嘩哩主站推進Golang服務(wù)化演進非常成功,并通過Golang 開發(fā)出了一系列的微服務(wù)框架和中間件,如Kratos(Go微服務(wù)框架)、Discovery(服務(wù)發(fā)現(xiàn))、Overload(緩存代理)等,相當(dāng)一部分項目也同時在github上進行了開源。
