在GTLC臺北站,前美圖技術(shù)VP、After Shipcto Totgo鵬會會員洪小軍分享了“我的移動互聯(lián)網(wǎng)十年增長經(jīng)驗”的主題。
從 2008 年開始,洪小軍歷經(jīng)中國移動飛信、新浪微博和美圖三個中國內(nèi)地很典型的億級用戶規(guī)模的移動互聯(lián)網(wǎng)公司的關(guān)鍵發(fā)展階段,歷任工程師、架構(gòu)師、技術(shù)經(jīng)理、技術(shù)總監(jiān)和技術(shù)副總裁。TGO 鯤鵬會公眾將分為 4 篇分享洪小軍在過去十年對于行業(yè)、技術(shù)、管理等方面進行的思考,本篇內(nèi)容著重講述著重講述洪小軍在新浪微博時期的收獲和成長。
作者 | 洪小軍
編輯 | Rainie Liu
洪小軍 GTLC 現(xiàn)場分享照片
新浪微博時期
2011 年初,我加入了新浪微博平臺研發(fā)部門。從業(yè)務(wù)的角度來看,平臺研發(fā)部門主要職責(zé)是為 Weibo.com、移動端和開放平臺等提供 API 服務(wù)。當(dāng)時,微博平臺面臨著很大的技術(shù)性挑戰(zhàn),承擔(dān)著整體最大的訪問量級,服務(wù)需要有最高的可用性保證。在平臺端,因為保存著微博幾乎所有的數(shù)據(jù),所以也會面臨著海量數(shù)據(jù)存儲和處理的各項挑戰(zhàn)。
我把在新浪微博的工作主要分為了 3 個階段:
1、業(yè)務(wù)架構(gòu)師階段
在新浪微博時,我常常思考自己未來的定位和發(fā)展問題,但是無論是如何,我認為最重要的是,需要提升自己對于業(yè)務(wù)的理解能力,從業(yè)務(wù)開發(fā)和業(yè)務(wù)架構(gòu)師入手,思考如何更好幫助產(chǎn)品和團隊發(fā)展。
2011 年,在加入新浪微博之后,我基本上參與了絕大部分的業(yè)務(wù)系統(tǒng)研發(fā)和優(yōu)化工作,從消息總線、移動端 Push,到好友關(guān)系服務(wù)、計數(shù)器服務(wù)、短鏈服務(wù)、未讀數(shù)服務(wù),再到微博的 Feed 服務(wù)、評論點贊服務(wù)等,其中涉及到重寫、優(yōu)化、功能開發(fā)等方面。
在此階段,我深刻體會到跟時間賽跑的含義。因為業(yè)務(wù)發(fā)展很快,所以我們需要爭分奪秒的解決性能和可用性的問題,比如微博未讀數(shù)服務(wù)——用戶在刷微博時,會看到還有幾條未讀的新微博;當(dāng)出現(xiàn)新微博時,我們需要提醒用戶未讀微博信息。這是一個看起來很小的業(yè)務(wù)功能,但是當(dāng)你深入分析實現(xiàn)方案時,你會發(fā)現(xiàn)它沒有想象中那么簡單,尤其是在訪問量級很大、響應(yīng)時間和成本要求很高的情況下。
2011 年時,微博的平臺部門不到 20 人,我們需要承擔(dān)微博絕大部分業(yè)務(wù)服務(wù)的 API 開發(fā),所以整個團隊的節(jié)奏非???。
我依稀記得入職第一天,原本我計劃晚上給朋友送東西,想著入職第一天應(yīng)該加班也不會太晚,所以約了晚上 11 點,結(jié)果發(fā)現(xiàn)到了晚上 10 點,團隊一個人都沒離開,團隊老大 TimYang(TimYang,新浪微博研發(fā)部副總經(jīng)理,TGO 鯤鵬會第一任北京分會會長)都在。最后到了快 12 點,我才發(fā)現(xiàn)終于有人離開了。雖然當(dāng)時團隊節(jié)奏非常快,但是大家的狀態(tài)都很好,也非常有激情。
還有一件讓我有深刻體會的事情是,時間擠擠總是能出來的。當(dāng)時 TimYang 組織了一系列編程比賽,其中有一次是限定用 Scala 語言,看誰能讓 CPU Load 跑最高。
那時,距離比賽僅剩 4 天時間,我們基本都是在滿負荷工作,基本每天工作到 11 點才回家,還有半夜上線的情況,而且團隊中多數(shù)人都沒有接觸過 Scala。但是,大家仍然利用 4 天時間,擠牙膏似的在乘坐地鐵的過程中、睡前、午休等剩余時間學(xué)習(xí)相關(guān)的知識和做好各種 case study,最后大家基本上都完成了比賽。因此,我一直都用“時間擠擠總是有的”來鼓勵自己。
在微博的第一年時間里,我基本上圍繞著業(yè)務(wù)系統(tǒng)工作,其中有幾件事讓我特別有感觸:
第一件事是,我到公司做的第一個系統(tǒng)是統(tǒng)一消息總線系統(tǒng)(內(nèi)部稱為 firehose)。從后來的業(yè)務(wù)演化角度來看,消息總線系統(tǒng)對于內(nèi)部組織協(xié)作和業(yè)務(wù)發(fā)展起了很大的幫助。
在此期間,微博核心業(yè)務(wù)系統(tǒng)在不斷演進,同時公司圍繞著微博在做很多新的擴展業(yè)務(wù)嘗試,消息總線系統(tǒng)成為了一種很好的系統(tǒng)間接耦方式,也能很方便、快速的為微博生態(tài)提供各種產(chǎn)品和服務(wù)。
通過一段時間,我們發(fā)現(xiàn)這也是一種比較好的實踐方式,很多公司都很需要這樣的一套機制,尤其是在公司需要圍繞其中 1-2 款核心產(chǎn)品做各種延伸和創(chuàng)新的情況下。
第二件事是,2011 年中旬,我負責(zé)新版本微博未讀數(shù)服務(wù)的開發(fā)工作,這個業(yè)務(wù)看似簡單,但是對于如何實現(xiàn)高并發(fā)、高性能和低成本有不小的挑戰(zhàn)。
當(dāng)時的問題場景是,百萬以上級 QPS,每個人平均關(guān)注百級別好友數(shù)(基于敏感數(shù)據(jù)考慮只是列大概值),每天千萬以上級微博發(fā)送量,Latency 需要保證 99% 的情況在 10 毫秒以下,可以接受數(shù)據(jù)最終一致性,我們需要顯示具體的數(shù)字,而不僅僅是有新消息(當(dāng)然,后續(xù)有些場景會有所權(quán)衡)。為了解決這個問題,大家都在進行頭腦風(fēng)暴,最終方案采用的是由微博平臺的田琪大師提出的參考 Git 的 Snapshot 的機制。
這件事情給我很大的啟發(fā),在日常工作生活中,往往已經(jīng)出現(xiàn)了很多很好的實踐方式,如果我們對于這些事情進行延伸思考、觀察和進一步總結(jié),往往能幫助我們解決很多新問題。在今年的 GTLC 上海站中,七牛老許(許式偉,七牛云創(chuàng)始人 & CEO)提到,計算機學(xué)科是一個非常年輕的學(xué)科,與人類社會幾千年的發(fā)展相比,計算機科學(xué)還只能算是一個幼童,所以很需要從人類發(fā)展的幾千年中進行更多學(xué)習(xí)。
第三件事是,當(dāng)時微博有兩個數(shù)據(jù)源,一個是從 2009 年微博網(wǎng)頁版發(fā)布時,一直維護的主站數(shù)據(jù)庫;另一個是 2010 年,微博做開放平臺重新建設(shè)的平臺數(shù)據(jù)庫。雖然都是全量的數(shù)據(jù),但是由于各種歷史原因,主站數(shù)據(jù)庫早期的數(shù)據(jù)更全,平臺數(shù)據(jù)庫后期的數(shù)據(jù)更全,并且兩個數(shù)據(jù)庫從設(shè)計上差異很大,導(dǎo)致出現(xiàn)數(shù)據(jù)一致性和完整性的問題。尤其是在不同的數(shù)據(jù)源中,大家各自使用不同的 ID,這給團隊帶來了很大的困擾。
于是在 2011 年國慶節(jié)前一周,我們討論要不要重新設(shè)計一套新的數(shù)據(jù)庫,包括從整體架構(gòu)上進行綜合梳理,同時把歷史的兩個數(shù)據(jù)庫里所有的 Feed、轉(zhuǎn)發(fā)、評論和贊等微博核心數(shù)據(jù)都導(dǎo)入新的數(shù)據(jù)庫,解決掉歷史的各種包袱問題。最后,我們 4 個人說干就干,立刻梳理了原先所有的架構(gòu),設(shè)計新的系統(tǒng)架構(gòu),開始寫導(dǎo)數(shù)據(jù)的工具,計劃在國慶期間讓工具運行起來。
原本這是一個預(yù)計快速突破的項目,但是最后成為了持續(xù)近半年的項目,其中的關(guān)鍵原因是這個項目的目標在持續(xù)擴大,擴大為重構(gòu)微博整體核心業(yè)務(wù)系統(tǒng)和實現(xiàn)微博異地多 IDC 部署。
我們在梳理整體新系統(tǒng)架構(gòu)之后,項目最大的挑戰(zhàn)是,如何在多個數(shù)據(jù)源的情況下,保持萬億級數(shù)據(jù)的一致性;如何讓新老系統(tǒng)同時穩(wěn)定的運行;如何實現(xiàn)跨越中國南北實現(xiàn)異地多 IDC 部署。同時,由于數(shù)據(jù)庫的改變,導(dǎo)致基本上所有微博的業(yè)務(wù)系統(tǒng)都需要進行調(diào)整??上攵@個工作量有多大,我們不僅需要深入了解所有涉及的業(yè)務(wù)系統(tǒng),而且還需要做逐步的調(diào)整。
通過這件事,讓我對微博整體的業(yè)務(wù)和架構(gòu)以及國內(nèi)外相關(guān)公司的架構(gòu)有了更深入的了解,同時擁有與公司內(nèi)部各個團隊深入溝通、建立互信的機會。盡管在這半年非常辛苦,基本上很少凌晨兩點前回家,但是這對我個人的成長還是非常大的。同時,因為經(jīng)歷了這件事情,讓我與參加過全程的項目組成員建立了非常深厚的革命感情。后來,我們還一起去了沙漠、草原和麗江。(天知道當(dāng)時三個單身男子在麗江酒吧里呆呆看著旁邊小哥各種撩妹是什么心情,但是這也算是我們?nèi)齻€人的共同回憶了 。)
通過這段經(jīng)歷,讓我更深刻體會到架構(gòu)需要有權(quán)衡全局的能力。比如,在系統(tǒng)快速迭代的同時,我們需要完成新需求、保證新老系統(tǒng)運行,平衡系統(tǒng)等等,這極大程度的鍛煉了我們的全局視野和能力。當(dāng)然也讓我體會到在快速發(fā)展的階段,擁有強執(zhí)行力和組織管理能力的重要性。
2012 年初,微博做了不少業(yè)務(wù)創(chuàng)新和嘗試,盡管大家本職工作已經(jīng)很多,然而大家還是都凝聚在一起,齊心協(xié)力在短時間內(nèi)快速開發(fā)上線新的業(yè)務(wù)系統(tǒng),盡管很多不是原本計劃內(nèi)的工作。在這個過程中,我也能更深入的體會到,大家如何站在業(yè)務(wù)角度思考去幫助公司,而不是陷入到技術(shù)里。雖然技術(shù)很重要,但是我們還是要做到能綜合考慮。
開發(fā)完新版本微博服務(wù)后,我們馬上面臨的最大挑戰(zhàn)是,如何平滑的上線。
類似微博的系統(tǒng)都是構(gòu)建在緩存體系之上,可以說緩存是其中最核心、最重要的基礎(chǔ)設(shè)施。因此我們除了需要保證緩存的高可用和高可擴展之外,還需要嚴格保證緩存的高命中率以及控制盡量低的成本等等。一旦緩存出現(xiàn)問題,那么就可能帶來致命的“雪崩”——整體性大量故障,并且在短時間內(nèi)不能馬上修復(fù),國內(nèi)外有不少大公司也出現(xiàn)過這種“血”的經(jīng)歷。
而這次新系統(tǒng)上線調(diào)整就包括微博最核心的 Feed 服務(wù), Feed 服務(wù)的緩存命中率長期保持在 99.9% 以上,因為它承擔(dān)著最大的訪問量,同時也是微博最核心的業(yè)務(wù)(如果出現(xiàn)問題將直接導(dǎo)致微博首頁出問題)。
在調(diào)整過程中,我們需要使用新的數(shù)據(jù)庫和緩存系統(tǒng)。經(jīng)歷過 10 多個日夜顛倒的日子之后,我與微博 Feed 業(yè)務(wù)負責(zé)人道儒終于一起把整體平滑的切換上線。通過這件事,讓我對于緩存有了更深入、更體系的認識。除此之外,也讓我對于緩存有了更加深刻的敬畏心,對于涉及緩存的調(diào)整,我們需要有非常嚴謹?shù)?checklist 以及需要梳理清楚所有異常場景,并有提前準備和演練,哪怕漏掉一個微小的細節(jié)可能都會導(dǎo)致致命的故障。墨菲定律(意為如果事情有變壞的可能,不管這種可能性有多小,它總會發(fā)生。)真的非常靈驗,所以我們不要具有僥幸心理。
通過這件事,讓我學(xué)會了做事要保持一顆敬畏心。無論是在熟悉的領(lǐng)域,還是在不熟悉的領(lǐng)域里,都需要保持一顆敬畏心。這能讓你更好地與大家溝通配合,同時也能真正收獲和學(xué)習(xí)很多知識。
在新版本微博服務(wù)上線后,我們馬上做的事情是,實現(xiàn)異地多 IDC 部署上線。
微博平臺在比較早期就實現(xiàn)了同城多 IDC 部署,而異地 IDC 部署又面臨不少新的挑戰(zhàn)。在這個過程中,我們從實現(xiàn)多機房讀取單機房寫入、核心業(yè)務(wù)和需要做多 IDC 的業(yè)務(wù)做起,一步步達到目標,最終實現(xiàn)讓南方用戶和海外用戶的使用體驗得到進一步的提升。
2012 年 5 月,新版本的微博、評論、點贊等系統(tǒng)上線了,微博的異地多 IDC 也正式上線了。當(dāng)時,我松了很大一口氣,這口氣我憋了有半年,一直是忙到根本都沒有時間去想自己有多忙。
2、技術(shù)架構(gòu)師階段
微博是行業(yè)里比較早真正實踐在線容錯和壓測演練的公司,也就現(xiàn)在所說的混沌工程。當(dāng)然這個訴求也是來自于業(yè)務(wù),隨著微博系統(tǒng)復(fù)雜度越來越高,出問題的概率肯定是會越來越大,因為從理論的角度看,每個環(huán)節(jié)都可能出現(xiàn)問題。如果沒有預(yù)判當(dāng)問題出現(xiàn)時整體的系統(tǒng)反應(yīng)情況,那么我們就會變得很被動。
而在很多場景下,我們沒有辦法完全復(fù)現(xiàn)測試環(huán)境中出現(xiàn)的所有問題。因此最好的情況是,我們在線上直接去模擬,或者演練真實的問題,看系統(tǒng)的表現(xiàn),防范于未然。
微博的容錯演練系統(tǒng)是 TouchStone,我們希望它可以通過在線容災(zāi)演練,盡早發(fā)現(xiàn)線上的問題,并提前解決。同時,當(dāng)真正出現(xiàn)故障時,也有機制能盡快處理。
這時,我們需要與業(yè)務(wù)團隊進行配合,搭建更體系化的系統(tǒng),比如高可用體系的建設(shè)。對于微博這類時事熱點事件非常敏感的系統(tǒng)來說,高可用的體系建設(shè)的重要程度不言而喻。
同時在這個階段,我開始更多地參與到一些分享、交流的活動當(dāng)中,包括內(nèi)部的新兵訓(xùn)練營、微博平臺技術(shù)開放日、新浪技術(shù)交流大會以及外部的技術(shù)沙龍活動和跨公司專項交流會。從 2008 年開始,我基本上每年都去參加幾場在北京的大型技術(shù)大會。通過這些活動,不僅讓我提高了視野,而且學(xué)會了用辯證性的角度看待各類事物,看到了更多千瘡百孔和不完美,也逐步接納了不完美的世界、不完美的項目和不完美的自己。
3、架構(gòu)平臺團隊階段
2013 年,我開始負責(zé)微博平臺架構(gòu)團隊。當(dāng)時,微博平臺架構(gòu)團隊是由幾個核心業(yè)務(wù)團隊中比較核心的同學(xué)以及平臺基礎(chǔ)研發(fā)的同學(xué)組成,期望通過基礎(chǔ)設(shè)施的建設(shè)和部分核心業(yè)務(wù)的研發(fā),幫助業(yè)務(wù)發(fā)展和團隊的成長。
這是一個可能最不需要“管理”的團隊,因為一方面他們很了解業(yè)務(wù),另一方面他們擁有很強的基礎(chǔ)研發(fā)能力,同時每個人還擁有很強的自律性和自驅(qū)力,在團隊中也十分受人尊敬,因為當(dāng)平臺中任何業(yè)務(wù)線出現(xiàn)了問題,總能看到他們的身影。
此時,我重點思考兩個問題:
1、從業(yè)務(wù)的角度看,公司和平臺需要什么,業(yè)務(wù)需要什么,這些人怎么做才能幫助到業(yè)務(wù)團隊,幫助產(chǎn)品做得更好;
2、我該如何幫助團隊和團隊成員獲得更快、更好的成長。
在我的理解里,只有能幫助業(yè)務(wù)和個人共同成長的組織才是可持續(xù)的。因此,我花了大量的時間在思考這兩個問題,做的事情很多也圍繞著這些方面。
我認為,首先我們需要從業(yè)務(wù)入手,梳理從業(yè)務(wù)角度需要的基礎(chǔ)設(shè)施,包括未來的微博需要什么樣的技術(shù)和業(yè)務(wù)支撐;最后再統(tǒng)一朝著更加體系化的方向演進。
基于業(yè)務(wù)場景角度的考慮,微博 Feed 服務(wù)采用推拉結(jié)合的方案。對于普通類型的微博采用拉的方案,獲取所有好友的 TopN 微博 ID 進行堆排,而特殊的微博采用推的方案。
但是隨著每個人發(fā)布的微博量越來越多、好友關(guān)注數(shù)量越來越多,大家對于微博的使用體驗也越來越高時,我們迫切地需要對當(dāng)時的架構(gòu)做進一步的優(yōu)化。一方面我們在推動做一些更前沿更理想化、一步到位的存儲靠近計算方案和集存儲、計算為一體的定制性服務(wù),另外一方面還需要思考如何基于現(xiàn)有架構(gòu)更加極致的優(yōu)化。
2014 年 3 月,我們啟動了基于現(xiàn)有架構(gòu)進行極致優(yōu)化的方案,期望通過 1 個月的封閉開發(fā)完成系統(tǒng)的上線。這讓我不禁回想起 2 年前同一時期,我們針對微博 Feed 服務(wù)進行的整體優(yōu)化和調(diào)整,因為有了上一次的經(jīng)驗,同時我們擁有了更好的條件,比如健全的穩(wěn)定性保障體系、在線容災(zāi)和壓測演練體系、多 IDC 容災(zāi)體系、高可用的緩存服務(wù)等等,所以我們當(dāng)時的整體改造得很順利。
最終,我們的項目在 1 個月內(nèi)順利上線。上線后,F(xiàn)eed 極致優(yōu)化方案減少了 Feed 服務(wù) 1/3 的緩存容量,降低了 1/3 的帶寬消耗,同時接口服務(wù) Latency 也降低了 1/3 以上,達到了全方位優(yōu)化的效果。
這是一個比較典型的基于數(shù)據(jù)驅(qū)動優(yōu)化項目,在優(yōu)化之前,我們需要針對用戶訪問行為等做了多維度數(shù)據(jù)分析,建立訪問模型,整個過程都需要基于數(shù)據(jù)驅(qū)動的方式推行。因此通過這個項目,讓我明白了我們需要在日常做更深入的思考和積累,一旦逐步從量變到質(zhì)變,那么能給我們帶來的能力是很大的,當(dāng)我們能做到有規(guī)劃和方向前進時,那么認真做好每一件事就變得非常重要了。
此時,我們也常常在思考,如何進一步的幫助團隊提升整體技術(shù)氛圍和技術(shù)影響力。因為我在 TimYang 組織和建立起來的很好技術(shù)氛圍中受益良多,所以我也很期望能盡量多幫助大家。
后來,我逐漸開始在微博平臺技術(shù)開放日做分享,推動大家更多地參與到行業(yè)里的技術(shù)沙龍和技術(shù)大會,同時通過微博夜校等方式讓大家擁有更好的學(xué)習(xí)氛圍,從中也去挖掘潛在人才并給予更多的空間。
在微博工作期間,我也感受到了新浪微博很強的執(zhí)行力,會在多個團隊協(xié)作的重點項目中設(shè)立項目評審小組,整合跨團隊的公司所有資源,讓不同團隊有統(tǒng)一的目標和執(zhí)行計劃,然后快速執(zhí)行。
總的來說,在新浪微博時期是我個人技術(shù)成長最大和最快的階段,雖然也是最忙最累的階段,但是我很感謝這段經(jīng)歷。在微博平臺研發(fā)部的經(jīng)歷,讓我很深刻的感受到團隊家庭的概念。在工作中,大家互幫互助,盡管后面有些人相見于江湖,但是大家都很感謝和珍惜一起在微博的經(jīng)歷,都還是像在微博時那樣互幫互助。
在此之前,我曾在飛信也感受到很多團隊帶來的感動,感謝架構(gòu)團隊負責(zé)人 CC 和部門負責(zé)人攀哥(楊攀,融云聯(lián)合創(chuàng)始人兼 CTO & TGO 鯤鵬會會員),感謝小伙伴們。一直都很感激大家,感激大家在當(dāng)時給予我很多的幫助和支持,也很感謝組織和 TimYang 給大家營造良好的工作氛圍,大家都在跟著業(yè)務(wù)快速成長,讓我更加深刻感受到業(yè)務(wù)發(fā)展和個人發(fā)展是可以雙贏的。后來,我的職業(yè)發(fā)展生涯里很多團隊建設(shè)的思考也是借鑒于此。
1.《微博是怎么搞的?終于找到答案了我的移動互聯(lián)網(wǎng)十年經(jīng)歷(二):新浪微博時期》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《微博是怎么搞的?終于找到答案了我的移動互聯(lián)網(wǎng)十年經(jīng)歷(二):新浪微博時期》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/gl/3054256.html