本文獲《InfoQ》授權轉載,InfoQ 公眾號 ID:infoqchina。以下為 InfoQ 專訪內容。
關於好的架構是設計而來還是進化而來,眾說紛紜莫衷一是。今天 InfoQ 有幸請來前 Google 全球研發總監 Tiger 做客,看看他又持有怎樣的看法。
InfoQ:2003 年的時候,您就從 PhD 輟學,並加入 Google,而當時 Google 還只是家創業公司。能介紹下這段經歷嗎?
Tiger:在今天看來,很多人會說當初我輟學,放棄 PhD 進入 Google 是個非常明智的選擇。然而,2003 的 Google 還只是一家很小的公司。
當時很多人說拿了 PhD 學位安安穩穩的進研究機構多好,不是每個輟學的人都能成為祖克伯或者比爾蓋茲。但我很慶倖自己的人生第一次抉擇選對了。
知道 Google 是因為那時候,有人在偶爾提起時說,「你搜一個什麼東西可以試一下,那個名字很難記的 G 開頭的網站。」 那時候市面上還沒有什麼真正好用的搜尋引擎。經學長推薦用了 Google,一旦你用了,就像吸了鴉片一樣,根本停不下來。於是當我想要做點事情的時候,首先想到了這家公司。
InfoQ:那當時,我想你應該還有很多選擇吧,比如 IBM、微軟之類的大公司,選擇 Google 是為了夢想?為了愛好?為了改變世界?你認為這是冒險嗎?我想現在很多人也面臨和你當你一樣的選擇,能給點建議嗎?
Tiger:同一時間發給我入職 offer 的,還有微軟研究機構、IBM 研究所等成名已久的大公司。但我卻選擇加入 Google,當時看來就像是放棄去住五星級酒店而選擇去住地下車庫一樣。
其實做出這個選擇很簡單,因為微軟、IBM 面試時,面對的都是一群頭髮花白,60 多歲的老爺爺,中規中矩卻有些死氣沉沉。但在 Google 面試我的是副總裁艾倫·尤 斯塔斯(Alan Eustace),我記得兩年前全世界媒體還報導了他從 4 萬米高的平流層完成了個人高空跳傘,打破三項世界紀錄。這就是 Google 帶給我的感覺,年輕、活力,充滿了可能。穩定的背後是不變,不確定的背後,是無限種可能。我相信,在重要的時間節點和選擇上,拋開更多的「應該」和「最好」,跟著自己的感覺走,至少不會給自己留有遺憾。直到我入職那天,才知道我要去做廣告後台系統,現在是 Google 商業化的核心,但當時我們團隊就只有四個人。然而今天,Google 全球有超過五萬名員工。短短十幾年裡,公司的規模至少增長了五十倍。
InfoQ:Google 總是能在技術上先別人一步,你想過裡面的原因嗎?如果生活三個最關鍵的點,您認為是什麼?
Tiger:如果回頭來看的話,我認為可以總結三個點:
第一個是,需求導向。產品需求、業務需求、用戶需求給 Google 創造了一個前所未有的機會。
Google 當時剛好就站在了那個風口浪尖上,因為他做搜索這樣的產品,互聯網正好處於這種爆炸增長的階段!所以對於搜索這個產品的使用率和產生的資料都是前所未有的,之前沒有人見過這樣大的資料。這個需求就會要求 Google 不能去從現成的這些解決方案中去找一個答案,沒辦法找一個現成的產品把它拼湊起來。
所以我覺得這一點 Google 從一開始就看得很清楚,就是市面上沒有任何一家現成的產品能夠解決我們所需要處理問題的這種規模。所以我們必須要把這個推倒重來,重新自己從無到有搭建一個合適的系統。因此,日後很多的技術領先,都是基於這個前提下的。
第二個是,技術的思考高度,和對於基礎架構的重視。
當時 Google 是有一些很具體的問題需要去解決。但是它並不是真是對於這個問題,它還是儘量的把這個東西做的非常的通用。比如說其實當時 Google 最早的那一批人,他們站的高度還是挺高的,他們並不局限於這個東西只是為了要解決 Google 今天面對的問題,而是要搭建一個非常強大的,之前沒有任何人做出來的一個大規模的資料中心。
從資料中心到集群,就是伺服器的集群它都是從頭做起的。這樣其實,就已經走在了很多其他公司的前面,其實 Google 的這一步是走的非常超前的。在有了這麼大一個硬體的基礎之上,有一批非常厲害的人,在上面開發出了這樣一些非常有深遠影響的基礎架構。
第三個是人,選用最好的人,即便做最普通的工作。
不管在哪裡,人的問題我覺得這一點還是挺重要的。Google 一開始招的那些人,就把招聘的標準放的非常高。就是可能招進來的人做的工作並不是特別高級的工作,但是他一直招聘的理念就是說我把最好的人招進來讓他做最平凡的工作,他也是能做出閃光點的。這樣才能保持公司持續的創造力。
在 Google,就是每天都有很多事情要做,還有很多新東西要學。我覺得 Google 做的很好的一件事情就是招聘非常嚴格,非常注重少而精的模式。比如說我們做 AdWords 系統,一共四個人,如果配合得好,每個人都非常的 productive。如果一百人搞這件事情,速度肯定會慢很多。還有 GFS,就是三個人寫出來的。
InfoQ:你怎麼看業務驅動和技術驅動?在 Google 內部,是技術驅動還是業務驅動?
Tiger:我覺得業務驅動、技術驅動,其實不如理解為商業模式的創新,和技術創新。但在實際工作中,我覺得沒有固定的模式,不同的產品會有不同的需求。
例如,搜索顯然是一個技術跑在前面的產品,可能因為搜索本身並沒有什麼業務模式。它就是一個完全免費的給用戶使用的工具,這完全依靠技術驅動。正是因為 Google 發明了全新 PageRank 的演算法,能夠比當時所有的搜尋引擎的結果要好,於是,技術驅動產生了這麼個效果。
但 Google 的廣告系統,就變成了一個商業模式創新驅動的產品。技術創新可以解決實際的問題,但如果連問題都沒有找到,那技術本身沒有實際意義。
最早我們開始搭建 Google 廣告系統的時候,首先在想的是,這應該是一個怎樣的商業模式,在大家經過討論和商量後找到了大致的方向,然後在這種前提下,去想技術可以如何實現。當我們希望將廣告的相關性做的和搜索一樣,在此之前沒有任何一個系統能做到這點,於是意識到需要一個強大的資訊學習系統,這個資訊學習系統所需要的處理的資料量的規模是之前從來沒有人看到過的。在這個思路下,我們先打造這樣的一個基礎架構,然後再把這個廣告系統當成一個應用在上面來解決。
將業務和技術分開來看,可能是因為目前國內的大多數互聯網公司,採用產品和技術分離(至少是兩個團隊)的方式來工作。而在 Google 早先,我們並沒有那麼明確的劃分。Google AdWords 系統,當時也就是我們十個人不到的團隊負責,從思路、商業模式搭建、技術實現,都是在共同討論實現的。
因此具體是哪個優先,還是要以產品的屬性和需求來看。
InfoQ:業內某位同行曾經說過,好的架構是進化來的,不是設計來的。你認同這句話嗎?你怎麼看架構的演化?
Tiger:我不認同,我認為好的架構,都需要經過這麼幾個過程:設計 – 進化 – 進化 …… – 被推翻 – 再設計,是這樣循環往復的過程。最開始的架構,肯定是從無到有,根據產品的需求和當時的業務的需求設計出來的。
我覺得,一個系統的演化,一般會經過這樣的階段:第一個系統肯定是 under-engineer 的,從無到有被設計出來後,肯定是不完善的;第二個版本,一般是 over-engineer 的,因為隨著之前那個版本的使用,積累了一定量需求後,會發現想要增加很多內容在上面;到第三個版本,應該是最恰當的,減去了一些沒必要的設計之後,更合適。但當到了某一個時間點,發現現有的系統架構已經沒有辦法再維持下去,跟不上需求增長時,就需要推到再重新設計。
拿 Google 的廣告系統來說,我 03 年加入了 Google,當時的架構還是比較簡單的,只分為兩層,web serving 層和存儲層。所有的資料都存在 MySInfoQL 裡,前端的 web server 會把使用者搜索的關鍵字轉化成一個資料庫的 query,然後把所有的查詢結果做聚合和排序。
但很快就遇到了問題。我們有兩個 customer,一個是 eBay、一個是 Amazon,他們什麼關鍵字都買,所以他們一家就要佔用一個獨立的資料庫,他們的量還不斷往上漲 當時的解決方案呢,就是多做一層分離,把存儲資料和需要回應線上搜索的資料通過分開,增加一層 cache server。
後來很快用 customer 做分片也不足夠了。我們就轉為了用 keyword 的 fingerprint 做 shard key,從增長最快的資料著手解決。其他還做了的包括異地容災,多套 primary 資料中心同時運行等等,都是後來的升級了。架構的演進,一般是這樣一個周而復始的迴圈過程。
InfoQ:Google AdWords 從最初到現在的穩定,經歷了哪些重大的調整和優化?有哪些是國內公司可以借鑒的?
Tiger:除了我剛才說的,還有過一次升級,大概是在 04 年到 05 年之間。這一次在結構上有更加根本的改變,主要是考慮了 geographical 的 redundancy。因為那時候賺的錢已經很多了,服務一旦 down 掉後果是非常嚴重的。雖然我們是從資料存儲上有很多 replica,但是 primary 還是很容易 down 掉的。我們後來就建了兩套 primary,在 primary 的更新會被 push 到其他所有的 replica datacenter 去。
一旦某一個 primary DC 出了問題,比如地震之類的,我們可以很快 switch 到另一個 DC 去,正常情況下兩套系統會同時運行。我們的每個 replica datacenter 也會有兩套不同的 stream,data 也分別來自於不同的 primary。這兩套 stream 是完全獨立的,一旦一個 stream 出現問題,可以很快的 switch 上另一個 stream 上去。
當時也沒有成熟的 Auto failover 的機制。當時能買到的就是 Oracle,但是沒辦法 scale 到那種程度的 。理論好像有了很多年了,但是真正在實踐中一個在很多 Master 中投票,選出 winner 的演算法也是沒有的。這個也是 Google 當時才實現出來的。其實還有很多底層問題,也有一些比較有意思的事情。
比如說當你有五十個 datacenter 的時候,你怎麼把 data push 過去,也是一個挺大的問題,因為資料量很大。當時我們也沒有用現成的 solution,也沒有任何的現成的 solution 可以用,我們就自己研究了一套。說白了它就是一個 pub-sub 或者說是一個 multi-cast 的問題吧。
一開始的時候,data push 的 latency 是用小時來計算的,就有人利用了這個延時長的缺陷刷了很多廣告的 impressions。因為我們的 replica DC 需要幾個小時才能知道某個 customer 的預算已經用完了。後來經過了一系列的優化,我們才把跨 DC 的 latency 做到了分鐘級別,如果是同一個 DC,那就是秒級別了。
InfoQ:可否分享下您這些年在架構方面積累的經驗?
Tiger:首先,我覺得沒有一種 general purpose solution 是可以拿過來就能用的。尤其在 Google 我們當時很清楚地意識到我們將會面臨的挑戰是其他人都沒有遇到過的,而且用那樣的方式一定是行不通的。但是,Google 的經驗確實可以幫助把握好大的技術方向。
比如說,從一個 rule-based 的推薦系統切換成一個 model-based 的系統,一定會有一個比較大的提升。之後的演算法還可以優化,也會帶來提升,但可能很難再超越之前的提升幅度。具體的演算法實現、優化就得靠團隊裡的這群年輕人了。
InfoQ:能不能談談您這一路走來,對人生、行業的一些認識和感觸?
Tiger:去年年底,我加入小紅書,從無到有的過程對我來說,就像當年在 Google 重塑廣告系統一樣,令人興奮。每一次轉型,都是逼著自己跳出原先的舒適圈,在面對和探索全新領域的過程中,也在不斷的學習和試探自己的潛力邊界。如果給二十幾歲的我一些隻言片語,或許我會在四十一歲的檔口,對自己說:
1. Small things follow your head, Big things follow your heart
2. 值得去的地方,沒有捷徑;難走的路,才更值得開始
3. 堅持執念,不負初心
4. 適時清零,挑戰自我升級
InfoQ:你後續的職業規劃是怎麼樣的?
Tiger:2014 年,為了把 Google 重新帶入中國市場,我開始做了一系列針對國內互聯網環境的調研。這個調研的目的,是為了向 Google 高層建議,應該在中國開展一些什麼業務,不過在調研過程當中,我越來越深地感受到:未來幾年裡,在社交、移動電子商務、智慧硬體、移動支付領域,全球的 leader 會從中國出現,而不是美國。我在 Google13 年,接下來,就想在中國市場,找下一個 Google——未來很長一段時間,我相信小紅書會成為我接下來的全部。
InfoQ:就您這些年的從業經驗,能否給中國工程師一些建議?
Tiger:有人曾經問我,該如何定義一個好的技術人才?我覺得這沒辦法給出一個統一標準,如果用 Google 的文化來衡量,那就是能否把一個以前從來沒有接觸過、或是完全不會的東西,在很短的時間內學會,並且做得很好,這是一個很重要的因素。和學習能力相比,個人經驗就顯得並沒有那麼重要。
這一點我相信放在哪裡都同樣適用,但同時,隨著回國組建團隊,開始慢慢發現中國工程師和美國工程師的一些差異。中國的工程師有一些明顯的長處,例如說,很擅長做一些理論基礎很強的事情,演算法、基本功、電腦能力都很強,能一件事情做得很工整、很好。
但不一樣的地方在於,中國工程師的思維發散程度明顯不如美國的工程師們。我們可能特別習慣於被分配一個工作,把這件事情做好。然而那些矽谷的工程師,他們每天中午吃飯、或是喝咖啡的時候,隨便聊天都是在說,我應該做一件什麼樣的事情去改變世界。他們對這些事情,特別感興趣。
嘉賓介紹
郤小虎(Tiger)於 2003 年從普林斯頓 CS 輟學加入 Google AdWords 核心團隊,負責廣告系統核心技術和產品的開發,因為對廣告系統的突出貢獻,兩次獲得 Google 創始人獎。2007 年,tiger 回國開始建立 Google 上海辦公室,其後任 Google 上海研發總經理。去年年底,tiger 加入小紅書擔任 CTO。
(本文獲《InfoQ》授權刊登轉載,原文標題為〈前 Google 全球研發總監:好的架構需要精心設計,千萬別把問題留給進化〉,圖片來源:mjmonty CC Licensed,未經授權請勿轉載。)