提要:借助網易蜂巢容器云平臺,網易考拉完成了核心系統的服務化和分布式改造,實現了從資源到應用的端到端彈性擴容,可保障電商系統從容面對雙11、黑五的壓力
為了備戰本次雙11,跨境電商領頭羊網易考拉海購(以下簡稱“網易考拉”)早早就宣布投入4億資源,精心營造了一個“超級洋貨節”。造節在引流的同時,也會給電商系統帶來了巨大的考驗。但網易考拉對此并不擔憂:借助網易蜂巢容器云平臺,網易考拉已經完成了核心系統的分布式改造,全面實現了資源彈性和應用彈性,以保障電商系統在業務規模快速增長的情況下穩如泰山,618、雙11、黑五等大規模促銷的訪問壓力也可從容面對。
重新定義消費升級,網易考拉的崛起和壓力
2015年1月,攜網易媒體的優勢,網易考拉正式開始角逐跨境電商。只用了短短一年,從零起步的網易考拉就開始沖擊100億銷售額。截至今年10月末,網易考拉已積累超過1,500萬的忠誠復購用戶,在國內自營型跨境電商進口銷售額榜單上,網易考拉已經名列第一。
網易考拉的快速成長,有互聯網和消費者趨勢變化推動的因素,但更是網易考拉運營策略得當的結果。借助網易集團現金充沛的優勢,網易考拉在跨國的倉儲、物流、供應鏈、支付等基礎工作上投入了大量的精力,全球布點,嚴格審核供應商的資質,并通過自營直采以保證100%正品,為贏得消費者信任、進行各種促銷活動打下基礎。
原始積累已經完成,2016年的雙11就是網易考拉的大日子。以重新定義消費升級之名,網易考拉瞄準了品牌、個性和專業等三個需求,進行差異化的競爭(價格已經不是電商競爭的關鍵)。網易考拉很早就已經為規模促銷進行準備,不僅為保稅倉擴容8萬多平方米,從10月初開始備貨,而且還從8月初就開始構建了一個物流云平臺,通過智能化管理系統“祥龍”根據銷量預測分倉,以保證及時配送。所以,網易考拉有底氣在“超級洋貨節”期間推出一項1元試用正品好貨的活動,即支付1元就可申請海外商品的試用,施華洛世奇、大王、好奇等眾多海外一線品牌參與。
供應鏈、倉儲、配送的能力固然是與眾不同的“11.11超級洋貨節”收效的保障,然而,臨門一腳的在線商城系統也是不容忽視的一環,如果直接面向用戶的電商系統不能及時上線策劃的新功能,不能頂住訪問壓力,網站的體驗不能讓消費者滿意,后端的工作準備得再好也是枉然。據網易考拉預測,本次雙11大促零點的訂單量將瞬間達到平時的數倍,系統壓力極大。
另一方面,網易考拉對用戶體驗有一種近乎偏執的要求。根據網易考拉海購高級副總裁朱靜波的介紹,網易考拉內部有一個用戶存活率的指標,希望至少50%的大促用戶能夠因為良好的用戶體驗、有趣的內容最終留下來。
其實,本次雙11帶來的技術挑戰和應對方式,正是網易考拉快速成長的縮影,在此之前,618、黑五等大促銷規模壓力屢創新高,但網易考拉網站從未崩潰。這得益于網易考拉有一個支持彈性擴容的業務架構。當然,這個架構并不是生來就有的,而是隨著網易考拉的成長經過了兩次大版本的迭代形成的,其中大量借鑒了網易互聯網產品研發經驗。
彈性架構迭代:容器的勝利
資源的彈性是云計算的一個基本承諾,尤其是2009年雙11之后,電商團隊對彈性計算的需求愈發清晰,都自覺地探索各自的云架構。2014年底立項的網易考拉,也含著資源彈性的金鑰匙出生——2012年開始構建的網易私有云此時已經上線,支撐著多個網易互聯網業務,網易考拉系統也直接在網易私有云上開發和部署,借助網易私有云計算、網絡、存儲資源的彈性,輔助自動化腳本及配置工具,可以完成基本的資源的管理和控制以及應用的部署。同時,由于跨境電商剛剛興起,初期需要快速驗證商業模式,系統也采用了單體式架構,直接聚焦核心場景進行開發。
自從2015年1月上線后,網易考拉的業務開始進入了高速發展期,第一版電商系統的第一個瓶頸逐漸凸顯,就是迭代速度緩慢,而僅僅提供基礎的資源彈性無法解決問題。具體而言,隨著用戶數量的不斷增加、市場需求的變化、運營體系的完善,網易考拉對功能模塊變更的需求越來越頻繁(例如注冊模塊要從只支持手機登錄到支持微信、微博、QQ、支付寶登錄),不僅僅基礎資源管理越來越復雜,腳本化的應用層的部署和管理也已經遠遠跟不上需求。在原有模式下,每一個小迭代都要申請資源搭建一個測試環境,每當有新的模塊和服務的時候,都需要維護腳本及自動化配置工具,以網易考拉較高水平的研發能力,每天也只能最多實現兩次更新。此外,原有模式附帶的一個問題,就是容易出錯,多次的環境部署無法完全的復現,畢竟再牛的程序員也還是人類。
網易云的容器云平臺、新一代云計算——網易蜂巢的自動化能力解決了網易考拉的燃眉之急。網易蜂巢采用了流行的Docker容器作為整個軟件部署和調度的基本單元,并以結合Google生產集群管理的理念和業界的實踐經驗打造的Kubernetes作為容器管理和編排服務框架。
與傳統IaaS架構不同,容器提供的不僅僅是基礎資源,而是將操作系統,應用運行環境以及代碼打包成一個不可修改的鏡像進行交付,容器的機制可以保證無論在哪里,什么時候運行,都能保持環境的一致性,也就是Docker所宣稱的“Build, Ship, and Run Any App, Anywhere(一次構建,隨處運行)”。
一個服務往往會包含多個組件,因而會封裝成為多個容器,容器之間會有相互的依賴,相互的調用,Kubernetes可以實現服務的編排、自發現、自修復,使得復雜服務的部署變成了一次API調用。
網易蜂巢根據網易考拉的架構,把代碼里面的功能自動封裝到容器當中,并且把容器做成鏡像,再通過編排服務解決不同容器之間的依賴關系,自動完成軟件的安裝、部署和運行,然后把運行起來的軟件放到網易考拉的測試環境、聯調環境和現場環境。另外,網易考拉將代碼管理和持續集成工具同網易蜂巢容器平臺集成起來,整個過程中網易考拉只需要完成編碼和測試,不需要關心申請資源和部署環境,既便捷又減少出錯概率。
網易考拉在使用了網易蜂巢的自動化部署工具實現一鍵式生成環境、觸發測試和發布之后,變更的頻率由每天2次可以增長到每天11次,同時整個軟件產品質量也提升了52%。
經過第一次大迭代之后,網易考拉進入了爆發增長期,然而當用戶量達到百萬級的時候,又一個大瓶頸出現了,就是單體架構遭遇性能的天花板。在業務的爆發期,網易考拉對迭代速度有了更高的要求,同時需要保證系統在高并發訪問下的穩定性和頁面性能。首先,軟件的穩定需要一定的時間,但單體架構牽一發而動全身,頻繁的變更會造成頻繁的業務中斷,比如注冊模塊的內存泄漏就會導致整個系統不可用;其次,軟件對用戶量的承載是有限的,一次訪問的延遲在日活十萬時是幾毫秒,到日活百萬時可能就上升秒級,尤其是到了網易考拉日活用戶已經超過千萬、促銷活動以周為單位的時期,壓力更是巨大。然而,在單擊架構下,網易考拉的瓶頸是全環境每天最多更新112次,單次訪問的延遲達到500毫秒,整個業務的更新率越來越低。同時,在單體架構下做彈性擴容還會造成浪費,比如一些訪問頻率不高的模塊,也需要根據購物車模塊面臨的訪問壓力來準備資源。這個時候,解決的辦法,是借助網易蜂巢對業務的分布化改造能力,再次進行大版本的迭代。
基于Kubernetes提供的服務發現功能,網易蜂巢可以支持網易考拉方便地把注冊、購物車、支付等不同的功能模塊拆分出來,由不同的團隊獨立開發和維護,將原來的單體結構變成微服務結構,單獨進行彈性伸縮,并通過編排建立它們之間的聯系,這就保證了網易考拉團隊可以靈活地實現軟件的快速迭代,以及軟件架構的彈性伸縮。這次迭代為網易考拉帶來了6倍以上的能力提升,每天的更新頻次上限由每天112次上升到每天723次,并發訪問支持由原來的每秒2,600次提升到了每秒16,000次。
為了支撐高性能的應用,網易蜂巢基于原生的Kubernetes的基礎上,對于調度進行了優化,保證應用的快速部署和快速修復,并且利用多年運行IaaS層的調優經驗,對于容器之間的網絡互通和持久化存儲做了優化,保證數據讀寫的高性能及容器之間互相訪問的高性能。
為了保障在不同規模下的一致的用戶體驗,網易考拉還使用了蜂巢推出的全鏈路的性能監控體系。在某次大促之前,線上壓測團隊發現,原本一次加入購物車的延遲僅僅20毫秒,在用戶量爆發之后就超過了1秒鐘,通過該功能回溯整個鏈路的調用過程,發現在整個服務的過程當中,數據庫操作環節的時延占到了整個時延的95%以上,所以,網易考拉能夠快速地優化數據庫的操作邏輯,很好地應對了大促時的爆發訪問。
小結
網易公司創始人兼CEO丁磊曾說,電商的核心在于“商”而不在于“電”,網易考拉也確實圍繞商務開展了靈活的玩法,本次雙11尤其如此,這也讓雙11成為了電商技術團隊的一次大閱兵。然而,網易考拉在網易蜂巢的基礎上實現了業務架構的現代化,獲得了快速迭代和全面彈性伸縮的能力,經受住了618和多次黑五大促的考驗,這讓團隊可以從容地玩好本次洋貨節。事實上,網易考拉的線上壓測團隊已經提前申請資源,按照近期平均交易量的數倍對電商系統進行壓測,并針對一些小瓶頸進行快速的代碼調整,對于實際的挑戰,團隊已經心中有數,所以并不驚慌。
網易考拉認為,容器云之所以能夠帶來超過傳統IaaS的好處,并不僅僅是因為Docker的應用,關鍵還是因為通過網易蜂巢能夠實現整個業務架構的變革。其實,作為網易云的基礎服務,網易蜂巢已經在支持95%以上的網易互聯網產品的運行,這些產品團隊通過網易蜂巢的容器服務和工具鏈,實現了敏捷的生產方式和先進的分布式架構,從而支撐他們的業務像網易考拉一樣快速地成長。