Amazon為何能做到持續交付
前段時間去國內一家大型電商公司做交流,正好也回顧了一下Amazon的經歷方便做比對。以下信息應該都是可以公開的。
Amazon可以讓一個Dev從功能的設計,開發,測試,發布,后續的監控一個人在完成。平均每十幾秒就有一次發布,每天發布好幾千次,保證快速高質量的持續交付。
從工程師管理上,主要實行了DevOps。讓每個人有更小更明確的任務,you build it, you run it. 而工具方面這主要得益于一個Build tools的組,他們把Platform和Internal tools做到了功能是和易用性上在界內數一數二。讓Amazon retail那個超級龐大復雜的網站時刻可以被流暢的使用。而這個組做的主要工具有5類:
- Brazil Build, 對package進行分發和建立,每次build至少涉及上百個package,可以在幾分鐘甚至幾十秒內完成build并保證不出錯。
- Apollo Deployment, 對環境進行管理,比如某一個service上線需要用到哪些package group,依賴有哪些,參數要設置哪些,機器要多少臺etc。按最小的service單元每次也會涉及到在幾十臺host上做deployment。
- Code base,所有代碼存放在中央代碼庫,可以按reference,method,keyword之類搜索所有相關代碼。
- Monitoring System,對service進行監控,告警,故障分析etc。
- Pipeline,把build,test,deploy全部串起來,對整個流程進行監控。大部分操作如rebuild,代碼回滾,停止deploy一鍵操作就可以完成。
與Microsoft相比,Amazon的所有tools全公司統一使用的,更新及時且統一,有專門非常大一個組負責開發維護。而Microsoft由于組織架構原因,各個組間code不是互相可見的,做這些tools也各自為戰,你做一套我做一套,精力分散加上code/api等不透明導致online infra做的非常渣。以至于Microsoft想rollback一次得叫上PM,QA,Dev等人一起弄個大動作。而Amazon隨便一個Dev通過Apollo只需one click就可以rollback了。這也導致Microsoft想做daily deployment幾乎不可能,更別說hourly deployment了。
Facebook也有十余年歷史了,但Ops的經驗還相對不足。有時候看Facebook的朋友工作做時用到了一些工具,總體感覺缺乏統一規劃性,deployment tool,monitoring都有,但是還不夠完善。好在工程師們都足夠強,可以依賴工程師的個人素質去解決一些問題。這個一會兒后面再補充幾句。
以Google的人才和技術實力,Internal tools自然也是一樣都不缺,唯一的區別是在易用性上還和Amazon的差一點,當然對于Google的工程師來說,這點區別并不造成太大影響。
剛才說到Facebook和工具還不完善,很多時候要依賴于工程師素質,Google的工具易用性也還可以提高。那么為什么Amazon要把internal tools做的這么強大并且這么產品化呢?按一般公司的想法,內部工具反正給內部用的,能用就行,好不好用,丑不丑,統一不統一都不重要。
這涉及到Amazon的人才戰略。Amazon 90%以上的是初級程序員。來自于校招或1-2年工作經驗。想讓這些人真正發揮出價值有兩條路可以選:
1.花1年培養他們,讓他們對業務能獨當一面。
2.給他們拆分出足夠小足夠簡單的任務,并給出足夠強大的輔助工具,讓他們可以在1-2個月內就能開始發揮全部價值。Amazon顯然選擇了第二種方式(想想當時才入職第二周就開始oncall了,如果沒有強大工具的支持,不可能去解決系統問題的。)顯然第二種方式對工程師是非常不友好的,但從資本的角度出發,這是以低廉的方法***程序的榨取勞動力。這也導致Amazon的turn over rate要高于Google和Facebook。
以前作為工程師,也非常喜歡Google對待工程師的方式,不過后來更多的接觸商業之后覺得Amazon和Uber這樣的公司,哪怕是Facebook這樣的公司,才更像一個正常的商業運作的公司,而Google這種過于理想化的方式更像是在研究所。
那么什么時候公司需要開始重視internal tools呢?按之前Twitter一名工程師分析的結論(文章暫時找不到)是當公司工程師團隊超過50人時,internal tools可以開始提升整體團隊的效率和工程質量。上面比較的幾家都是工程師非常強的公司,如果你的公司的工程師強不到那種程度, 利用好工具做好持續發布更尤為重要。
美國大部分公司是很支持并愿意去做internal tools的,而國內由于對工具價值的理解不夠,或者說對長期規劃不足,導致與重視程度也不夠。聽說滴滴每次發個新版還要CEO上臺全體動員,緊張的不行,工程師在發完新版后天天得加班。由此一例可見差距。