從b站的代碼泄漏思考為何選擇Go語言重構(gòu)后臺代碼

b站為何選擇Go語言重構(gòu)后臺代碼

從一位曾經(jīng)在嗶哩嗶哩任職的開發(fā)人員那里费就,了解了一下B站的技術(shù)發(fā)展歷程:最開始是用PHP語言開發(fā)的叨吮,后來B站的中臺逐步被Node占領(lǐng),而后臺技術(shù)為了更高的并發(fā)、更穩(wěn)健智厌,以及為了大數(shù)據(jù)分析妻坝,逐步向JAVA靠攏惊窖,這便導(dǎo)致了嗶哩嗶哩的技術(shù)整體較為混亂刽宪。

B站早期幾乎天天故障界酒,隨著團隊和業(yè)務(wù)擴大圣拄,各方面的壓力都增加,處處冒火毁欣。代碼混亂,框架結(jié)構(gòu)混亂凭疮,已經(jīng)到了難以維護的地步,需要理清脈絡(luò)执解,在這樣的情況下統(tǒng)一技術(shù)棧是毫無疑問該做的事寞肖。最后發(fā)現(xiàn)重寫反而是最優(yōu)的解決方案。

為什么是Go材鹦?

歸根到底逝淹,重寫后臺工程是嗶哩嗶哩統(tǒng)一技術(shù)棧的一次嘗試桶唐,至于最后為啥選擇了Go,很重要的一點在于Go能夠滿足嗶哩嗶哩平臺重構(gòu)優(yōu)化的需求欣簇;另一點是其研發(fā)總監(jiān)毛劍本身是一位Go語言的忠實布道者。

那我們站在嗶哩嗶哩的角度來分析以下:

第一:Go內(nèi)置的net/http包基本上把我們平常用到的網(wǎng)絡(luò)功能都實現(xiàn)了熊咽,這些特性對于網(wǎng)絡(luò)視頻平臺嗶哩嗶哩來講闹丐,解決其當(dāng)前所面臨的問題是綽綽有余的横殴。

第二:公司有自己的Go語言團隊

嗶哩嗶哩的研發(fā)總監(jiān)毛劍,此前的工作經(jīng)歷均以Go為主梨与,同時他也帶了自己的Go團隊共同加入文狱,在這樣的背景下,相對于JAVA瞄崇、Python,選擇用Go來重構(gòu)后臺顯然能夠起到事半功倍的效果苏研。

所以嗶哩嗶哩采用Go語言來重寫后臺JAVA工程,有行業(yè)發(fā)展的必然性凿掂,也有場景纹蝴、功能實現(xiàn)的需求性,還有技術(shù)負責(zé)人根據(jù)現(xiàn)實情形做出選擇的主觀判斷性塘安。隨著行業(yè)的不斷發(fā)展,各種新興語言不斷出現(xiàn)兼犯,一個項目中多種語言并存忍捡、互補的現(xiàn)象是必然的,也許幾十年后你還會發(fā)現(xiàn)用Go寫的后臺被其他語言改寫了切黔,或者某種你以為已經(jīng)成為歷史的語言卷土重來也不是沒有可能。

而從今天bilibili泄露出來的Go的源代碼我們也可以看到凌埂,對于bilibili這樣日以幾千萬的訪問量诗芜,Go語言實現(xiàn)高并發(fā)還是非常靠譜的伏恐。

參考?https://juejin.im/entry/59dae7155188252e7547a569

Go語言的特點

1、學(xué)習(xí)曲線容易

Go語言語法簡單横蜒,包含了類C語法。在國內(nèi)大家都追求快 越快越好丛晌,因為Go語言容易學(xué)習(xí),學(xué)習(xí)曲線很低,又很容易上手孟岛,這也導(dǎo)致了Go在墻內(nèi)比墻外先開花的原因之一。

2斤贰、效率:快速的編譯時間次询,開發(fā)效率和運行效率高

開發(fā)過程中相較于 Java 和 C++呆滯的編譯速度,Go 的快速編譯時間是一個主要的效率優(yōu)勢屯吊。Go擁有接近C的運行效率和接近PHP的開發(fā)效率。


3骗爆、強大的標(biāo)準庫

這包括互聯(lián)網(wǎng)應(yīng)用蔽介、系統(tǒng)編程和網(wǎng)絡(luò)編程。Go里面的標(biāo)準庫基本上已經(jīng)是非常穩(wěn)定了虹蓄,特別是我這里提到的三個,網(wǎng)絡(luò)層外臂、系統(tǒng)層的庫非常實用体箕。?Go 語言的 lib 庫麻雀雖小五臟俱全。?Go 語言的 lib 庫中基本上有絕大多數(shù)常用的庫累铅,雖然有些庫還不是很好,但我覺得不是問題菇民,因為我相信在未來的發(fā)展中會把這些問題解決掉。

4第练、部署方便:二進制文件,Copy部署

這一點是很多人選擇Go的最大理由呕寝,因為部署太方便了婴梧,所以現(xiàn)在也有很多人用Go開發(fā)運維程序。

5塞蹭、簡單的并發(fā)

并行和異步編程幾乎無痛點。Go 語言的 Goroutine 和 Channel 這兩個神器簡直就是并發(fā)和異步編程的巨大福音岗屏。像 C漱办、C++、Java娩井、Python 和 JavaScript 這些語言的并發(fā)和異步方式太控制就比較復(fù)雜了,而且容易出錯率碾,而 Go 解決這個問題非常地優(yōu)雅和流暢屋彪。這對于編程多年受盡并發(fā)和異步折磨的編程者來說,完全就是讓人眼前一亮的感覺畜挥。Go 是一種非常高效的語言,高度支持并發(fā)性躯泰。Go是為大數(shù)據(jù)华糖、微服務(wù)、并發(fā)而生的一種編程語言客叉。


前面只是從技術(shù)的角度分析go 語言的優(yōu)勢话告,但是技術(shù)只是一個方面卵慰,一個語言真正能不能發(fā)展起來,是否適合公司的業(yè)務(wù)病线,對于公司業(yè)務(wù)是否原因用go去代替其他語言,關(guān)鍵還要看這幾點鲤嫡。

有沒有一個比較好的社區(qū)。?像 C、C++紊撕、Java、Python 和 JavaScript 的生態(tài)圈都是非常豐富和火爆的区赵。尤其是有很多商業(yè)機構(gòu)參與的社區(qū)那就更為人氣爆棚了浪南,比如 Linux 的社區(qū)。

有沒有一個工業(yè)化的標(biāo)準络凿。?像 C、C++絮记、Java 都是有標(biāo)準化組織的。尤其是 Java派敷,其在架構(gòu)上還搞出了像 J2EE 這樣的企業(yè)級標(biāo)準撰洗。

有沒有一個或多個殺手級應(yīng)用。?C试躏、C++ 和 Java 的殺手級應(yīng)用不用多說了设褐,就算是對于 PHP 這樣還不能算是一個好的編程語言來說埠对,因為是 Linux 時代的第一個殺手級解決方案 LAMP 中的關(guān)鍵技術(shù)裁替,所以,也發(fā)展起來了弱判。

上述的這三點是非常關(guān)鍵的,新的技術(shù)只需要占到其中一到兩點就已經(jīng)很不錯了开伏,何況有的技術(shù)遭商,比如 Java,是三點全占到了劫流,所以,Java 的發(fā)展是如此好仍秤。當(dāng)然可很,除了上面這三點重要的,還有一些其它的影響因素我抠,比如:

學(xué)習(xí)曲線是否低,上手是否快圈澈。?這點非常重要尘惧,C++ 在這點上越做越不好了。

有沒有一個不錯的提高開發(fā)效率的開發(fā)框架喷橙。?如:Java 的 Spring 框架,C++ 的 STL 等悬荣。

是否有一個或多個巨型的技術(shù)公司作為后盾疙剑。?如:Java 和 Linux 后面的 IBM践叠、Sun……

有沒有解決軟件開發(fā)中的痛點嚼蚀。?如:Java 解決了 C 和 C++ 的內(nèi)存管理問題。

是否有幾個殺手級別的應(yīng)用轿曙。如很多大公司都是用Java代替原來的c# ,這也是Java最流行的原因之一


當(dāng)然守谓,我個人覺得您单,Go 可能會吞食很多 C、C++虐秦、Java 的項目。不過,Go 語言所吞食主要的項目應(yīng)該是中間層的項目别洪,既不是非常底層也不會是業(yè)務(wù)層。

也就是說挖垛,Go 語言不會吞食底層到 C 和 C++ 那個級別的,也不會吞食到高層如 Java 業(yè)務(wù)層的項目送矩。Go 語言能吞食的一定是 PaaS 上的項目哪替,比如一些消息緩存中間件、服務(wù)發(fā)現(xiàn)凭舶、服務(wù)代理、控制系統(tǒng)匆背、Agent身冀、日志收集等等括享,沒有復(fù)雜的業(yè)務(wù)場景珍促,也到不了特別底層(如操作系統(tǒng))的中間平臺層的軟件項目或工具。而 C 和 C++ 會被打到更底層踢星,Java 會被打到更上層的業(yè)務(wù)層。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末成洗,一起剝皮案震驚了整個濱河市藏否,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遥椿,老刑警劉巖淆储,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件本砰,死亡現(xiàn)場離奇詭異碴裙,居然都是意外死亡点额,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門载慈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來办铡,“玉大人琳要,你說我怎么就攤上這事”翰洌” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵拯钻,是天一觀的道長。 經(jīng)常有香客問我拼余,道長亩歹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任亭姥,我火速辦了婚禮顾稀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘静秆。我一直安慰自己,他們只是感情好扶认,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布殊橙。 她就那樣靜靜地躺著,像睡著了一般螃概。 火紅的嫁衣襯著肌膚如雪鸽疾。 梳的紋絲不亂的頭發(fā)上训貌,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機與錄音豺鼻,去河邊找鬼款慨。 笑死,一個胖子當(dāng)著我的面吹牛檩奠,可吹牛的內(nèi)容都是我干的附帽。 我是一名探鬼主播井誉,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喳钟!你這毒婦竟也來了在岂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤应狱,失蹤者是張志新(化名)和其女友劉穎祠丝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體写半,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡叠蝇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铃慷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜕该。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖馋缅,靈堂內(nèi)的尸體忽然破棺而出绢淀,到底是詐尸還是另有隱情,我是刑警寧澤皆的,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站硝全,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏柳沙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一噪径、第九天 我趴在偏房一處隱蔽的房頂上張望数初。 院中可真熱鬧,春花似錦车摄、人聲如沸仑鸥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至环戈,卻和暖如春澎灸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背性昭。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留创泄,地道東北人括蝠。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓饭聚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親法绵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容