小x告訴大家騰訊9年前(2009年)的技術基礎

最近網絡上突然出現一篇文章質疑騰訊現在2018年的技術建設,我讀過文章裡面的內容對比我所知道的內幕,我是不認同的,可我是無法直接反駁,因為我也不清楚騰訊現在的技術平臺,但我可以講一下9年前騰訊的技術基礎,用9年前的情況對比文章裡面現在提到的情況,能作比對的解的地方,我不覺得該文章僅僅是偏頗,而是作者對騰訊瞭解不足夠多。我做不到像作者那樣站在那樣的高度去評價騰訊,文中提到的、我不瞭解的情況我也無法發表看法,我也考究不了該文作者寫這些內容的時從何處獲取的信息。因此本文也不可能全面的介紹騰訊的技術架構,原因是我雖然在騰訊工作的時間比較長,但僅在騰訊的一個部門的不同技術崗位上工作過。

我摘選出文章的一些片段,講一下我的看法

一、文中提到:“有內部mysql集群(這算最基礎了吧),可是呢,必須從指定的遠程跳板機用命令行處理,沒有一個可用的客戶端或者web GUI,然後還強制不允許安裝myphpadmin之類的開源,說是不安全;”

對於這個問題,我分幾個角度去講:

1、DB的Web管理界面是存在的,我可以非常肯定的說,在2009年的時候,我工作的部門ISD(現在叫SNG)就已經用Web去管理大量的數據庫和數據庫的cache server(名字不透露),DB的管理手冊我看過,如果打印出來是很厚的一份文檔,裡面大部分內容並不是平時網上看的Mysql的命令,而是內部開發的管理平臺的Web界面,用於數據的變更,備份,對於數據庫的初始化、安裝是另外一個系統。

2、對於騰訊不讓使用 phpMyAdmin(文中寫成myphpadmin,應該是筆誤,我在百度和bing上沒有搜到myphpadmin) 這個情況有點失禮的說,抱怨騰訊不讓使用 phpMyAdmin 的話確實不合適,但是要說明白這個問題,倒需要花一點篇幅從幾個方面去說:

1)我在騰訊工作的時候,騰訊並沒有不讓安裝phpMyAdmin,我記得我為我的同事安裝過phpMyAdmin,但僅限於開發環境,測試環境並沒有,生產環境更加不可能有。在當時,騰訊的測試環是會有一些真實的數據,請想一下,以騰訊的規模,通過 phpMyAdmin 這樣直接去接觸數據庫會有多大的風險,phpMyAdmin 又不能提供數據庫操作的審計的功能(當然,假如做二次開發是可以的,可是直接用開源是不行的),萬一有人在 phpMyAdmin 上面下載用戶數據或上傳一些數據,我想這樣造成的後果絕對比騰訊不讓使用phpMyAdmin要大很多。對於測試環境,我要額外說明一下,讀者千萬別誤會通常我們的認為的騰訊的測試環境可以隨便訪問騰訊的生產環境的數據庫,我說的騰訊的測試環境包括灰度測試,就比如說,要驗證用戶對一個新開發的功能的反饋,那麼騰訊會選擇小範圍的向一些號段的QQ用戶開放,讓這些用戶看到這個功能的入口,觀察這部分用戶的反應,再做產品運營上的調整,這種灰度測試,這灰度測試的數據,也是放在生產環境的,是用戶的真實的數據,毫無疑問這些數據是不能隨意觸碰的。

2)哪怕騰訊允許使用 phpMyAdmin ,我相信大部分在騰訊工作且需要操作數據庫的人也不會去用phpMyAdmin,要知道,在2009年之前騰訊的業務已經是億級了,對於這種億級的業務系統的數據庫的大致規模我簡單描述一下,但不能太詳細,在2009年,Qzone空間裡面的一些模塊使用的數據庫是的數量是兩位數,尤其是QQ農場最火爆的時候,部門為了支撐這個業務,運維團隊幾乎大部分時間都在為Qzone申請資源設備或從原有的設備中騰挪出空閒的設備出來給Qzone使用,每次大的擴容都是將數百臺設備在極短的時間裡上線。我讀書的時候就經常使用phpMyAdmin,也曾經修改過phpMyAdmin的源碼,試想一下:先不考慮全局,一個模塊裡數百上千個數據庫實例怎麼用 phpMyAdmin 去管理?我們都知道像這種量級的用戶數據必然要分庫分表的, 分庫的就會導致用戶的數據會分散在數百上千個數據庫物理服務器(那時還沒有騰訊雲,都是用物理服務器)上,這樣的情況下用 phpMyAdmin 能管得過來嗎?我沒在騰訊工作之前曾經在多玩(後來的歡聚時代,多玩現在好像是被剝離出來了)親自設計開發了多玩通行證系統:udb,那時我設計的保守容量是一億用戶,我拆了1000張表,邏輯上分了10個庫,像這樣數據庫結構要查詢用戶數據,現在有什麼好的手段我不清楚, 但在當時只能是需要開發管理後臺根據用戶的id算出所在的庫表後再去訪問。

3)在騰訊這樣的公司,哪怕是在2009年,直接操作數據庫是會帶來數據和緩存不同步,因為server要承受的請求是海量的,如果這些請求都直接傳遞到數據庫硬盤是支撐不住的,因此在很早的時候(具體什麼時候我也不知道)騰訊就在mysql前端部署了大量的 cache server(名字不透露,統一用cache server稱呼),來自Web前端的 CGI/FCGI/自研發的http moudle 都不會直接訪問數據庫,而是通過 API 去訪問 cache server ,cache server 會把來自Web層的請求轉換為對mysql的請求,對於mysql返回的數據集則會緩存在cache server的內存裡,Web層下次訪問的同樣的數據時就直接從內存返回,不再去請求後端mysql server,即便是這樣,海量的用戶請求還是讓運維的同事小心翼翼維護這些設備。我記得當時部門會對沒有使用 cache server 的業務模塊進行統計,有計劃的升級整改,對於確實不需要隔著一層 cache server 的 mysql 當然也不會強求一定要經cache server過。說到這裡,我想有點技術基層的讀者就明白了,直接操作數據會導致 cache server 的數據沒有更新就有可能導致混亂。

4)至於phpMyAdmin是否安全的問題,我就只發表個人見解,以我的資歷和經驗,我認為不足夠安全,你說安全就安全吧,不爭論了,我有我的工作場景,反正我不需要,我是在字符界面用 mysql client 的。

3、在2008年,我所工作的部門,非DB的運維工程師和研發工程師已經不需要訪問數據庫了,我記得我剛擔任QQ秀運維負責人的時候就接到一個工作,把QQ秀所有的數據庫全部移交給DBC(database center)又稱為DB組去管理,為了完成這項工作我去和QQ秀的同事協調,他們很爽快的答應下來,QQ秀的技術總監Ciline還跟我半開玩笑說:“你別搞出故障來啊”,這一句話讓我感到有點緊張,那時的QQ秀並沒有去主推紅鑽包月服務,因此每時每刻存在大量一兩塊錢甚至幾毛錢的用戶消費請求,如果一部分核心數據庫出問題,幾乎可以心算出每小時部門的損失,而在此之前,每個業務Qzone、QQ秀、QQ會員、QQ音樂這四大業務的運維都得親自管理自己名下的數據庫,這種工作是令人膽戰心驚的,幸好那幾年沒有出現過嚴重的數據丟失的運營事故,可是沒有人為的操作事故也會有硬盤的物理故障,在我擔任QQ秀運維負責人期間,就遇到過好幾次數據庫硬盤故障,幸而那時DB組接管了數據庫的管理,因此我的工作就是申請服務器提供給他們重新部署,DB組開發了一套管理的平臺還有制定了一套嚴密的數據遷移流程,每次都是平平穩穩的完成工作。

對於訪問數據庫這個話題,我重點說了三點,其實讀者會發現,在騰訊,至少是我工作過的部門,只有少數技術的同事需要接觸到數據庫,其他的人根本不需要直接跟數據庫打交道,而且需要跟維護數據庫技術人員也是通過管理平臺去操作數據庫,因此我不太明白那篇文章的作者為什麼對在騰訊工作不讓直接接觸數據庫而有點抱怨,我那天在蘋果零售店遇到這樣一個情景,一個顧客和天才吧的蘋果員工說,他想為他的新iPhone買一張貼膜,天才吧的蘋果員工告訴他:“您已經買了Apple Care了,不需要了”;我不太確定用Apple Care來比喻是否合適,可騰訊的DBC團隊是作為一個服務平臺為各業務提供支撐,業務部門的技術人員是基本上就是需要專注業務邏輯本身的開發就可以了,不需要直接去訪問數據庫。在約9年前類似的這樣的團隊還有Web組,由於我非常精通Web Sever,所以我經常去找他們提各種需求,例如部署Web cache,http gzip壓縮,footprint,這些需求都是符合當時的運維規範,合規就辦,公事公辦,我可以提需求,但操作必須是他們來,大家都沒有做越界的事。在這裡,我順便說下一下,當時包括現在很多開源的代碼放在當時騰訊的業務環境下是根本支撐不住騰訊的驚人的用戶請求,我最早在騰訊內部使用nginx,期間也花了不少精力去修改nginx的代碼以適應騰訊的環境,然後拉著好幾個同事和我做各種測試,灰度測試,打包,上線部署,上線後觀察。前後搞了三個月,證明了方案是可行的,這時我又提出還不如把用到的Nginx的這幾個功能特性在自研發的http server上實現,這樣Web組就可以少維護一種Web Server,用戶訪問速度還有性能會更好,這個想法被接納,然後請平臺組去實現。

在騰訊愛折騰技術是可以的,但得有一些前提條件,第一得有能力,第二得遵循公司的規範;沒能力有不遵守規範那肯定辦不成事情;而有能力不遵循規範把事情辦成並不算了不起,這是小聰明,而且這樣很不好;有能力又遵守規範又把事情辦成,才是大智慧。

該文的作者似乎還對於用跳板機訪問數據庫這種方式還有一點看法,這裡我要提一下,這是數據庫啊,裡面存的是用戶的私密數據啊,經過跳板機的目的是什麼?我有點保守,不打算在公開場合說,希望你自己能想明白。

對於文中一句話,可以引出這麼多話題,我希望讀者不要誤以為我糾纏於原文作者的一句話不放窮追猛打,我的本意是借這個話題讓讀者多瞭解一點騰訊的運維,多瞭解一點,誤會就少一點,但是具體的一些信息又不能講的太細,對於億級別平臺的運維,身在其中就要時刻保持敬畏之心。雖然我之前的工作是研發和運維都涉及,但QQ秀的運維是我第一份全職的運維工作,而且沒多久就成了QQ秀的運維第一負責人,打理著好多臺服務器(數量不能透露),QQ秀當時是騰訊很賺錢的一個產品,想了解更多的可以查看當時的財報,每天在平臺上有好多筆購買QQ秀的交易,硬是把我的粗枝大葉性格改成謹小慎微,期間也犯了不少錯誤,也連累很多很多同事陪我加班,特別是測試組的同事,現在想起來既怕又慚愧。

二、Linux入域(加入內網),不可自行組局域網,內網分成三種網絡,並實行物理隔斷的問題

騰訊的服務器的OS是用Linux的,至於現在辦公環境有多少人用Linux和macOS我是無法知道的,但我在騰訊工作的時候直到我離開,上千人部門只有兩個人用 Linux 桌面,一個人稱廖大師的大神(那時沒有大神這個詞,我們都叫他大師,推薦讀者搜索一下這位大佬經歷:關鍵詞:廖生苗),另外一個就是我(那時還沒成為大神),然後廖大師調去其他其他部門做Linux內核開發後就剩下我一個人使用當時的 OpenSuse 做筆記本電腦的桌面,這筆記本電腦我是每天從家裡帶來的,我還有一臺裝了X系統的FreeBSD臺式電腦,我日常辦公的電腦是Windows7,毫無疑問,我的Linux和FreeBSD是不能接入公司的內網的,可問題是我沒覺得影響到我的工作,整個部門都沒幾個人用Linux桌面,我01年開始用FreeBSD,07年到現在一直用Linux做桌面,我認為這是我個人的事,到騰訊上班就是加入一個大集體,就得服從公司統一規劃,這是基本的職業素質。因此,Linux入域這個問題,我是這樣看的,如果有,固然可以用,如果沒有,我也不抱怨,像我這種深度的Linux/BSD用戶現在甚至幾乎不會維護Windows10了,我不覺得這有什麼困惑,這時我的個人看法。

在騰訊確實不能自行組局域網,這樣會引發許多問題,不展開來說,可是騰訊並不是不提供實驗環境,要進入實驗環境,我記得當時有兩個選擇,一個是在工位上經過幾重跳板機可以進入實驗環境, 另外個是進入樓層裡面一間很冷並且充斥著服務器風扇聲的機房去做實驗,我有一次要去測試Intel的編譯器icc和當時intel最新的服務器CPU,我也覺得在工位上經過幾重跳板機太麻煩了,我選擇進入機房去做測試,那間機房確實很冷又吵,我提前把測試程序寫好,把工作規劃好,進去,基本按時出來,似乎也不難受。在騰訊工作其實很容易懂得抱怨並不能解決問題,至少不能解決在騰訊工作中遇到的問題,保持積極的心態或許能找到解決問題的辦法。

下圖是我當年的工位,左邊是Linux,中間是Win7,右邊是FreeBSD,在騰訊中午是可以玩遊戲的,只要不發出聲音影響到別人午休就行。

小x告訴大家騰訊9年前(2009年)的技術基礎

左邊是Linux,中間是Win7,右邊是FreeBSD

三、對於文中這句話:“如果騰訊一個T3(高級工程師)的研發人員告訴你說他不習慣用git,不太會用。。。你會有什麼感覺?”

對於這個情況,我覺得我必須站在一個比作者更高一點的角度去看這個情況:我覺得這似乎跟騰訊的技術能力沒有必然的關係,我意思是用git與不用git不能作為衡量一家公司的技術能力的關鍵指標,既然不是一個關鍵指標,就不能用這個來探討騰訊的研發體系是否落伍。就舉一個例子,像我這個有十幾年工作經歷的精通研發&運維的全棧工程師:Qzone、QQ秀運維,寫過iOS和android開發framework,前端Web開發,開發過門戶網站BBS,CMS,通行證系統,遊戲平臺,各種運維監控平臺,還有從nginx模塊、 c10k的通信server到OpenGL,H264解碼,音頻流server端和移動端,我都做過(一個工作了十幾年工程師有這樣的工作經歷是很正常的啦,沒有曬簡歷的意思,騰訊裡面比我厲害的工程師多到數不過來),我有個愛好就是工作的時候喝冰凍的可口可樂,我覺得在從事繁重的技術工作的時候喝可口可樂可以舒緩神經,保持頭腦清醒,可是,我們可以說不喝可樂的工程師就不行嗎?事實上,我發現一些經歷比我更豐富更資深的工程師他們保持頭腦清醒的辦法有喝茶喝咖啡的,也有我沒看出來他們有什麼明顯的習慣的。

因此我概括一下,衡量一家公司的技術能力,可以從代碼的版本管理這個角度去衡量,而不是看具體用什麼版本管理的工具,我們只需要看團隊有沒有版本管理,有沒有管好就行了。

事實上,我現在也不會用git,可我最近正在學習使用git,因為我有一個項目打算開源,之前不學習git是因為我還沒用到,至於騰訊將來用什麼版本管理工具,我也無法預估。我能理解作者在問的對於沒有git是“什麼感覺”的意思,我想說,工作歸工作,個性歸個性,下面這張圖是我當年的工位,作為你們的大神我也曾經年輕過,現在也很年輕,我有一次帶實習生的參加公司活動的時會議室裡有個不認識的同事看到我筆記本電腦運行是很酷炫的 Linux 3D 桌面,就因為這個,他居然把我當成是實習生。

小x告訴大家騰訊9年前(2009年)的技術基礎

頂到天花板掉的可口可樂罐子

寫到這裡,我總結一下,我認為那篇文章充斥著年輕的情緒,當然我不認為年輕就一定有情緒,其實我當時初入騰訊工作的時候,我並不打算在這公司待很長時間,面試的時候也沒想到騰訊會錄取我,剛開始上班的時候覺得好多限制,很難適應,沒有那時的網易和多玩既做開發又做運維那麼自由,騰訊畢竟是騰訊,你在外面技術再厲害,在騰訊裡面比你厲害的人多去了,人家都老老實實守規矩,你憑什麼做不到。由於各種原因我在騰訊工作的時間比我原本計劃的要長很多,隨著時間的推移收穫到了很多體會,我想如果當初我過早離開騰訊,或許我也像該文的作者那樣對騰訊有著各種年輕的想法,幸運的是我在騰訊待的時間比較長並且學到了很多東西。

我以後不一定會再寫關於騰訊的文章,因此順便在這裡說一些有趣的事情:

下圖是我在騰訊得了一筆專利獎金後搞的一次惡作劇,我把全部獎金都拿去買方便麵分給大家吃。

小x告訴大家騰訊9年前(2009年)的技術基礎

方便麵

還有一次的1500專利獎金是全部用來買肯德基,由於我們用公司的座機訂餐,後來我的同事告訴我,經過我這麼一折騰,科技園那家肯德基已經把騰訊的電話升級為VIP用戶了,可是當時的照片一時找不出來。

近年網上流傳著一些段子,調侃服務器上線時一眾技術燒香拜佛,祈求上線順利,其實這種玩笑我在2007年時就搞過,下圖是QQ秀2.0上線當晚的情景,一大群人在公司通宵加班,直到第二天早上六點才回家,我開玩笑主張大家用夜宵供奉一下Q神,保佑我們上線順利,剛好辦公室還有一些生日活動剩下的蠟燭,也順便點上。

小x告訴大家騰訊9年前(2009年)的技術基礎

2007年QQ秀2.0上線,拜Q神保佑上線順利

小x告訴大家騰訊9年前(2009年)的技術基礎

2007年QQ秀2.0上線,全體人員通宵到第二天清早

2007年那時,我們工作的部門許多IT平臺還在建設中,很多事情還需要用人手工去做,因此大家對現網變更還是提心吊膽的。

從2008年開始,各種IT平臺就開始變得很完善,很多以前需求手工敲命令的操作都改為平臺化一鍵操作,例如2009年QQ農場通常要大規模擴容,都是通過平臺一鍵化操作,此後我們很多工作都基於數據,服務質量好不好,資源有沒浪費,什麼時候需要擴容,都是用數據來說話,不再憑直覺去猜。在我離開騰訊很多年之後有一些公司請我去交流技術,我告訴他們這些平臺化的運維理念,他們一般都覺得很驚訝,當然,他們是不會使用這種方式去建設IT平臺的,因為這樣的結果需要堆錢和時間。公平的說,這些億級平臺的運維理念和實踐Google比騰訊走得更早,更遠,但在國內而言,騰訊是在當時是領先其他公司是很多年的。至於現在是什麼情況,我不太清楚。

小x告訴大家騰訊9年前(2009年)的技術基礎

2007年春節大家收到的開年紅包

作為一名工程師(全棧),我覺得我的在電腦前的大部分時間不應該花在寫作上,因此我不會對那文章每段的內容都拿出來評講,但本文最後,我想向讀者們介紹一下Dowson。我注意到那篇文章裡提到了 Dowson Tong(湯道生),但後來內容做了一些修改,從作者的口吻來看,感覺作者不太像是在騰訊工作過或在騰訊工作有一定年限的人,因為騰訊裡面很少對人直呼其名,都是互相稱英文名。Dowson曾經在全球第排行第二的軟件公司Oracle工作過,我曾經聽過 Dowson 的關於 Oracle DB 的技術分享,很精彩,我記得我當時的提問有點鑽牛角尖,Dowson的回答讓我領會到在方案的選上要懂得“平衡”,“平衡”在技術工作上是很重要的一個思維方式,這裡無法展開講。Dowson 還教過我一條Linux的命令 ps -efwww 這樣輸出的進程的信息就不會因為終端屏幕大小的限制而截斷輸出的信息,工程師在敲命令的時候一般會想起教他這條命令的人。

Dowson 為人很nice,他的nice也影響到我後來的做事方式,以至於我能夠用一種溫和的方式寫這篇文章,如果是在以前(沒進騰訊之前),我或許會寫一篇比原文更長的文章逐條找問題批駁作者的觀點,當然這文章就會長得沒法看了。


分享到:


相關文章: