人稱“博師傅”的滴滴打車CTO張博這樣描述:“三年來,基本天天都在‘打仗’。每天一睜眼就要想生和死的問題。比誰能最先穩定,能將用戶留住,誰就是勝利者。我們用技術和時間賽跑。而生死時速之后,我們開心地發現沉淀了非常多的寶貴經驗,培養了大批優秀的實戰人才。”

2012年成立的滴滴打車,僅用了三年時間就書寫了:覆蓋300個城市,用戶數從2200萬增到1.5億,月活躍用戶增長了600多倍(2014年平安夜當天,全國用滴滴打車出行人數超過了3000萬人),打車成功率高于90%……這些永遠會被銘記在移動互聯網歷史中的神奇記錄。而不為人知的是,支撐滴滴打車如此龐大用戶數量的架構,以及那些曾無數次不眠不休應對挑戰的技術伙伴們。
三款產品背后的架構變遷
滴滴打車成立初衷是為了解決司機與乘客之間的信息不對稱的問題,通過移動互聯網和智能手機來打破信息的壁壘。從打車到專車再到順風車,滴滴打車三款產品的背后是架構的挑戰和系統的變遷。
CSDN:如果從產品角度來看,滴滴打車發展有幾個階段?作為CTO,你的工作重點有哪些?
張博:滴滴打車成立初衷就是為了解決司機與乘客之間的信息不對稱的問題。乘客和司機通過傳統手段往往無法實現信息對接,一方是打不到車或被拒載;另一方是空車行駛耗時耗力耗費資源。這是信息的壁壘,完全可以通過移動互聯網和智能手機來打破。而在后續運營中,我們發現即使出租車空駛降低到O,也無法滿足早晚高峰乘客出行需求。以北京為例,出租車10.6萬輛,但人口卻有2000萬常住人口,1000萬流動人口。要匹配這樣的需求需要集中社會用力,調度社會資源,這就是滴滴打車的第二款產品——滴滴專車。目前專車訂單量已經逼近出租車訂單量,而車租車訂單量沒有下降,顯然撬動的是新增量市場。第三款產品是順風車,滿足的場景很有代表性。通過滴滴大數據分析系統,發現很多人居住地和工作地都比較接近,收入水平相當,行業屬性相近,這些人往往都會使用出租車或專車,如果能夠將需求合并,顯然無論是幫助乘客提供低成本出行,還是節省社會資源,都很有價值。更有趣的是,其上增加了社交屬性,人們可以結交新的朋友,出行變得更有意思。作為CTO,我的工作主要有三部分:第一是產品,第二是工程技術,第三是大數據。
CSDN:三款產品代表了滴滴打車的不同發展階段。相信每個階段背后的架構都有很明顯的特征?
張博:2012年滴滴打車剛成立時,流量很小,不需要架構,2臺服務器就能解決所有問題。隨著快速的發展,第一次發現性能瓶頸是在2014年初“補貼大戰”時,我們的訂單量一周之內漲了50倍。而當時的預估是增加10%。500%對10%,結果可想而知。網絡、存儲等故障不斷,Webserver和MySQL也頻出問題。團隊所面臨的挑戰非常大。更為緊張的是,靠傳統采購機器來實現擴張,顯然完全無法滿足業務需要。通過分析比較,我們最終決定整體搬到騰訊云中。這是面對高并發、海量數據挑戰時,架構的第一次非常大的調整。但搬遷也并非一帆風順,代碼需要做大量重構,來解決技術上的單點問題。
第二次架構變化是在第二款產品滴滴專車時,因為最初架構設計是為支撐一款產品,而今架構要同時支撐多款產品。產品之間,有相同也有不同。為此,我們特別成立了技術架構部,將通用型服務下沉到架構,避免重復造輪子,將個性化服務放到業務層,實現服務開發。舉個例子,比如支付、賬號體系、計算、存儲等,都是通用型服務,可以放到架構中。這次架構重構是比較成功的,也正是這樣的組織和技術變化,所以在第三款產品順風車的時候,以及我們馬上發布的更多新產品時,都可以得到很順暢的支撐和服務。
CSDN:業內對滴滴打車當時遇到的挑戰印象深刻。當時和騰訊云在技術方面有哪些合作?
張博:當時滴滴打車已經接受了騰訊的投資,和騰訊云自然比較親近。而且騰訊云也已經歷了Q Q和微信海量用戶高并發的考驗,比如春節紅包,穩定性和經驗是毋庸置疑的。和騰訊云的合作,在技術方面有三個方向:首先是安全,在滴滴打車發展過程中,遭受了多次黑客攻擊,所以安全對我們至關重要,而騰訊云的大禹安全體系可以很好地幫助我們;其次是CDN等網絡服務,有些技術是創業公司很難實現的。比如網絡層優化,用戶手機發送訂單時,需要接入最近的基站,需要找到最優質鏈路,這些只有投入巨大人力物力的企業才能實現。而這些服務對用戶體驗極為重要,所以初創企業通過云服務反而可以走的更快更好;第三是在基礎平臺構建等方面節省大量人力,如硬件采購、硬件運維等,不需要費心費力,而是可以將更多精力集中到應用層和業務層,以及其他更有價值的數據分析等新技術方面。實際上,當時在補貼大戰時,作為一個當時僅1年半的初創企業,在如此大流量面前是根本頂不住的。也正是那時,騰訊高級架構師直接駐場,和我們建立了兄弟般的友誼。
CSDN:騰訊云新品發布速度很快。后續滴滴打車還會重點用到哪些新服務?
張博:滴滴打車和騰訊云是深度合作的,安全、網絡、運維之外,還有優化整體系統,部分調優、新產品實踐等。滴滴打車甚至會深入到騰訊新業務中,比如征信系統。通過滴滴打車平臺收集的乘客/司機的爽約次數、爽約頻率等都會成為一個數據源。再如未來順風車中,基于大數據分析,如何為一個互聯網的屌絲優先匹配一個互聯網女神,這些有趣的場景在底層都需要數據交換的。需要應用到騰訊云更多的新技術,新服務。我們雙方都非常開放,希望能夠給社會創造更大價值。
CSDN:攜程、藝龍事件之后,CTO們更加重視數據安全。滴滴打車在安全方面如何規劃的?
張博:目前滴滴打車大部分服務都在云上,也有部分服務是通過租賃騰訊機房自己運維的。整體架構是混合云的模式。安全對每個公司而言都很私密。現在內部有嚴格的安全控制,外部主要是通過騰訊云,如防黑客攻擊,如DDos攻擊等。安全防護是沒有止境的,我們需要做的工作還有很多。
開源優化構建技術核心競爭力
滴滴打車正在滴米系統、用戶畫像系統、精準營銷、智能匹配、需求預測系統和運能預測系統等方面構建自己的技術核心競爭力。在研發的路上,大數據、機器學習不僅是滴滴打車產品的心臟,還是滴滴打車商業的心臟。
CSDN:2015年在滴米系統、用戶畫像系統、精準營銷、智能匹配、需求預測系統和運能預測系統等方面,滴滴大數據技術逐步深入。那么研發的整體思路是怎么樣的?
張博:是的。大數據是滴滴打車的心臟。不只是滴滴打車產品的心臟,還是滴滴打車商業的心臟。我們的研發的基本原則是想辦法撮合乘客和司機,滿足他們的需求,保證他們的體驗。舉個例子,某一個時刻在中關村,同時出現很多訂單,周圍有很多司機。我們要做的決策是:將訂單發送給合適的司機。因為司機在任何時刻都只能聽到同時爆發訂單中的一個。所以匹配要準確,那么背后就是推薦算法要準確,匹配效率要高,計算要快,推送要及時。這還不夠。我們在推送訂單到這位司機之前,應該先預測他對訂單感興趣的程度,廣告領域稱為CTR,我們稱為STR。在后驗過程中,滴滴可以做到80%的準確度。其中,不僅要計算司機的個人特征,還要結合其決策體系,如喜好,是對小費敏感,長短途敏感,時間敏感,還是對方向敏感等靜態特征和司機和訂單之間的位置關系、時間關系等動態特征進行綜合分析。除此以外,還有補貼,給乘客什么樣的補貼,給司機什么樣的補貼,誰更敏感,多少金額影響更積極,這些策略的背后都是大數據在起作用。我們希望用有限的資源最大化提升用戶的質量和活躍度,這不可能通過人肉實現,只有技術才能實現這些。而實現的過程中,對架構、運營、產品等挑戰都很大。
CSDN:滴滴打車在大數據方面是傾向于開源技術優化還是自主研發?
張博:我們業務分了幾層。基本都是使用的開源技術。基礎層面是數據平臺,主要是大數據計算和存儲,用的是業內比較成熟的開源系統,Hadoop。基礎層上是自建的數據倉庫,然后是策略架構,通過實驗平臺讓策略迭代更加敏捷,如快速提取特征完成模型訓練,并通過小流量測試驗證模型,通過后迅速上線。這些都是工程方面的研發。再上面是機器學習,滴滴打車現在每天涌入的數據接近10TB,通過不斷搜集用戶標準數據特征,優化機器學習模型。比如推送給司機訂單,司機是否搶單,這就是一個天然的標注。而通過這些標注,就可以優化學習體系。最上面就是整個大數據體系,支持新產品開發和策略決策。在我看來,目前很多開源項目演化的比較穩定,性能表現也不錯,沒有必要從頭開始搭積木了,盡快將技術服務于應用最重要。而在不斷實踐中,通過對開源技術的改進和優化,在反饋給社區,我們是愿意這樣做的。
CSDN:人工智能發展速度很快。滴滴在機器學習方面已經到了什么樣的程度?
張博:我們馬上會有重量級產品發布。滴滴大數據領域負責人是機器學習領域世界級頂尖學者何曉飛。我們在機器學習的投入是相當巨大的。
CSDN:哪些寶貴的經驗可以分享出來?
張博:第一是如何應對大流量、高并發的挑戰。比如每一個接口可能被訪問頻次如何設計,背后訪問多少次緩存,數據庫會讀寫多少次,后端每一個服務,瞬間并發量能到什么級別,每一層壓力測試要扛住多大讀寫并發,10臺機器能扛住多大讀寫并發等,都要做到心中有數。再比如每一次營銷活動前,要對系統做一次體檢,評估到底可以承接多大的量。第二是要有非常好的運維工具,要能實時監測線上每一個后端服務模塊的負載,能夠及時發現問題并報警。第三是設定多套應急預案,當問題發生時,團隊可以盡快反應,做準備好的動作。第四是要有降級策略,在大流量沖擊下,要優先保證主流層。對滴滴而言就是發單,用戶發單、司機搶單是主流程,在這樣的特殊情況中,積分商城等都是非主流層,可以被舍棄。
“我最開心的是,大家都飛速成長”
每一次生死戰役,都是拼命在和時間賽跑。而每一次戰役勝利之后,都為滴滴打車培養了優秀的實戰人才。最讓張博開心的是,團隊成員在飛速的成長的同時,沒有一個流失。
CSDN:滴滴打車成立只有三年,但對產業的影響有目共睹。作為技術負責人,你認為最大的挑戰是什么?
張博:這三年,基本上每天都在打仗。每天都是一睜眼就要想生和死的問題。就像補貼大戰時,一周數據漲了50倍,但我們完全無法應對。當時甚至出現了這樣一幕,每到高峰,我們就宕機。我們宕機,對手就宕機。因為以用戶都去他們那邊了。當然,他們宕機,我們也宕機。當時比的是誰先穩定下來,誰能把用戶留住。當時就是拼命在和時間賽跑,我們團隊60多人曾7天7夜沒有睡覺,吃住在公司。走過以后,回頭看看,發現我們沉淀了非常多的寶貴經驗,也用實戰培養了更多的人才。也許,很難說一周之內就好像變了一個人,但三年來,平均每幾個月就要闖一次生死關,過去了迎來新機會,過不去就死了。這樣的壓力下,你自己都會驚訝于自己的成長速度。一個快速成長的行業,一個快速發展的企業,你的快速成長是必然的。很多人都知道,在創業前,我在百度做搜索技術,那個時候只要在策略方面做好就可以,下面的基礎設施層,如計算存儲層都不要考慮。而在滴滴幾乎負責各個層面,要搭建系統、要應對業務挑戰、要做更多產品設計。基本沒辦法枚舉更多了,所以最大的挑戰就是應對挑戰加速成長。
CSDN:如何評價和你“共生死”的團隊?
張博:我的團隊非常優秀,正因為經歷了非常多的生死戰役,他們每個人的成長速度會是大公司的2-3倍。也許2-3年前,他們還只是大公司技術團隊的不知名的一員,但現在他們已經是滴滴打車的頂梁柱,承擔了非常重要的工作。比如曾經一個iOS工程師如今負責滴滴公共產品和技術,已經成為全棧選手。這樣的例子還有很多。我最開心的也是這一點,看到他們飛速的成長,而且從入職開始,沒有一個流失。我們下一步會建立滴滴技術學院,每一個角色都有技術成長路線圖,會有導師輔導,會有定期培訓。我們也會引入高精尖人才,比如何教授等,請這些頂級專家帶領大家走下去。
CSDN:滴滴快的合并后,實施聯合CEO制度,人員架構不變。但在技術團隊方面是否會有合并?
張博:技術平臺和相應的架構正在做合并。我們希望變成不同的專業團隊,將所負責領域做深,做精,幫助業務跑的更快。
CSDN:未來技術規劃是如何考慮的?
張博:加大在大數據等方面的持續投入,加大在基礎架構層面的投入。我們看到硅谷很多企業在大規模分布式計算、存儲和機器學習的平臺的投入是巨大的。比如谷歌通過對MapReduce的優化,使得其計算要遠勝于其他平臺。我們在這些方面也要繼續學習,完善在技術方面的核心競爭力。
CSDN:你的轉型很成功。對于從CIO到CTO或者從技術骨干到CTO,這兩條不同的發展路徑,有什么好建議么?
張博:從CIO到CTO,要清晰認識到技術為產品服務,產品為商業服務。CTO要有商業眼光。倒推回來,CIO要從技術入手,支撐產品發展,進而支撐公司現在和未來的商業計劃。簡單來說就是:從技術骨干到產品骨干,要懂互聯網產品、明白用戶需求,知道如何做出一款滿足用戶需求的產品、你要知道這些用戶過來了以后,商業模式是什么,企業如何創造利潤。而從技術骨干到CTO,難度更大。技術專家往往在某一領域精深,但要變成全能選手,就需要對每個領域都有所了解,找到這個領域真正的頂尖人才,然后組織起你的團隊,駕馭團隊實現目標。
寫在最后:
成文之時,恰逢上海變成“海上”,朋友圈一片刷屏,呼喚“滴滴專船”。期待攜手騰訊云已經完成架構優化的滴滴打車,能夠更加快速地推出更多滿足細分場景的創新產品。