溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究

發(fā)布時(shí)間:2020-08-11 08:11:10 來源:ITPUB博客 閱讀:339 作者:DevOps訂閱號(hào) 欄目:開發(fā)技術(shù)

內(nèi)容來源:DevOps案例深度研究第4期 – B站 DevOps實(shí)踐研究戰(zhàn)隊(duì)(本文只展示部分PPT及研究成果,全程視頻請(qǐng)移步文末)轉(zhuǎn)載請(qǐng)注明出處。

本案例內(nèi)容貢獻(xiàn)者:曹坤良,董沙莎,過佳昱,廖定,李晶晶,李思源,歐美玲,任廣印,Ruth,姚丹,張楠

IDCF指導(dǎo)老師:徐磊、姚冬、王立杰、許舟平

原文首發(fā)于「老廣的印記」

青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究

Bilibili簡(jiǎn)稱B站,是中國(guó)年輕人聚集的文化社區(qū)
月活躍用戶量 1.28億人
18-35歲用戶占總用戶數(shù)78%
(數(shù)據(jù)來源:2019年Q3財(cái)報(bào))

一、文化和歷史



B站,被粉絲昵稱為“小破站”,為中國(guó)年輕一代高度聚集的文化社區(qū)和視頻平臺(tái),深受年輕用戶的喜愛。經(jīng)過十年多的發(fā)展,圍繞用戶、創(chuàng)作者和內(nèi)容,構(gòu)建了一個(gè)源源不斷產(chǎn)生優(yōu)質(zhì)內(nèi)容的生態(tài)系統(tǒng) ,B站已經(jīng)成長(zhǎng)為一個(gè)涵蓋7000多個(gè)興趣圈層的多元文化社區(qū)。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
B站原名叫:Mikufans彈幕網(wǎng)。最早的雛形是“初音未來”的粉絲交流社區(qū)。于2010年1月改為提供視頻資源的網(wǎng)站,并正式改名為Bilibili。
嗶哩嗶哩的名字來源于《某科學(xué)的超電磁炮》,創(chuàng)始人徐逸是這部動(dòng)漫的狂熱粉絲,女主角御坂美琴用硬幣打出電氣系技能超電磁炮發(fā)出的聲音像Bilibili,徐逸覺得這個(gè)名字好聽又好記,所以將Mikufans改名為Bilibili。而御坂美琴發(fā)射電磁炮的硬幣,也成為B站現(xiàn)在的通用貨幣。
  • 徐逸:創(chuàng)始人,意見領(lǐng)袖,重度動(dòng)漫迷。曾任執(zhí)行董事。2019年卸任法人代表和執(zhí)行董事,目前負(fù)責(zé)社區(qū)運(yùn)營(yíng)。
  • 陳睿:董事長(zhǎng)兼CEO。曾任中國(guó)最早的互聯(lián)網(wǎng)軟件企業(yè)之一金山軟件聯(lián)合創(chuàng)始人。2011年,陳睿以天使投資人的身份加入B站;2014年,正式加入B站擔(dān)任董事長(zhǎng)。
  • 李旎:首席運(yùn)營(yíng)官。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
B站企業(yè)文化關(guān)鍵詞:社區(qū)優(yōu)先,正直誠(chéng)信,合作共贏,極致執(zhí)行
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
我們可以看到,B站企業(yè)文化關(guān)鍵詞第一位的是社區(qū)優(yōu)先,董事長(zhǎng)陳睿曾經(jīng)說過,B站在社區(qū)文化建設(shè)中的兩個(gè)初心:
  • 為用戶構(gòu)建好的社區(qū)。
  • 為創(chuàng)作者搭建施展才華的舞臺(tái)。

二、社區(qū)運(yùn)營(yíng)生態(tài)


B站2019年的跨年晚會(huì)非常成功,收獲了非常多的贊譽(yù),在豆瓣的評(píng)分高達(dá)9.2,截止二月底累計(jì)播放量9075萬次,彈幕總數(shù)294萬,最高在線人數(shù)8000萬,被稱為最懂年輕人的晚會(huì)。
B站跨年晚會(huì)成功的背后 - “B站對(duì)于不同年齡的用戶畫像的深刻理解和把握”。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
B站的用戶群體大部分是年輕人,可以看這張統(tǒng)計(jì)圖,24歲以下的使用人群超過B站用戶的的38%。
B站還是中國(guó)最大的音樂創(chuàng)作平臺(tái)之一,中國(guó)增長(zhǎng)最快的 vlog 社區(qū),中國(guó)最大的在線自學(xué)平臺(tái)等等。
這背后最大的原因,就在于B站對(duì)于不同年齡段用戶的用戶畫像的深刻理解和把握。
B站最典型用戶畫像-Z世代。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
報(bào)告顯示,目前,全球Z世代有24億人,占全球人口的32%,而在中國(guó),Z世代的用戶約占20%。
針對(duì)這樣的一群金主,B站是如何做的呢?
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
形成了以 " 原創(chuàng)內(nèi)容 + 用戶 + 彈幕 " 的交互方式所構(gòu)筑的強(qiáng)粘性社區(qū)生態(tài)環(huán)境, 以及由 “UP 主 - 內(nèi)容 - 社區(qū)用戶”所組成的循環(huán)生態(tài)。
這個(gè)生態(tài)是一個(gè)不斷自增長(zhǎng)的閉環(huán)。隨著UP主群體的不斷擴(kuò)大,社區(qū)內(nèi)容也向多元化發(fā)展,同時(shí)又吸引了更多的用戶。
B站的這種以內(nèi)容即社交的“打開方式”,正是B站在年輕人中受到歡迎的主要原因。

三、用戶價(jià)值為導(dǎo)向的需求管理


下面我們來介紹B站以用戶價(jià)值為導(dǎo)向的需求管理,前面已經(jīng)介紹了B站以用戶價(jià)值為核心的企業(yè)文化和運(yùn)營(yíng)生態(tài),如何通過產(chǎn)品研發(fā)和系統(tǒng)實(shí)現(xiàn)呢?首先介紹用戶價(jià)值為導(dǎo)向的需求管理。
B站的用戶價(jià)值以業(yè)務(wù)需求為載體,通過需求分析的篩選,快速地流入到研發(fā)并投產(chǎn)上線,并通過上線后的運(yùn)營(yíng)和用戶來持續(xù)優(yōu)化產(chǎn)品,實(shí)現(xiàn)整個(gè)業(yè)務(wù)價(jià)值的閉環(huán)。遵循DevOps的核心思想,持續(xù)快速的迭代反饋,特別是在用戶需求的收集分析管理和用戶反饋上,凸顯出對(duì)用戶價(jià)值的關(guān)注。接下來我們重點(diǎn)分析。
首先是用戶分析,我們看看B站核心用戶畫像。
  • 二次元用戶(核心目標(biāo)用戶):可以追番劇,了解二次元文化,希望能認(rèn)識(shí)更多同好。
  • UGC創(chuàng)作者(核心目標(biāo)用戶):希望有一個(gè)大平臺(tái)可以讓自己作品被看到,收到大家認(rèn)同。
  • 直播愛好者:希望有平臺(tái)能展示自己的才能。
  • 非二次元用戶:只是單純地希望能找到有序的視頻,或跟隨喜歡的UP主或主播而來。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
有了清晰的用戶畫像,可以分析出B站的需求主要分為視頻內(nèi)容、用戶體驗(yàn)、社區(qū)文化和氛圍環(huán)境四類。
  • 視頻內(nèi)容主要包括番劇、原創(chuàng)視頻及UP主自制類視頻功能,加上以用戶為中心的頁(yè)面布局、交互等用戶體驗(yàn)設(shè)計(jì),這兩類需求針對(duì)核心用戶占比會(huì)比較大,也呼應(yīng)了前面的注重核心用戶價(jià)值和體驗(yàn)。
  • 社區(qū)文化類主要包括會(huì)員管理及支撐圈層的需求;氛圍環(huán)境類包括彈幕和交流環(huán)境以及相關(guān)審核的需求,這兩塊為共同愛好者持續(xù)的交流分享營(yíng)造一個(gè)良好的氛圍,為核心功能提供支撐,這是B站重點(diǎn)響應(yīng)的部分。
需求的收集主要從兩個(gè)方面:
  • 一方面通過全面分析商業(yè)價(jià)值、用戶價(jià)值、分解轉(zhuǎn)換為具體實(shí)現(xiàn)的需求;
  • 另一方面在快速響應(yīng)需求上線以后,收集用戶反饋來持續(xù)完善產(chǎn)品的需求。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
對(duì)于需求的優(yōu)先級(jí)排序,B站有自己管理方法。
  • 首先它是基于用戶及商業(yè)價(jià)值的分析,基于核心用戶的訴求和用戶畫像,優(yōu)先考慮需求的迫切程度,通過良好的用戶體驗(yàn)既維持老用戶的粘度。對(duì)于系統(tǒng)運(yùn)行穩(wěn)定的一些非功能性的需求,也作為重點(diǎn)的排序考慮。
  • 另外基于商業(yè)價(jià)值考量,針對(duì)付費(fèi)用戶,用付費(fèi)情況來衡量需求價(jià)值,更量化且與商業(yè)接軌。
  • 考慮用戶與商業(yè)價(jià)值分析的同時(shí),B站也會(huì)使用四象限法來進(jìn)行需求的篩選和排序,通過需求的用戶范圍、發(fā)生頻率和成本、效益,進(jìn)行綜合分析排序,確保用戶價(jià)值價(jià)值較高的需求能夠優(yōu)先、快速地進(jìn)入迭代循環(huán),快速地上線并得到用戶的反饋。

青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究

B站采用多種方式來收集用戶的反饋,不僅包括了線下渠道的主動(dòng)收集,而且還通過日志采集、設(shè)置埋點(diǎn)等多種手段,線上自動(dòng)采集運(yùn)營(yíng)數(shù)據(jù)。對(duì)于線上的采集,采取了收集用戶行為和用戶數(shù)據(jù)的方式,首先與業(yè)務(wù)方一起繪制需采集業(yè)務(wù)場(chǎng)景涉及的系統(tǒng)鏈路,然后系統(tǒng)分布分別在客戶端和服務(wù)端設(shè)置埋點(diǎn),采集用戶行為數(shù)據(jù),記錄日志。通過新功能灰度上線后目標(biāo)用戶數(shù)據(jù)采集和分析,形成對(duì)需求的快速反饋,持續(xù)打磨完善產(chǎn)品。

青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
通過以線上與線下相結(jié)合的用戶反饋收集機(jī)制,從用戶畫像分析、需求篩選排序到持續(xù)迭代反饋,用戶的價(jià)值在DevOps循環(huán)中快速流動(dòng)持續(xù)交付,B站實(shí)現(xiàn)了以用戶價(jià)值為導(dǎo)向的需求管理的閉環(huán)。

四、高性能微服務(wù)實(shí)踐



青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
一開始B站的技術(shù)以PHP為主,那時(shí)的代碼大家喜歡稱之為“KFC全家桶”,一套代碼包含了所有的東西,包括CDN的管理、轉(zhuǎn)碼、多媒體視頻的處理等等,都是通過PHP來完成的,當(dāng)時(shí)就是這樣一套系統(tǒng)支撐著B站的業(yè)務(wù)運(yùn)行。
這么大的一個(gè)系統(tǒng)面臨著很多問題:
1)代碼維護(hù)難度大
  • 文檔缺失,上手難度大。
  • 理解業(yè)務(wù)邏輯很耗時(shí)。
2)基礎(chǔ)架構(gòu)難以擴(kuò)展
  • 基于織夢(mèng)CMS,一個(gè)開源的內(nèi)容管理系統(tǒng)。
  • 系統(tǒng)做了深度定制,底層邏輯沒幾個(gè)人能搞定。
  • 業(yè)務(wù)聚合在一起,不易被擴(kuò)展和拆分。
  • 運(yùn)行環(huán)境基本上只能通過創(chuàng)始人來擴(kuò)展。
3)運(yùn)維復(fù)雜
  • 線上配置很復(fù)雜,代碼層面沒有設(shè)計(jì)路由系統(tǒng)。
  • 運(yùn)維已經(jīng)不堪重負(fù),已經(jīng)禁止添加重寫規(guī)則。
B站成立的基礎(chǔ)是一個(gè)天才型選手,以前在那套系統(tǒng)加入了一些黑科技的東西,但同時(shí)也就限制了公司團(tuán)隊(duì)的發(fā)展,基于這樣的一些重點(diǎn)問題,隨著業(yè)務(wù)的發(fā)展和團(tuán)隊(duì)的不停增長(zhǎng),解決B站目前面臨的這些問題勢(shì)在必行。

4.1 服務(wù)化/微服務(wù)化

1)優(yōu)勢(shì)
  • 各個(gè)服務(wù)獨(dú)立開發(fā)。
  • 分工明確,各自迭代。
  • 單獨(dú)模塊獨(dú)立部署。
  • 可獨(dú)立進(jìn)行測(cè)試。
2)挑戰(zhàn)
  • 依賴鏈條長(zhǎng),測(cè)試常常遇阻,影響測(cè)試結(jié)果。
  • 各服務(wù)的一致性難以保證。
  • 運(yùn)維成本高,錯(cuò)誤難定位。
  • 基礎(chǔ)設(shè)施,網(wǎng)絡(luò)等要求都比較高。
針對(duì)業(yè)務(wù)邏輯進(jìn)行垂直劃分切割,將一個(gè)巨大的服務(wù)體系,按業(yè)務(wù)邏輯切割成單元相對(duì)獨(dú)立的服務(wù),如:評(píng)論、硬幣、稿件、收藏、feed等,服務(wù)間依賴標(biāo)準(zhǔn)采用RPC調(diào)用。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
(微服務(wù)架構(gòu))

4.2 RPC框架

B站一開始是以PHP為主流開發(fā)語(yǔ)言,后來為了快速支撐業(yè)務(wù)的發(fā)展,Node、Java、Python等開發(fā)語(yǔ)言也相繼出現(xiàn),導(dǎo)致B站的核心技術(shù)棧無法統(tǒng)一,對(duì)于微服務(wù)的落地,是兼容所有的語(yǔ)言基于現(xiàn)有架構(gòu)改造,還是選擇統(tǒng)一的技術(shù)棧進(jìn)行重寫?B站選擇了后者。
歸根結(jié)底,重寫后臺(tái)工程(主要是賬號(hào)相關(guān)的業(yè)務(wù))是嗶哩嗶哩統(tǒng)一技術(shù)棧的一次嘗試,至于最后為啥選擇了用Go來實(shí)現(xiàn)RPC,在2017全球架構(gòu)師峰會(huì)上,毛劍解釋很簡(jiǎn)單:“主要就是我比較喜歡Go”,看似簡(jiǎn)單的一句回答,其實(shí)支撐其選擇的原因還在于Go的諸多優(yōu)勢(shì):
  • 強(qiáng)大的標(biāo)準(zhǔn)庫(kù),解決了B站在視頻方面的問題。
  • 和Docker容器良好的支持。
  • 二進(jìn)制發(fā)布,優(yōu)秀的執(zhí)行效率和開發(fā)效率。
  • 易學(xué)易用上手快。
  • 背靠Google大廠,豐富的開發(fā)者生態(tài)。
  • 支持幾乎所有主流的框架。
又或者說,選擇Go非要有個(gè)原因么?為什么不能是Go呢?
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
1)B站的RPC框架
  • 基于Go原生的網(wǎng)絡(luò)庫(kù)“net/rpc”。
  • Gob進(jìn)行struct的序列化,不需要拷貝額外的代碼,使用較為方便。
  • 方法級(jí)的超時(shí)控制。
  • 上下文context的支持。
2)服務(wù)注冊(cè)與發(fā)現(xiàn)Discovery
  • 及時(shí)同步服務(wù)上下線事件。
  • 服務(wù)發(fā)現(xiàn)節(jié)點(diǎn)自我發(fā)現(xiàn)。
  • CP模式:依賴ZK的心跳進(jìn)行廣播(ZK心跳遇到抖動(dòng)時(shí)候,容易出現(xiàn)全服務(wù)下線 ,所以B站會(huì)根據(jù)服務(wù)節(jié)點(diǎn)變化數(shù)進(jìn)行判斷是否放棄本次變更,進(jìn)行容錯(cuò))。
  • AP模式:polling + ping(優(yōu)先保證高可用,犧牲部分一致性,但最終達(dá)到一致)。
3)配置中心
  • 利用mysql做存儲(chǔ)管理相關(guān)配置信息。
  • 通過http long polling來檢查配置變更確保及時(shí)生效。
  • 獲取服務(wù)ip和版本,記錄meta信息,實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)的功能。

4.3 高性能

微服務(wù)化以后,曾經(jīng)的本地調(diào)用變成了遠(yuǎn)程調(diào)用,曾經(jīng)的多節(jié)點(diǎn)對(duì)等變成了分布式的多節(jié)點(diǎn),部署越來越復(fù)雜,調(diào)用鏈條越來越長(zhǎng),跨機(jī)房、跨網(wǎng)絡(luò)、跨機(jī)架等都可能造成性能損失。
1)鏈路加速(客戶端&服務(wù)端)
  • 慢、流量貴(移動(dòng)端)。
  • HTTP DNS & Server List。
  • CDN加速(規(guī)避風(fēng)險(xiǎn))。
  • 協(xié)議優(yōu)化(壓縮、聚合、根據(jù)網(wǎng)速選擇資源等)。
2)網(wǎng)關(guān)優(yōu)化(go自研,靈活可控)
  • 動(dòng)態(tài)配置
  • 協(xié)議裝載
  • 業(yè)務(wù)攔截
  • 限流保護(hù)
  • 緩存加速
  • 鑒權(quán)
  • 反作弊
  • 業(yè)務(wù)服務(wù)
  • 統(tǒng)計(jì)&監(jiān)控
3)優(yōu)化服務(wù)部署架構(gòu)
多個(gè)組,小集群方式部署,每個(gè)組依賴更少的節(jié)點(diǎn),這樣依賴資源有多套,相互之間也達(dá)到了隔離的作用。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
(一旦某個(gè)服務(wù)出現(xiàn)問題,全體受影響)
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
(小集群,多個(gè)組,相互隔離,互不影響)

4.4 可用性

1)隔離
  • 服務(wù)隔離:壓力分流,穩(wěn)定性高,物理隔離。
  • 輕重隔離:核心穩(wěn)定,快慢分離,流量遷移。
  • 物理隔離:進(jìn)程隔離,集群隔離,機(jī)房隔離。e.g. 機(jī)器隔離,容器隔離
2)超時(shí)
  • 設(shè)置超時(shí):連接超時(shí),讀取超時(shí),寫入超時(shí)。e.g. 避免擠壓,防止雪崩
  • 合理超時(shí):避免過短,避免過長(zhǎng),動(dòng)態(tài)設(shè)置。
3)限流
  • 流量限流:accept,connection,thread。
  • 資源限流:連接池,線程池。
  • 請(qǐng)求限流:總數(shù),時(shí)間窗口,平滑限流。
  • 分布式限流:redis + lua,nginx + lua。
  • 接入層限流:nginx limit_req,nginx limit_conn
4)容錯(cuò)
  • 重試容錯(cuò):簡(jiǎn)單重試,主備重試,成功率重試,快速失敗。
  • 熔斷容錯(cuò):動(dòng)態(tài)剔除,異常恢復(fù)。
5)降級(jí)
  • 調(diào)用鏈路:UI降級(jí),UI異步請(qǐng)求降級(jí),功能降級(jí),讀/寫降級(jí),接入層降級(jí),應(yīng)用層降級(jí)。
  • 自動(dòng)降級(jí):超時(shí)降級(jí),統(tǒng)計(jì)失敗降級(jí),服務(wù)故障降級(jí),限流降級(jí)。
  • 手動(dòng)降級(jí):功能開關(guān),只讀緩存,寫異步化降級(jí)。
每個(gè)服務(wù)自身?yè)碛斜容^健壯的服務(wù)能力,基本每個(gè)對(duì)外服務(wù)在代碼層都能兼顧到降級(jí)、限流、容錯(cuò)、熔斷、安全、健康檢測(cè)。
通過鏈路追蹤保證,對(duì)錯(cuò)誤能快速定位和精準(zhǔn)定位,降低感知時(shí)間和修復(fù)時(shí)間。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
6)Playbook 運(yùn)維操作手冊(cè)
  • 依賴的接口,必須加上熔斷。
  • 當(dāng)接口出現(xiàn)故障,自動(dòng)熔斷,普羅米修斯出熔斷數(shù)據(jù)曲線圖,并且報(bào)警。
  • 當(dāng)超過N分鐘,服務(wù)仍然不恢復(fù),可以使用配置中心的推送功能,打開強(qiáng)制熔斷,不再依賴接口。
  • 當(dāng)依賴方告知服務(wù)恢復(fù),重新關(guān)閉熔斷開關(guān),變成自動(dòng)熔斷狀態(tài)。
7)運(yùn)維層面,定期故障演練,確保流程可被正確可靠執(zhí)行。

4.5 一致性

1)存儲(chǔ)一致性
  • MySQL本地事務(wù)
  • 本地事務(wù)+消息隊(duì)列
  • Binlog
2)服務(wù)一致性
  • 消息隊(duì)列
  • 冪等
  • 努力送達(dá)
  • 事務(wù)補(bǔ)償

4.6 微服務(wù)部署發(fā)布

青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
1)灰度發(fā)布 - 染色
  • 在PaaS平臺(tái)上選擇灰度發(fā)布-染色,定義染色標(biāo)簽。
  • 在IaaS平臺(tái)上開啟“環(huán)境代理”虛擬機(jī)。
  • 鏡像選擇環(huán)境代理hasson-base最小配置即可。
  • 在hasson的虛擬機(jī)錄入染色標(biāo)簽,按需配置測(cè)試接口。
  • DNS指向hasson IP,即可開始測(cè)試。
RPC meta info & context
serviceA(Red) -> serviceB -> serviceC(Red)
2)灰度發(fā)布 - feature flag
  • 盡早的進(jìn)入主干,可以跟灰度發(fā)布結(jié)合使用(金絲雀發(fā)布),需要使用統(tǒng)一的flag機(jī)制。
  • 需要清理不再需要的flags,需要開發(fā)者養(yǎng)成良好習(xí)慣,正確使用flags,否則容易顯得很亂。

4.7 代碼管理

青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
  • 隨著業(yè)務(wù)發(fā)展,基礎(chǔ)庫(kù)變更頻繁,推進(jìn)困難。
  • 雖然重視代碼質(zhì)量,但流程不夠自動(dòng)化,完全靠自覺。
  • 測(cè)試都積壓在發(fā)版前,質(zhì)量難保證,發(fā)版風(fēng)險(xiǎn)大。
  • 版本管理非常復(fù)雜,代碼復(fù)用率低下,維護(hù)成本高。
通過比對(duì)分散式管理方式和集中式管理方式,顯而易見,大倉(cāng)庫(kù)的優(yōu)勢(shì)在于統(tǒng)一版本依賴、增強(qiáng)協(xié)作、最大化復(fù)用代碼以及減少版本不一致所引發(fā)的各種線上運(yùn)營(yíng)風(fēng)險(xiǎn)。
1)大倉(cāng)庫(kù)管理代碼帶來的好處:
  • 統(tǒng)一版本控制
  • 廣泛代碼共享和重用
  • 簡(jiǎn)化依賴管理,避免菱形依賴
  • 原子修改
  • 大規(guī)模重構(gòu)
  • 跨團(tuán)隊(duì)協(xié)作
  • 靈活的團(tuán)隊(duì)邊界和代碼所有權(quán)
  • 代碼可見性以及清晰的樹形結(jié)構(gòu)提供了隱含的團(tuán)隊(duì)命名空間
(引自:Google為什么要把數(shù)十億行代碼放到一個(gè)庫(kù)中?)
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
同時(shí),大倉(cāng)庫(kù)所帶來的的挑戰(zhàn)也很明顯,如何保證安全性,如何防止誤操作,如何減少每次checkout代碼的時(shí)間和編譯的時(shí)間,B站進(jìn)行了如下的應(yīng)對(duì)。
1)目錄級(jí)權(quán)限管理
2)統(tǒng)一的構(gòu)建系統(tǒng)Bazel
  • 支持多種開發(fā)語(yǔ)言。
  • 依賴分析增量編譯。
  • 可按需進(jìn)行擴(kuò)展。
3)更高的代碼質(zhì)量要求
  • 統(tǒng)一的代碼規(guī)范,便于協(xié)作。
  • 單元測(cè)試覆蓋率,高質(zhì)量傳承。
4)注重CodeReview,鼓勵(lì)溝通
  • 保證業(yè)務(wù)邏輯代碼質(zhì)量。
  • 信息傳遞,擴(kuò)充人員備份。
  • buildup competence,提升集體戰(zhàn)斗力。
  • Ownership機(jī)制,責(zé)任到人。

五、數(shù)據(jù)運(yùn)營(yíng)



數(shù)據(jù)產(chǎn)生價(jià)值,該部分內(nèi)容主要介紹B站日志平臺(tái)、監(jiān)控平臺(tái)和數(shù)據(jù)平臺(tái)。

5.1 日志平臺(tái)

基于go自研日志平臺(tái)Billions,主要由采集、傳輸、切分和檢索四部分構(gòu)成。該系統(tǒng)打破各個(gè)業(yè)務(wù)研發(fā)日志壁壘、規(guī)范日志格式、收斂日志接入方式,并統(tǒng)一傳輸、解析和存儲(chǔ),整個(gè)系統(tǒng)高吞吐、低時(shí)延、高可用、高可運(yùn)維性。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究
日志采集agent同時(shí)支持服務(wù)鏈路日志采集,隨著微服務(wù)化,一個(gè)請(qǐng)求聯(lián)動(dòng)多個(gè)微服務(wù),當(dāng)出現(xiàn)問題時(shí),根據(jù)日志里記錄的traceId,可快速檢索出相關(guān)服務(wù)調(diào)用信息、定位故障。

5.2 監(jiān)控平臺(tái)

結(jié)束多個(gè)監(jiān)控系統(tǒng)并存局面,基于prometheus搭建統(tǒng)一監(jiān)控平臺(tái),覆蓋業(yè)務(wù)層、應(yīng)用層、中間件、基礎(chǔ)設(shè)施層全面監(jiān)控。開源prometheus存在單點(diǎn)、存儲(chǔ)本地受限、配置維護(hù)難三個(gè)問題,B站基于聯(lián)邦方式部署prometheus,并將采集到的指標(biāo)遠(yuǎn)端存儲(chǔ)至influxdb中,關(guān)聯(lián)cmdb獲取監(jiān)控對(duì)象,界面化配置告警規(guī)則,集中處理告警事件,形成高可用、擴(kuò)展強(qiáng)、易用監(jiān)控平臺(tái)。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究

5.3 數(shù)據(jù)平臺(tái)

讓監(jiān)控、日志數(shù)據(jù)產(chǎn)生更大價(jià)值,使用AI技術(shù)對(duì)用戶行為日志分析生成用戶畫像,實(shí)現(xiàn)精準(zhǔn)推薦;根據(jù)流量數(shù)據(jù)實(shí)時(shí)計(jì)算結(jié)果,及時(shí)調(diào)整渠道投放以達(dá)到最優(yōu)效果等。
B站實(shí)時(shí)數(shù)據(jù)平臺(tái)-saber,解決實(shí)時(shí)計(jì)算開發(fā)門檻高、作業(yè)管理難、無統(tǒng)一告警及工程開發(fā)師和算法工程師之間明確分工問題。saber平臺(tái)支持BSQL和DAG拖拽式編程,約束輸入源schema,規(guī)范輸出源格式,降低flink開發(fā)門檻;同時(shí)解決流式Join、維表Join和實(shí)時(shí)特征等數(shù)據(jù)處理過程中狀態(tài)、Timer、sql擴(kuò)展等難點(diǎn),讓工程無縫對(duì)接AI平臺(tái)。
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究

六、結(jié)尾



B站十年的風(fēng)雨路程,是伴隨著這一代人一起見證的。B站這十年,也是同這一代人一起成長(zhǎng)的。B站的這些用戶,既是傳播內(nèi)容的目的地,傳播效果的反饋源,更是傳播渠道的探尋者,傳播動(dòng)力的新引擎。這類人為B站的內(nèi)容生態(tài),社區(qū)生態(tài)乃至產(chǎn)品生態(tài)提供了源源不斷的動(dòng)力!
B站堅(jiān)持的品質(zhì)導(dǎo)向和價(jià)值觀優(yōu)先原則為其平臺(tái)創(chuàng)造了較高的用戶壁壘,以其對(duì)用戶畫像的精準(zhǔn)分析,準(zhǔn)確把握了用戶的訴求,通過以用戶及商業(yè)價(jià)值為導(dǎo)向的需求分析和管理方式,以及日漸完善的監(jiān)控反饋機(jī)制,將用戶最關(guān)心,最迫切的需求通過最敏捷的技術(shù)實(shí)現(xiàn)呈現(xiàn)在用戶面前,不斷迭代不斷創(chuàng)新。
雖然B站目前還未盈利,但他展現(xiàn)出來的良性生態(tài)循環(huán),未來展現(xiàn)的價(jià)值還有更大的想象空間,畢竟:
“一代人終將老去,但總有人正在年輕。”
青春不老 - B站的微服務(wù)與持續(xù)交付實(shí)踐|IDCF DevOps案例研究

本文部分配圖來源于網(wǎng)絡(luò),內(nèi)容來源于網(wǎng)絡(luò)和B站分享內(nèi)容。


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI