大麥網(wǎng)架構(gòu)入淘史

大麥網(wǎng)票務(wù)系統(tǒng)是它得以在市場立足的基石,由于發(fā)展多年,系統(tǒng)中已沉淀了很多業(yè)務(wù)邏輯。
但早期的大麥網(wǎng)其實(shí)是單體系統(tǒng),內(nèi)部雖然有一些模塊拆分,但整體看還沒有滿足服務(wù)化拆分的效果。所以單體系統(tǒng)所需要面對的問題都會(huì)遇到,如維護(hù)性差、系統(tǒng)伸縮性差、特別是圍繞于票務(wù)庫存的查詢與扣減功能是整個(gè)系統(tǒng)的瓶頸。
好的系統(tǒng)不止需要跟得上業(yè)務(wù)迭代,還需要跟得上技術(shù)的發(fā)展節(jié)奏,只有這樣才不會(huì)隨著時(shí)間發(fā)展慢慢惡化。
隨著阿里對大麥的收購,大麥原有的交易平臺(tái)開始入淘,商品與交易底層全部是基于阿里共享電商平臺(tái)實(shí)現(xiàn),入淘之前的架構(gòu)情況可以看:從大麥網(wǎng)架構(gòu)學(xué)到的東西。
阿里電商平臺(tái)主要包括用戶、商品、營銷、交易、支付等全鏈路的交易能力,經(jīng)歷過高并發(fā)、高流量的真實(shí)場景驗(yàn)證,同時(shí)對于不同業(yè)務(wù)的多品類、多場景也有很好的支持。
在原有大麥網(wǎng)架構(gòu)到阿里共享電商平臺(tái)遷移過程中存在很多挑戰(zhàn)。比如既要了解共享電商交易平臺(tái)的模型,還需要將大麥網(wǎng)業(yè)務(wù)進(jìn)行匹配與映射,這塊梳理需要消耗非常大的人力,但長遠(yuǎn)看,基于阿里共享電商平臺(tái)可以享受很好的穩(wěn)定性與高性能保障,同時(shí)和淘系商品聯(lián)動(dòng),對未來帶來了很大的想象空間。
整個(gè)架構(gòu)入淘過程并不是靜止的,在入淘的同時(shí)還需要支持業(yè)務(wù)的迭代開發(fā)。這個(gè)過程的主要做法是,對于經(jīng)常變化的、行業(yè)性較強(qiáng)的業(yè)務(wù)訴求,大麥傾向于自建體系承接;將變化可能性較小的地方,可以盡量復(fù)用集團(tuán)技術(shù)體系。
確定了這個(gè)迭代融合節(jié)奏,就需要考慮哪些是需要定制化的。這就需要看整體行業(yè)發(fā)展階段和特點(diǎn)了。
隨著私域流量的興起,很多場館都可以通過衍生自己的內(nèi)容獲取自己的用戶,整個(gè)票務(wù)市場正在向著這個(gè)方向發(fā)展,未來勢必有很多ToB的定制化需求。
怎么解決呢?需要在體系化迭代過程中將相關(guān)因素考慮進(jìn)去,可以通過開放平臺(tái)方式部分解決定制化問題。同時(shí)可以借助低代碼平臺(tái)方向,提供工具解決定制化需求。
大麥網(wǎng)的票務(wù)系統(tǒng)在承接最熱活動(dòng)時(shí)商詳頁面秒級(jí)峰值可以達(dá)到大促級(jí)別的量級(jí)。因此對大麥網(wǎng)架構(gòu)來說,售票鏈路需要可以承接高流量同時(shí)具備高性能。
大麥網(wǎng)的選票、售賣流程是基于阿里共享電商中臺(tái)做的,在票務(wù)售賣場景下有兩個(gè)非常重要的環(huán)節(jié)需要具備高性能和一致性:選座和庫存。
選座有三個(gè)系統(tǒng)問題需要解決,即高并發(fā)、大數(shù)據(jù)量、高沖突。
對于高并發(fā),大麥網(wǎng)采用并發(fā)轉(zhuǎn)串行的方式。比如針對于每個(gè)秒級(jí)數(shù)據(jù)生成相應(yīng)快照,將快照存儲(chǔ)在緩存中,請求訪問時(shí)按照秒級(jí)時(shí)間戳映射到相對應(yīng)的時(shí)間片緩存上。這樣可以減少高并發(fā)量級(jí),在滿足了座位一致性的同時(shí)保證了系統(tǒng)可用性。對于快照緩存的生成,可以控制到秒級(jí)以下的分片,依參數(shù)靈活控制。
對于大數(shù)據(jù)量,采用兩級(jí)壓縮方式減小數(shù)據(jù)量大小。第一級(jí)壓縮采用自研算法將座位相關(guān)的數(shù)據(jù)進(jìn)行自定義壓縮,類似于座位ID之類的數(shù)據(jù)可以壓縮成偏移量的形式,會(huì)出現(xiàn)很多類似于“012”之類的重復(fù)字符串,然后采用類似zip、7z之類的通用壓縮算法對這類重復(fù)字符串進(jìn)行壓縮,這樣可以達(dá)到很好的壓縮比。通過大量測試發(fā)現(xiàn)客戶端的解壓耗時(shí)可以忽略不計(jì),大大提升了用戶體驗(yàn)。
對于庫存鏈路,做了圍繞于性能提升和穩(wěn)定性保障的工作。首先進(jìn)行了核心鏈路與非核心鏈路的解耦,進(jìn)行庫存讀取和庫存扣減模塊的分離,這也是非常多高并發(fā)電商場景的解決方案。同時(shí)對于核心鏈路上的弱依賴進(jìn)行了降級(jí)管理,這樣可以提高核心鏈路的穩(wěn)定性。
針對于庫存場景還存在一個(gè)問題,就是數(shù)據(jù)熱點(diǎn)問題,采用了熱點(diǎn)離散算法,根據(jù)業(yè)務(wù)數(shù)據(jù)將相關(guān)的庫存記錄分散到多個(gè)庫的多個(gè)表中,分散單庫的行鎖壓力。同時(shí)在某個(gè)數(shù)據(jù)庫存扣減達(dá)到一定量級(jí)觸發(fā)閾值時(shí),會(huì)將額外的并發(fā)扣減請求降級(jí)為串行扣減請求,保障數(shù)據(jù)庫的高穩(wěn)定性。
因?yàn)槠眲?wù)庫存是對物理世界作為的映射,具有比較大的稀缺性,一旦出現(xiàn)不一致問題,在現(xiàn)實(shí)世界中就很難解決。所以采用了大事務(wù)拆分及實(shí)時(shí)對賬方式保證數(shù)據(jù)庫操作的一致性,防止任何數(shù)量的不一致情況發(fā)生。
由于日常流量和大促流量差異較大,所以需要具備流量感知并實(shí)時(shí)擴(kuò)容的能力,所以通過流量數(shù)據(jù)、IP熱度數(shù)據(jù)等對大促項(xiàng)目進(jìn)行預(yù)測分析其可能達(dá)到的量級(jí),針對于量級(jí)給出相應(yīng)的資源配置,最終決定是否進(jìn)行擴(kuò)容或保持現(xiàn)狀。
由于大部分故障是由于變更引起的,而變更每天都在發(fā)生,如何持續(xù)保障系統(tǒng)線上穩(wěn)定呢?
對于可能產(chǎn)生大事故的事情,做了安全生產(chǎn)紅線。線下對紅線相關(guān)修改進(jìn)線cr及測試度覆蓋,線上對紅線相關(guān)功能進(jìn)行實(shí)時(shí)巡檢。同時(shí)組織定期全鏈路壓測、故障演練以持續(xù)保障線上鏈路穩(wěn)定可靠。
在運(yùn)維層面將所有熱門有關(guān)的預(yù)案執(zhí)行完全自動(dòng)化,防止忘記執(zhí)行預(yù)案而產(chǎn)生穩(wěn)定性問題。對于資源利用、動(dòng)態(tài)擴(kuò)縮容來說,自動(dòng)化是最好的方式。但挑戰(zhàn)點(diǎn)在于能否準(zhǔn)確預(yù)測、以及快速擴(kuò)容,這些都是需要不斷探索的。
隨著大麥網(wǎng)架構(gòu)的不斷迭代,在解決了基礎(chǔ)技術(shù)問題及架構(gòu)問題后,大麥也買入了中臺(tái)架構(gòu)階段。
大麥票務(wù)中臺(tái)主要聚焦于演出票和電影票,在票務(wù)視角看,大麥需要支持多個(gè)票務(wù)類目,但在用戶視角看,需要提供一致的最佳體驗(yàn)。對于中臺(tái)來說肯定先建設(shè)通用能力,來支持好大部分類目,會(huì)導(dǎo)致一些類目差異點(diǎn)較多,這也是很多中臺(tái)類系統(tǒng)普遍面對的問題。
一般的解決方案依然是優(yōu)先服務(wù)于通用品類,個(gè)別一些具備足夠多的個(gè)性化特點(diǎn),其實(shí)我們不需要強(qiáng)求必須融入通用體系下,或改變通用體系去迎合,盡可能降低造輪子成本即可。
綜上來說,做好一個(gè)領(lǐng)域的架構(gòu),不僅需要在技術(shù)上有很好的積累,還需要從管理到業(yè)務(wù)都有非常好的思考。
技術(shù)上需要有架構(gòu)能力、中臺(tái)建設(shè)能力、業(yè)務(wù)建模能力、架構(gòu)演進(jìn)設(shè)計(jì)能力,可以解決高并發(fā)、分布式等技術(shù)難題。
最好的了解業(yè)務(wù)的一種方式就是解決不斷出現(xiàn)的問題,并且在解決問題過程中深挖問題本質(zhì),這樣可以促使你快速了解業(yè)務(wù)。
技術(shù)團(tuán)隊(duì)需要對于業(yè)務(wù)和行業(yè)有深刻的理解,這樣設(shè)計(jì)出來的系統(tǒng)才可以適應(yīng)業(yè)務(wù)和行業(yè)的變化,并且在方案落地過程中,為未來業(yè)務(wù)的發(fā)展空間留有余地。每個(gè)研發(fā)同學(xué)都需要思考幾年后系統(tǒng)會(huì)變成什么樣,促使同學(xué)共同思考。
