投稿 | 阿里移動電商背后的技術(shù)航母
2015天貓雙11 全球狂歡節(jié)剛剛結(jié)束,912億的全天成交額再次刷新了記錄,其中無線占比68.67%,無線交易額高達626億。
美國時間11月16日,InfoQ英文站邀請到了阿里無線事業(yè)部資深技術(shù)總監(jiān)莊卓然(花名:南天)、阿里無線高級技術(shù)專家徐昭(花名:長恭) 在QCon全球軟件開發(fā)大會舊金山站發(fā)表演講《ALIBABA MOBILE INFRASTRUCTURE AT "CHINA SCALE"》,揭秘手機淘寶這個超級App的技術(shù)架構(gòu)演進,向世界的技術(shù)同行分享中國互聯(lián)網(wǎng)在無線領(lǐng)域的技術(shù)發(fā)展。
莊卓然 擁有10余年的互聯(lián)網(wǎng)研發(fā)和管理經(jīng)驗,是見證并主導(dǎo)阿里業(yè)務(wù)架構(gòu)演進的當(dāng)事人之一。他于2009年加入阿里巴巴,先后在淘寶、天貓負責(zé)營銷、會員、交易、導(dǎo)購等系統(tǒng)的架構(gòu)和研發(fā)工作,經(jīng)歷了淘寶從簡單應(yīng)用到承載數(shù)億用戶的分布式服務(wù)化業(yè)務(wù)平臺的技術(shù)演進過程。同時,他還是2011-2013年雙十一的天貓技術(shù)負責(zé)人,持續(xù)推動雙十一的產(chǎn)品架構(gòu)演進、穩(wěn)定性改造和性能優(yōu)化等研發(fā)工作。2013年轉(zhuǎn)戰(zhàn)移動研發(fā)戰(zhàn)場,帶領(lǐng)團隊專注于手機淘寶和移動基礎(chǔ)平臺的研發(fā)建設(shè)。
徐昭 2012年加入天貓成為技術(shù)核心,前后帶領(lǐng)過天貓賣家、導(dǎo)購詳情等多支技術(shù)團隊,親身打造并見證雙11成為電商行業(yè)的重要節(jié)日?,F(xiàn)任手機淘寶賣家生態(tài)團隊技術(shù)負責(zé)人,專注在無線整體架構(gòu)、大型復(fù)雜移動應(yīng)用構(gòu)建框架及無線技術(shù)開放等領(lǐng)域,同時關(guān)注新技術(shù)和開發(fā)模式在移動互聯(lián)網(wǎng)產(chǎn)品中的演進和落地。
小編在現(xiàn)場為大家?guī)砬f卓然的演講實錄:
我眼里的阿里巴巴
在過去的十年里,阿里逐漸影響和改變了中國人的生活方式。在此之前,大家都只能在線下門店消費,但是現(xiàn)在大家都養(yǎng)成了線上購物的習(xí)慣,并且樂在其中。一方面,到目前為止有超過千萬的賣家選擇在阿里開線上的門店;另外一方面,阿里構(gòu)建了中國***的公共云計算平臺,并躋身世界前三。在中國,阿里云目前服務(wù)了超過30%的網(wǎng)站和超過50%的中小型企業(yè)。
阿里巴巴是一家國際化的公司,從今年的雙十一就可見一斑。除了把各種海外尖貨帶到國內(nèi),我們也把國內(nèi)的優(yōu)質(zhì)商品帶到全世界。成立于2010年的AliExpress,已經(jīng)發(fā)展成為全球***的跨地域交易平臺。除了電子商務(wù),阿里巴巴在全球的業(yè)務(wù)還包括金融、物流、健康、娛樂和云計算。這也是為什么我覺得把阿里看做是中國的Amazon和ebay是不準確的。如同馬云所說“如果把亞馬遜或者京東比作蘋果,那么阿里就應(yīng)該是一顆蘋果樹”。我們把自己看做是一個生態(tài)系統(tǒng),是未來生活的水電煤。我們的目標是創(chuàng)建一個開放、透明、合作的商務(wù)平臺,讓天下沒有難做的生意。
過去兩年,阿里電商平臺中移動成交占比提升了2倍,達到60%以上,這得益于我們在移動和系統(tǒng)架構(gòu)上做了很大的改造。所以,今天主要介紹我們的電子商務(wù)操作系統(tǒng)在移動環(huán)境下面的演進,以及這個架構(gòu)是怎么應(yīng)對PC時代***的挑戰(zhàn)。整體來說會分為四個部分:客戶端的容器化架構(gòu)、移動網(wǎng)絡(luò)管道架構(gòu)、云服務(wù)架構(gòu)和數(shù)據(jù)架構(gòu),由于時間的限制,我們將更多的闡述前三者。
7年前,雙十一在中國還被戲稱為光棍節(jié),但在2009年,阿里巴巴***次決定在這一天舉辦購物促銷,把這個日子變成了世人矚目的購物狂歡節(jié)。
5天前,我和團隊剛剛經(jīng)歷了第7年的雙十一,這一天阿里巴巴的交易額約143億美元(912.17億人民幣)。去年黑色星期五期間的全美總交易額是114億美元(包括了線下和線上所有的電商公司的銷售總額),而雙十一產(chǎn)生的143億美元,僅僅是阿里巴巴電商平臺一天的交易額,整個狂歡覆蓋了200多個國家和地區(qū)。全社會共同參與,把平凡的一天變成全球狂歡的節(jié)日,這就是阿里巴巴生態(tài)的力量、互聯(lián)網(wǎng)的力量。
手機淘寶
手機淘寶作為阿里集團移動端的“航空母艦”,近兩年發(fā)展非常迅猛,用戶量增長接近10倍。在2015雙十一這天,我們的無線端成交占比高達68% 。在高峰期,更有超過4500萬人同時在線,每秒14萬筆下單;今天我們擁有超過3億的月活躍用戶,是全球***的消費類移動APP。而這些,都對我們的系統(tǒng)能力提出巨大挑戰(zhàn)。
下面給大家分享一個典型用戶在手淘的一天。
移動架構(gòu)的反思
阿里巴巴打造的不是一個軟件系統(tǒng)平臺,而是一個電子商務(wù)操作系統(tǒng)。這樣的電商操作系統(tǒng),支撐了過去10年的快速發(fā)展。同樣,我們在移動端也在重新思考如何繼續(xù)升級,如何在手機APP中完成生態(tài)建設(shè)。
移動互聯(lián)網(wǎng)不僅僅是傳統(tǒng)互聯(lián)網(wǎng)的延伸。這個共識一方面來自于手機終端的強大特性對產(chǎn)品和商業(yè)模式產(chǎn)生的“破壞式”影響,另一方面來自于技術(shù)的變化趨勢。
在web的時代,我們說BS架構(gòu),通常也可以理解為是CS架構(gòu)的一種變體。只不過在Client端,我們運行在Browser這樣一個容器環(huán)境中,通過穩(wěn)定的寬帶網(wǎng)絡(luò)接入,通過HTML這樣簡單、透明的協(xié)議與服務(wù)端進行通訊。由于瀏覽器只提供了非常簡單的能力接口。所以,客戶端上只有非常薄的一層,只做渲染的工作。而在這里工程師的主要工作是在集中解決兼容性的問題。 而所有的邏輯計算和我們所有要解決的核心問題,擴展性、伸縮性、穩(wěn)定性、性能等等,其實都集中在后端。
隨著個人計算機計算能力的發(fā)展,前端技術(shù)像Ajax、Angular這樣的技術(shù)如雨后春筍般冒出,我們進入web2.0時代。但這個時候云和端之間的邊界并沒有發(fā)生本質(zhì)變化。
在移動時代,移動設(shè)備的計算能力發(fā)展的越來越迅猛。更重要的是,移動操作系統(tǒng)將移動設(shè)備上百個sensor的能力暴露了給上層的應(yīng)用,使得我們能獲得比在broswer里更強的能力。這樣app側(cè)就能夠做到更多的以前在browser無法做到的事情。所以,互聯(lián)網(wǎng)發(fā)展到今天,到了移動互聯(lián)網(wǎng)的時代,我們真正意義進入到了一個富客戶端時代,之前簡單清晰的云端界限被徹底的模糊。
在這個階段,我們原來談?wù)摰暮芏嗉軜?gòu)問題,擴展性、隔離性、穩(wěn)定性、性能等很多問題就不在僅僅只是服務(wù)端的問題,客戶端也需要開始從架構(gòu)的維度來思考這些問題。同時云端之間通訊的簡單的協(xié)議,穩(wěn)定的通道,也在發(fā)生了很多的變化。移動網(wǎng)絡(luò)隨時隨地需要接入的特點,也對我們的基礎(chǔ)架構(gòu)提出了更高的要求。接下來我們就展開看一下這里的區(qū)別。
#p#
Rethinking Mobile Architecture-夾心面包的尷尬
但這個問題的解決之道并不像服務(wù)端。在這個過程中我們?nèi)娣此?,大家看到這張圖里面我們用了一個形象的比喻來體現(xiàn)傳統(tǒng)的服務(wù)端軟件。最下層是操作系統(tǒng),通常是linux,最上層是我們的業(yè)務(wù)功能和服務(wù)。在服務(wù)端架構(gòu),我們很習(xí)慣用增加一個架構(gòu)層次的方式來解決問題。例如緩存層、數(shù)據(jù)訪問層等。我們在架構(gòu)上按照自己的意愿去搭建不同層次的銜接環(huán)節(jié),使架構(gòu)具有足夠的靈活性和擴展性。即使堆成這個樣子,它依舊是非常合理的。
而移動app架構(gòu)則是一個完全不同的場景。我們必須回到遠古的CS架構(gòu)時代,一個喪失web靈活性的時代,因為所有功能都必須集成到一個APP里面。
我稱之為“看上去簡單,但實際上卻非常尷尬的夾心層“ 。
所以,我們需要有一個優(yōu)雅的客戶端架構(gòu)設(shè)計,讓我們能夠重拾以前web互聯(lián)時代的能力。在這種背景下,我們構(gòu)建了手機淘寶這樣一個能夠支撐電商生態(tài)系統(tǒng)的客戶端架構(gòu)。概要來說,設(shè)計理念可以為總結(jié)如下幾點:
***,設(shè)計時的隔離性。這個架構(gòu)必須具備設(shè)計時的隔離性,這樣我們在開發(fā)、打包時才能夠***化并發(fā)能力;
第二,運行時的隔離性。這個隔離性作用在客戶端,主旨在于提高端側(cè)可靠性。我們必須確保單個模塊的故障影響范圍內(nèi)斂到自己內(nèi)部,不會引發(fā)整體crash。
第三,動態(tài)渲染能力和部署能力。這個架構(gòu)必須具備一定程度上的運行期調(diào)整和動態(tài)部署能力。在這個過程中,我們構(gòu)建了一個速度更快的類HTML5渲染引擎;同時,我們也實現(xiàn)了一個私有的容器,支持模塊的動態(tài)加載和更新。坐擁這兩大利器,線上問題的修復(fù)和新模塊的自動更新都脫離了版本發(fā)布的依賴。不幸的是,由于AppStore和GooglePlay尤其是前者較封閉和嚴苛的審核制度,我們的動態(tài)部署能力常常無法施展,盡管在中國的安卓應(yīng)用市場上已得到充分的使用。
第四,***力度的兼容性保證,以確保我們在系統(tǒng)版本升級過程中不出現(xiàn)整體的陣痛。
整體的架構(gòu)反思過程中,我們重新定義了客戶端和服務(wù)端(云端)的邊界。一旦確立這樣一個合理的架構(gòu),就能保證我們的移動APP在相當(dāng)時間內(nèi),持續(xù)高效的支撐業(yè)務(wù)發(fā)展。
Challenge in mobile architecture -移動架構(gòu)的挑戰(zhàn)
另一個挑戰(zhàn)來自于不穩(wěn)定的移動網(wǎng)絡(luò)環(huán)境。PC時代,我們訪問網(wǎng)站的接入條件是相對恒定的,所以在開發(fā)時很少考慮網(wǎng)絡(luò)對于用戶體驗的影響。
但是移動APP則不然,尤其是在中國,基礎(chǔ)的移動網(wǎng)絡(luò)環(huán)境并不好,而且我們有很多用戶的訪問是發(fā)生在地鐵、公交車這樣的環(huán)境下,移動基站的頻繁切換進一步增加了網(wǎng)絡(luò)的不穩(wěn)定。從手機淘寶的數(shù)據(jù)可以看出,我們每天活躍用戶中有15%來自于類似2G這樣的弱網(wǎng)環(huán)境。如果端到云的連接不穩(wěn)定,有高延時,那么所有的用戶體驗都無從談起。
基礎(chǔ)網(wǎng)絡(luò)的效率就像一輛列車,時延是火車的速度(啟動時間),而帶寬就像火車的車廂裝載量,整個傳輸?shù)奈锢礞溌肪拖窕疖嚨蔫F軌。我們面對的移動網(wǎng)絡(luò)條件非常復(fù)雜,既有高鐵這樣先進的傳輸渠道,也有不少老舊緩慢的綠皮車還在服務(wù)很多用戶。我們的目標很簡單,就是想讓所有用戶都能在手機淘寶獲得流暢的體驗,不論你坐的是“高鐵”還是“綠皮車”。
下面這張圖,能夠讓大家更加直觀的了解中國的移動網(wǎng)絡(luò)環(huán)境。它描述了從用戶到IDC的端到端的路由情況,不僅數(shù)據(jù)傳輸耗時長,而且丟包率高,同時安全性也相當(dāng)糟糕,DNS劫持、內(nèi)容劫持在中國就是家常便飯。
因此,我們在改善網(wǎng)絡(luò)通道上做了很多的事情,探索突破運營商基礎(chǔ)網(wǎng)絡(luò)的局限性,力爭為用戶創(chuàng)造***的購物體驗:
• 減少網(wǎng)絡(luò)交互:使用更高效的通訊傳輸技術(shù),提高了連接復(fù)用,減少roundtrip次數(shù);
• 降低流量:通過更高效的壓縮技術(shù)和同步技術(shù)減少了網(wǎng)絡(luò)的流量;
• 更安全:在不降低體驗的基礎(chǔ)上通過對tls1.3的優(yōu)化提高數(shù)據(jù)的安全性;
• 更穩(wěn)定:更靈活的調(diào)度系統(tǒng)實現(xiàn)異地多活,縮短故障切換的時間。
#p#
阿里的無線技術(shù)實踐
以上整體介紹了阿里對移動時代架構(gòu)重新思考的過程。基于這些思考,我們對架構(gòu)演進的方向提出了以下幾個核心要求:
隔離性:傳統(tǒng)的移動App的開發(fā)和集成方式并不適合企業(yè)級開發(fā)。一個具備很好隔離性的模塊化架構(gòu)是大規(guī)模并行開發(fā)的基礎(chǔ)。
動態(tài)性:互聯(lián)網(wǎng)追求唯快不破,從架構(gòu)上將我們希望能夠在富客戶端時代同樣也能保留web的輕盈和靈活。動態(tài)性是很重要的前提。
***的網(wǎng)絡(luò)體驗:全雙工的接入平臺保障了接入層的伸縮性和穩(wěn)定體驗,不管用戶在何種網(wǎng)絡(luò)環(huán)境下都能擁有順暢的體驗。
相比PC時代,移動開發(fā)非常復(fù)雜。用戶既想要一個驚艷的體驗,又期望安裝包盡可能小。那么開發(fā)者們就既要具備如web時代的輕量級開發(fā)部署能力,又要能獲取到native的能力、性能和擴展性。
平臺級產(chǎn)品的并行開發(fā)和獨立部署架構(gòu)
一個好的架構(gòu)需要支持并行的開發(fā)、獨立的部署,這樣才能夠滿足靈活多變的業(yè)務(wù)增長。同時,發(fā)揮航母級的平臺優(yōu)勢,支撐更多元的客戶端應(yīng)用,產(chǎn)生規(guī)模效應(yīng),拓展商業(yè)邊界。所以,我們的解決方案是在native平臺(準確來說是Android)上構(gòu)建一個隔離性的架構(gòu),在此之上,功能盡可能的切割的越小越簡單越好;同時,在不損失native性能和能力的前提下,我們也引入了更多的web特性到移動開發(fā)中來。
我們的客戶端容器架構(gòu)設(shè)計的原則是“everything is a component”,在Android平臺上,基于我們的隔離化容器架構(gòu)設(shè)計,我們既可以提高在集成期的多團隊協(xié)作效率,又收獲了在運行時的靈活部署。通過把龐大的工程拆分成一系列的獨立服務(wù),以及我們具備的容器自升級能力,就不需要同時編譯和集成所有的功能模塊。一旦一個模塊完成了測試,我們就可以按需對他進行升級。另外,我們的APP還具備線上可熱修復(fù)的能力。
跨平臺的思考引發(fā)了敏捷性(WEEX)
另一個殘酷的事實是,我們所有的功能需要在Android、iOS和H5上重復(fù)實現(xiàn)。當(dāng)我們面對客戶端包大小,方法數(shù)的限制的同時又需要支持200+的功能升級、多平臺持續(xù)交付、覆蓋度、容錯、熱修復(fù)等等龐雜的事情 。所以在設(shè)備和OS的限制下做伸縮,我們需要一個超輕量靈活的解決方案,能夠基于某個高度重用的東西上進行低成本的并行開發(fā)、快速發(fā)布。
Weex就是我們想要的殺手锏,開發(fā)者可以通過一套跨平臺的代碼構(gòu)建iOS和Android的APP。在構(gòu)建應(yīng)用UI的時候,開發(fā)者可以使用我們的基礎(chǔ)庫,這個庫抽象了不同平臺之間的差異性。開發(fā)者面對的DSL是基于一個叫做Vue.js的輕量級js庫,相對于React的JSX語法,這是一個更加面向組件的、腳本樣式分離的語言,對于開發(fā)者來說更加友好,更利于開發(fā)者和設(shè)計師之間的協(xié)作。JSBundle可以所見即所得的進行及時更新,V-DOM的抽象層提供了跨平臺渲染能力,同時也具備native組件優(yōu)雅降級的能力。
這套方案跟業(yè)界相似方案的效果對比如何呢? 首先我們選擇了一個標準場景:渲染一個定制化的圖片列表,展示200+的頁面。
下圖是我們實際測量的數(shù)據(jù)情況,包含渲染時間、內(nèi)存消耗、CPU消耗和幀率。我們并不是想通過這個圖來強調(diào)我們比所有其他方案都好,因為場景不同所有效果也會有所不同,我們想說的是能通過這么一個方案取得性能和動態(tài)性的雙豐收。
#p#
靈活高效、安全穩(wěn)定的網(wǎng)絡(luò)調(diào)度服務(wù)(ACCS)
接下來,我們需要解決的是端到端的伸縮性。隨著手機淘寶業(yè)務(wù)的擴張,我們的活躍用戶也在不斷的增長,為了提供更好的端到端的能力,我們必須提高連接服務(wù)的質(zhì)量。這得益于在以下四個方面的努力:
***, 作為服務(wù)消費方,我們不能決定網(wǎng)絡(luò)的延遲和帶寬,但是我們可以努力減少round-trips。
第二, 我們建立了httpdns服務(wù)并緩存在本地,減少客戶端DSN檢索的時間損耗;而且基于TLS1.3進行了改造,在保障鏈路安全的情況下性能得到的較大提升。
第三, 阿里的后端系統(tǒng)采用多數(shù)據(jù)中心多活的架構(gòu)部署方式,所以無線網(wǎng)關(guān)需要具備正確的、靈活可變的用戶調(diào)度能力。
第四, 我們把網(wǎng)絡(luò)能力整體封裝成了標準的SDK,一方面以確保我們的APP群能夠一起享受整個優(yōu)化的收益,另一方面也確保了H5頁面能夠使用到Native通道的能力。
在闡述完客戶端架構(gòu)和網(wǎng)絡(luò)架構(gòu)之后,我們再次把目光聚焦到后端服務(wù)上。2010年左右,我們開始考慮多數(shù)據(jù)中心的事。一方面,我們做到了服務(wù)和數(shù)據(jù)的水平擴展。隨著業(yè)務(wù)規(guī)模的不停增長,我們的應(yīng)用伸縮規(guī)模也越來越龐大,單點不穩(wěn)定性帶來的風(fēng)險也成倍放大。另一方面,部署的應(yīng)用越來越多,覆蓋電商、物流、大數(shù)據(jù)等等,而一個城市能夠提供給我們的空間畢竟是有限的。更加致命的是,如果單機房發(fā)生故障,這對于電商來說基本上不可接受的,所以我們在2011年開始進入雙活乃至多活的改造。
阿里無線技術(shù)的開源計劃
架構(gòu)是非常值得分享和討論的,好的技術(shù)架構(gòu)能夠持續(xù)支持偉大的商業(yè)夢想。所以今天阿里具備的無線能力,很多都將會通過開源或云服務(wù)和外界共享,希望回饋整個社區(qū)。同時也希望我們的技術(shù)思考能夠給大家?guī)韱l(fā)。大家如果感興趣,歡迎持續(xù)關(guān)注我們的github地址。
移動時代只是DT時代的過渡
技術(shù)發(fā)展將從面向生產(chǎn)效率的IT時代進入面向智能的DT時代,數(shù)據(jù)最終將成為水電煤一樣的基礎(chǔ)設(shè)施 。在這樣一個背景下,我認為移動時代只是一個過渡階段,這個階段我們的所有工作其實都專注在三件事上:
首先,各種設(shè)備最終都會具備聯(lián)網(wǎng)的能力 ,我們的基礎(chǔ)設(shè)施要做好準備。這就是為什么我們會做ACCS這樣的億級無線云平臺,打造強大的無線基礎(chǔ)設(shè)施,迎接萬物互聯(lián)時代的到來。其次,云和端的界限勢必會經(jīng)歷一個越來越模糊再到重新清晰的過程。過去w3c和瀏覽器廠商付出了大量的努力,傳統(tǒng)互聯(lián)網(wǎng)是一個開放分享透明的生態(tài)?,F(xiàn)有的移動終端平臺其實并沒有為超級App做過任何準備,反而很多時候限制了超級App的發(fā)展。這個過程我們也很愿意參與進來,讓移動互聯(lián)網(wǎng)也能夠更加開放分享和透明。
***,終端不應(yīng)該僅僅是被動的數(shù)據(jù)消費,而更重要的是成為更多維度的數(shù)據(jù)生產(chǎn)者。
鏈接一切,云端一體,分享一切,讓我們一起努力迎接一個更佳智能的未來。