嗶哩嗶哩網站是用什麼編程語言寫的?
大家好,因為我負責主站有關的業務研發,所以比較清楚整體的服務端的情況。
從整體服務端架構來看:
- 服務:我們對外統一的API Gateway,對內的運營平台等;
- 中間件:數據匯流排、Proxy、微服務框架、IM等;
- 存儲層:各類緩存、資料庫等;
- 基礎設施:IDC、伺服器、網路設備等;
那麼我重點介紹下我們業務層和中間件這塊的東東:
服務
我們使用Golang作為業務核心語言,PHP作為管理後台開發語言,部分業務也有Java的一些服務,比如賬號體系、會員體系,包括大數據。
Golang:API Gateway,微服務
- 自研net/rpc作為通訊框架,分割出micoservice;
- 接入了CI,配置中心方便我們PASS平台集成;
- 豐富的鏈路、異常、指標監控;
- 超時、限流、隔離、熔斷為穩定性作保障;
- Gateway介面並行調用聚合;
PHP:運營平台,老主站PHP
- H M C 模式降低各個功能模塊之間的耦合性,提高代碼復用性. 前端完全分離因此沒有v層;
- 靈活的composer載入;
- 版本大膽而自豪的採用 7.0 ;
- 基本的cli模式支持, 待支持command req模式;
- 基本的全雙工模式, 路由夾雜簡單的中間件;
- 路由規範採用 rest模式;
Java:賬號會員體系、大數據平台
- 服務化框架Saber;
- Java 8.0;
- 還有不少大數據平台的東東;
PAAS
有了配套設施以後的服務化,可以得心應手的快速擴容,docker+mesos。
CI/CD
複雜業務的部署和測試環境穩定,全靠他了。各個分支的功能測試和驗證,測試環境的穩定。
中間件
B站快速發展的過程中,我們從業務需求需要中孵化了不少的中間件。
隊列
我們基於Kafka,在上層封裝了我們的Databus組件(Golang)。我們使用Redis協議對Kakfa做了封裝,做了Hook方便我們統一做授權、限流、監控、代理協議等;
數據同步
我們解析MySQL Binlog和Databus做成了一個Sink/Source(Golang),成為了我們的核心同步組件。
比如稿件數據,可以比較實時的pub給所有sub的業務方:
比如稿件的計數,都是幾乎經過計算匯總以後實時同步到各個消費方:
對象存儲
我們開源了我們的小文件存儲(基於Facebook Haystack論文,Golang):http://github.com/Terry-Mao/bfs ,存儲我們的頭像稿件封面、預覽圖等所有圖片以及其他小文件。
基於bfs,我們在上層實現了圖形的處理,包括縮方、裁剪、格式轉換(我們使用了webp)等。
彈幕IM
我們使用Golang開發了自己的IM Server,使用包括我們的點播、直播彈幕、私信通知等,部署在我們多個IDC機房,目前已經開源 https://github.com/Terry-Mao/goim
微服務
我們基於Golang標準庫的net/rpc開發自己的服務框架,用於內部通訊。其中包括各種服務限流降級、熔斷隔離、註冊發現、負載均衡等。
Cache Proxy
我們基於twitter的twemproxy,使用REUSE_PORT開發了multi thread的cache代理,服務我們的redis和memcache的sharding,但是我們依舊不滿意twemproxy的性能和問題,我們正在研發自己的memrouter(golang),目前bilitw在24c的機器qps可以達到千萬級。
監控系統
我們基於Google的論文開發了鏈路追蹤Dapper,我們在「端」上做了實時輿情報警Misaka,我們對業務指標和異常開發了Traceon(Java)。
因為B站越來越多的服務,我們使用Dapper方便我們「甩鍋」,要定位root cause,梳理清楚依賴。
包括Traceon也一樣,總之我們希望能夠總是第一時間的發現問題,解決問題。
配置中心
我們參考了淘寶的Diamond和百度的Disconf,重新開發了自己的統一配置管理(Java),方便運維GG們,點點點!我們發發發代碼,改改改配置。
to be continue....實在太多東西了,前端同學來接力啊!
下面是公司的機密
我們在十二樓 十五樓和七樓的研發中心,分別飼養了五十隻貓 每隻貓配倆滑鼠仨鍵盤 每天貓都會產出大量的高質量代碼
以下是程序貓們在進行GOP(Google Oriented Programming )
謝邀,以前有日語標題的,現在強制全站必須用漢語了(逃
說出來你可能不信,會員系統是織夢dedecms二次開發的,有圖有真相。(°ー°〃)
仔細觀察Bilibili的部分頁面可以觀察到有些頁面帶.php擴展名,應該是忘了做url重寫。
仔細觀察cookie可以發現有一個dedeUserId的cookie鍵值對,這是大名鼎鼎的洞王——織夢DedeCMS的dedeUserId,而且這個id和你在b站註冊用戶的uid是一樣的,說明b站早期用的就是織夢的那一套會員系統。
聽別人說早期可能文章,個人空間,視頻頁都是用dedecms二次開發的。曾經有人做過CMS大數據測試,同樣的CMS裡面寫入上百GB的數據,dedecms的首頁打開速度是最快的,表結構與設計也考慮到了性能和效率。
逸語言
瀉藥。後台應該是php,畢竟看他們招了兩年以上的php了。
毛老師還是主力擔當,當時我找b站要他們工程師聯繫方式的時候就給的毛老師微信,不過到現在還是沒敢加(怕被正面肛了不過看到他們後端大多是Go寫的還是很震驚啊,因為從來沒有看過他們招過Golang開發,估計是因為Go上手太簡單所以他們的程序員足夠勝任了。不過Go的確效率高錯誤少。
後端還是不錯的,除去響應問題之外(就是伺服器爆炸之外),最大的問題就是介面太不統一了,一個功能可以有五六個api,而且這些api返回的介面都不一樣。不知道他們有沒有個內部的doc(我並不覺得有),否則前端和後端估計30%的時間花在了對接上。
至於前端我就不評論了,有一個問題「bilibili的前端水平如何」你們可以自己去看看(滑稽B站程序猿來『』怒『』答一發 #^_^#
首先,B站沒有固定的開發語言,不同的Dept和業務方向,不同的leader和個人興趣方向,會使用不同的開發語言。像樓上主站的毛老師@毛劍所說,主站主要使用的語言有PHP, Golang,Java etc.然後我所在的部門(一個D的不行的名字:雲技術部,其實so so 啦,哈哈,逃~),部門裡面也是一樣,不同的業務劃分會有不同的開發語言,主要有Python/PHP/C/C++/Lua/Golang等。然後大數據部門,應該會涉及Python/Java等。還有直播部,移動端部門,具體不清楚,應該主流的開發語言都會涉及一點吧。
最後,歡迎各路大牛加入嗶哩嗶哩(生產歡樂的地方~),可能大家會因為之前知乎上一些不好的添油加醋的爆料,會說你們B站付得起高工資么?又是為愛而工作嗎? 其實我以一個過來人的身份,說一句公道話,雖然可能B可能有一些不足的方面,但是對於大部分員工的薪資而言,還是給的相對而言比較公道的。
最後,B站會變得更好的。(各路大佬輕噴,哈哈,逃。。。)
初步看 php, java, nodejs都好像有,前端用的jQuery當然這不是語言。。
記得在前幾天討論b站程序員待遇的帖子里已經有了一些爆料,作為軟體開發從業者相信大家都能看出端倪。
b站因為快速招募了大量來自金山百度阿里等不同公司的高級員工,並且帶來了大量他們以前的同事,所以大家使用的開發技術是非常多樣化的,加上原有的研發管理層其實是競爭不過空降兵的,沒有辦法形成既成的開發傳統的約束,所以b站其實各個模塊在使用完全不同的開發語言,通過前端gateway集成的方法對用戶透明。
爆料里提到過甚至同一個頁面里的兩個功能並列的模塊都可能是由不同技術開發出來的。
這樣做的好處是降低了招聘成本,可以快速招募到很多技術員工,缺點是可維護性差,做大的改版就要重寫,這樣特別適合那些產品快速迭代功能日新月異的業務,但對於那些功能穩定需要規模化擴張的業務就不是很經濟了。dedecms,php二次開發。很早之前就關注b站了,其實並不丟人,用開源cms能做大,b站在用戶運營方面下的功夫真的多。給眾多開源cms站長做了個榜樣。b站的運營真的很厲害,比如投稿頁面,給視頻up主進行標籤的介紹培訓。前所未聞。投稿的時候會教你如何使tga自定義標籤。b 站的分類搜索所有視頻網站中做的最好的,很大的功勞就是up主。沒廣告,分類清晰,知道做屬於自己網站用戶群體的內容。感覺就像是一群人在建自己喜歡的網站,一群up主在豐富自己喜歡的網站。技術方面,對b站的影響,是不存在的。
歪個樓,看看B站程序員的態度,大愛B站
那得看內部各個部門和新老團隊老大的撕逼誰贏了,就用什麼語言。
一個投稿三個頁面,一個管理三個頁面,三個子域名一個頁面。什麼時候老人都被打跑了,什麼時候這群不懂動漫的新所謂的大佬掌握了b,什麼時候b也就真的完了。一句話,用什麼語言取決內部鬥爭誰贏了,贏家一句改版,高層都沒人懂這個,改版什麼好處?能多賺錢。改!個人猜測是根據某個 PHP 的 CMS 系統改的
看他們招聘信息招php,網站是什麼做的就不知道了。猜測是php
php,看他們招聘就知道了。
畢竟php除了寫網站啥也幹不了。
看到有人說前期是用DedeCms做的,不可否認的是dede的確強大
哇,dedeCMS真強大
截止到2017/08/21,今天登錄B站時發現已經是Express框架了
推薦閱讀:
※B 站的 pump♂it 究竟好在哪裡?
※如何評價《直男下廚房》這個節目?
※如何評價《某科學的超電磁炮》第一季中第23集針對初春飾利的彈幕行為?
※如何評價Bilibili現在直播間沒有內容時候的顯示?