世纪联华的 Serverless 之路
作者 | 朱鵬(旻蒼)
來源 | Serverless 公眾號(hào)
一、世紀(jì)聯(lián)華超市簡介
1. 公司簡介
杭州聯(lián)華華商集團(tuán)有限公司成立于 2002 年 7 月,主要業(yè)務(wù)涵蓋購物中心、大賣場、超市、便利店等零售業(yè)態(tài),G20 杭州峰會(huì)食材總倉建設(shè)、保障單位,是浙江省商貿(mào)龍頭企業(yè)。
集團(tuán) 200 多家門店中,主要涉及 POS 機(jī)交易、聯(lián)華超市、CITY LIFE、天華世紀(jì)城等,除此之外還有線上精選 APP,提供線上購買、送貨到家服務(wù),還會(huì)不定時(shí)推出優(yōu)惠券領(lǐng)取、限時(shí)秒殺等活動(dòng)。
2. 世紀(jì)聯(lián)華技術(shù)架構(gòu)演進(jìn)方案
- 2002 年,公司成立后一直使用物理單機(jī)架構(gòu)。
- 2014 年,因?yàn)殡p十二事件,導(dǎo)致公司不得不做出改變,將業(yè)務(wù)遷移到中央機(jī)房。
- 2018 年,隨著國內(nèi)公共云的發(fā)展,開始部署全面上云。
- 2019 年 6 月,公共云上出現(xiàn)數(shù)據(jù)庫壓力過大,世紀(jì)聯(lián)華由此開始探索新架構(gòu)方式。
- 到 2019 年 11 月,僅用大概 4 個(gè)月時(shí)間,世紀(jì)聯(lián)華就把一部分業(yè)務(wù)搬到了阿里云的 Serverless 上,包括 API 網(wǎng)關(guān)、函數(shù)計(jì)算、表格存儲(chǔ),在 雙11 期間,這三款產(chǎn)品的應(yīng)用表現(xiàn)非常優(yōu)異,使得世紀(jì)聯(lián)華決定 All in Serverless。
- 截至 2020 年 11 月,All in Serverless 使得整個(gè)公司的開發(fā)效率得到極大提高,成本大幅節(jié)省。
二、技術(shù)架構(gòu)演進(jìn)
1. 物理單機(jī)架構(gòu)
2014 年及以前物理單機(jī)架構(gòu)下,一個(gè)超市通常只有 2~20 臺(tái) POS 機(jī),最多 20 個(gè)客戶端,架構(gòu)非常簡潔,只要在一臺(tái)物理機(jī)上部署好本地?cái)?shù)據(jù)庫,交易系統(tǒng)、會(huì)員系統(tǒng)、商品管理全都放在一個(gè)進(jìn)程上就足夠。如果要做相關(guān)操作,比如調(diào)取某個(gè)交易、給用戶注冊(cè)相關(guān)信息、調(diào)整商品價(jià)格,只要通過 Admin 客戶端連接進(jìn)程再做相應(yīng)改動(dòng)即可。通常來說,一個(gè)大型超市只要買一臺(tái)性能足夠強(qiáng)的機(jī)器,就可以服務(wù)好幾十個(gè) POS 機(jī)發(fā)起的請(qǐng)求。
單機(jī)架構(gòu)優(yōu)劣勢(shì)比較:
1)優(yōu)勢(shì)
- 架構(gòu)簡潔;
- 不受外界網(wǎng)絡(luò)環(huán)境的影響;
- POS 機(jī)分散后單機(jī)沖擊相對(duì)小。
2)劣勢(shì)
- 數(shù)據(jù)遷移查詢匯總困難
2014 年問題逐漸暴露,比如在杭州的總部,想查詢湖州某個(gè)門店的實(shí)時(shí)交易量,基本不可能,跨網(wǎng)絡(luò)查詢和數(shù)據(jù)量大是難以解決的問題。
- 數(shù)據(jù)分發(fā)靠定期同步
比如客戶在 a 門店注冊(cè)的會(huì)員卡,很難去 b 門店消費(fèi),只能靠定期同步,把 a 門店的數(shù)據(jù)定期拷貝到 b 門店去,這其中存在很多問題,對(duì)消費(fèi)者來說也非常麻煩。
- 故障時(shí)很難第一時(shí)間維護(hù)修復(fù)
我們不可能每個(gè)門店都派一名專業(yè)的維護(hù)人員,如果機(jī)器出了故障,只能打電話給總部的工程師,這種情況就很難做到第一時(shí)間趕到現(xiàn)場修復(fù),這是很嚴(yán)重的問題。
- 單點(diǎn)故障容災(zāi)困難
因?yàn)樗械臉I(yè)務(wù)都包含在一個(gè)進(jìn)程里面,如果進(jìn)程出現(xiàn)異常, 也沒辦法把業(yè)務(wù)交給另一個(gè)進(jìn)程處理。
- 升級(jí)困難
我們?cè)谡憬∮猩习偌议T店,每一次升級(jí)都需要專業(yè)的運(yùn)維人員把新代碼包部署到不同的機(jī)器上。
- 新業(yè)務(wù)部署在單機(jī)上沖擊巨大
舉個(gè)案例,2014 年雙十二,支付寶推出了使用支付寶錢包付款可以打 5 折的線下優(yōu)惠活動(dòng),當(dāng)時(shí)全國線下近百個(gè)品牌、2 萬多家門店都參與其中,世紀(jì)聯(lián)華也有參與,但是當(dāng)天卻出現(xiàn)了大量消費(fèi)者無法結(jié)賬在超市排起長隊(duì)的情況。
因?yàn)槲覀儎倓傄胍粋€(gè)新的支付方式,所有的業(yè)務(wù)都在單個(gè)進(jìn)程上,耦合度過高,當(dāng)時(shí)大家集中結(jié)賬訪問量過大,導(dǎo)致支付出現(xiàn)問題,整個(gè)單機(jī)訪問無法進(jìn)行下去,其他的業(yè)務(wù)模塊也因此受到影響,最后只能重啟機(jī)器。因?yàn)檫@個(gè)問題,世紀(jì)聯(lián)華開始嘗試做出新的改變。
2. 中央機(jī)房部署架構(gòu)
單機(jī)最大問題是如果門店出現(xiàn)問題,相關(guān)工程師無法第一時(shí)間趕到現(xiàn)場,尤其是多個(gè)機(jī)器、多個(gè)門店同時(shí)出現(xiàn)問題的情況,這時(shí)最好的辦法是把所有機(jī)器集中在一起,做集中的數(shù)據(jù)修復(fù)、運(yùn)維管理和軟件升級(jí)。
2014 年到 2018 年期間,世紀(jì)聯(lián)華逐漸把單機(jī)架構(gòu)整個(gè)遷移到了中央機(jī)房。中央機(jī)房是自建的,做法就是把數(shù)據(jù)庫、交易系統(tǒng)、會(huì)員系統(tǒng)、商品管理全部拆分到多個(gè)進(jìn)程當(dāng)中。這樣一來,如果會(huì)員系統(tǒng)掛掉了還可以暫時(shí)匿名購買;商品管理臨時(shí)出問題但只要交易系統(tǒng)沒問題就還可以頂上。耦合一旦降低,對(duì)于整個(gè)門店的業(yè)務(wù)保障來說,有了很大的提升。
在這里我們做了一個(gè) node 節(jié)點(diǎn),node 節(jié)點(diǎn)連接中央機(jī)房的數(shù)據(jù)庫以及各個(gè)系統(tǒng)模塊。如果出現(xiàn)問題,只需要在中央機(jī)房做相關(guān)修復(fù)即可。除此以外,如果需要調(diào)整商品價(jià)格,也只需在中央機(jī)房上直接設(shè)置,然后同步到所有門店的 node 節(jié)點(diǎn)上就可以了。
中央機(jī)房部署架構(gòu)的改進(jìn)和不足:
1)改進(jìn)
- 問題可集中維護(hù)處理;
- 商品價(jià)格調(diào)整下發(fā)全部走網(wǎng)絡(luò);
- 數(shù)據(jù)可集中查詢統(tǒng)計(jì)匯總。
2)不足
- 管理員需要掌控機(jī)器細(xì)節(jié);
- 宕機(jī)斷網(wǎng)事件調(diào)查困難應(yīng)急方案薄弱;
- 硬件升級(jí)成本高;
- 需要提前采購大量硬件備災(zāi);
- 軟件、系統(tǒng)批量部署成本高;
- 資源預(yù)算困難。
3. 全面上云
2016 年以后,隨著國內(nèi)公共云的迅速發(fā)展,全面上云勢(shì)不可擋。在此期間,阿里云在技術(shù)上取得了許多突破與提升,例如 ECS 的對(duì)外發(fā)布。世紀(jì)聯(lián)華在 2018~2019 年期間,把自建機(jī)房中的各個(gè)系統(tǒng)模塊逐漸遷移到了公有云,整體架構(gòu)沒有太大改變,因此遷移工作相對(duì)順利。
全面上云的改進(jìn)和不足:
?
1)改進(jìn)
主要有以下三個(gè)方面:
- 不再需要關(guān)心網(wǎng)絡(luò)、操作系統(tǒng)的硬件細(xì)節(jié)
比如阿里云的 ECS 會(huì)提前做調(diào)度和預(yù)警,把用戶數(shù)據(jù)轉(zhuǎn)移并做多份數(shù)據(jù)的備災(zāi),防止磁盤壞掉的情況發(fā)生。
- 硬件升級(jí)快捷簡單
比如用戶使用的是 4 核的機(jī)器,當(dāng)發(fā)現(xiàn)業(yè)務(wù)增長迅速需要做硬件升級(jí)時(shí),就只需要做一個(gè)鏡像。比如在夜間做一個(gè)磁盤快照,重新申請(qǐng)一臺(tái)新機(jī)器,然后把快照恢復(fù)上去,就可以完成一鍵遷移。對(duì)世紀(jì)聯(lián)華來說,這是非常快捷的方式,對(duì)開發(fā)者來說也是比較好的體驗(yàn)。
- 機(jī)器擴(kuò)容時(shí)間大幅縮短
上面提到的是單機(jī)擴(kuò)容,比如 4 核升到 8 核、16G 升到 32G 的內(nèi)存。除此之外還有橫向的擴(kuò)容,例如用戶交易系統(tǒng)的 API 接口,隨著業(yè)務(wù)的發(fā)展需要由原來的 2 臺(tái)機(jī)器擴(kuò)到 8 臺(tái)機(jī)器,這種情況下用戶只需去申請(qǐng)機(jī)器,然后將鏡像擴(kuò)展到不同的機(jī)器上即可。
2)不足
主要有以下六個(gè)方面:
- 資源預(yù)算困難
由于無法預(yù)估業(yè)務(wù)遇到大促等活動(dòng)時(shí)所能達(dá)到的體量,因此無法準(zhǔn)確計(jì)算出所需硬件的數(shù)量。
- 水平擴(kuò)展
水平擴(kuò)展對(duì)研發(fā)有較高的要求。比如數(shù)據(jù)是否要做到無狀態(tài),無狀態(tài)的話水平擴(kuò)展會(huì)比較容易,而如果是有狀態(tài),數(shù)據(jù)可能就需要做緩存,這就會(huì)涉及到數(shù)據(jù)庫相關(guān)的問題,例如數(shù)據(jù)過期、一致性等。如果對(duì)這些了解不夠透徹,做水平擴(kuò)展就會(huì)比較困難。
- 水位監(jiān)控
許多開發(fā)者在水位監(jiān)控上處理得并不完善,如果將各個(gè)業(yè)務(wù)系統(tǒng)混在一臺(tái)機(jī)器上,當(dāng)遇到機(jī)器水位較高,想要快速排查問題并及時(shí)進(jìn)行流控、拆分、臨時(shí)修復(fù)等就顯得尤為困難。
- 財(cái)務(wù)預(yù)算困難
與資源預(yù)算困難類似。
- 硬件升級(jí)成本高
要做到用戶無感無損升級(jí),可能會(huì)涉及到連接上的處理與數(shù)據(jù)庫一致性的問題。如果多個(gè)模塊需要同時(shí)升級(jí),還要注意數(shù)據(jù)結(jié)構(gòu)的兼容問題。
- 數(shù)據(jù)庫單點(diǎn)故障
許多廠家將數(shù)據(jù)全部放在一個(gè)數(shù)據(jù)庫中,如果處理不妥當(dāng)可能會(huì)造成單點(diǎn)故障。這就要做數(shù)據(jù)拆分,粗拆的話,需要注意事務(wù)和鎖相關(guān)的問題,效率會(huì)大打折扣;細(xì)拆的話,做查詢和排序時(shí)就會(huì)比較困難,給業(yè)務(wù)實(shí)現(xiàn)造成一定麻煩。
4. Serverless 的探索和嘗試
1)線上不可控業(yè)務(wù)上的預(yù)防
2019 年年中大促時(shí),由于線上業(yè)務(wù)用戶訪問不可控,數(shù)據(jù)量過大,MySQL 單機(jī)訪問被打爆,導(dǎo)致了存儲(chǔ)數(shù)據(jù)庫出現(xiàn)問題,影響到了多個(gè)系統(tǒng),造成了一定的損失。
?
此事件之后,世紀(jì)聯(lián)華就想直接把 MySQL 替換掉,這時(shí)我們發(fā)現(xiàn)阿里云有一款產(chǎn)品叫“表格存儲(chǔ)”,表格存儲(chǔ)最大的優(yōu)點(diǎn)是用戶不需要關(guān)心訪問量和機(jī)器數(shù)的比例關(guān)系。只要訪問量擴(kuò)大,后臺(tái)會(huì)自動(dòng)擴(kuò)容增擴(kuò)機(jī)器,滿足高并發(fā)的數(shù)據(jù)讀取;在數(shù)據(jù)并發(fā)請(qǐng)求降低處于低峰期時(shí),后臺(tái)就會(huì)將機(jī)器回收,用戶不再需要關(guān)心機(jī)器的數(shù)量及如何調(diào)動(dòng)。
針對(duì)用戶流量不可控問題,世紀(jì)聯(lián)華引入了阿里云的產(chǎn)品“API 網(wǎng)關(guān)”,API 網(wǎng)關(guān)可以針對(duì)不同渠道商做管控發(fā)布及流量控制。比如發(fā)現(xiàn)微信渠道流量有異常,就可以借助 API 網(wǎng)關(guān)進(jìn)行限流。
另外計(jì)算也是一個(gè)非常重要的問題,世紀(jì)聯(lián)華經(jīng)過探索發(fā)現(xiàn)阿里云的“函數(shù)計(jì)算”非常契合我們的業(yè)務(wù)場景。比如定時(shí)搶購、優(yōu)惠券投放等活動(dòng)造成巨大的 burst 沖擊,當(dāng)發(fā)現(xiàn)計(jì)算資源不夠的時(shí)候再去買機(jī)器肯定是來不及的,而函數(shù)計(jì)算及時(shí)擴(kuò)容的功能就很好地解決了這個(gè)問題。另外其數(shù)據(jù)觀測和異常報(bào)警功能,也吸引到了世紀(jì)聯(lián)華。
世紀(jì)聯(lián)華將這三個(gè)產(chǎn)品相結(jié)合,替換掉了原來的會(huì)員查詢功能,最終得以成功渡過 2019 年的 雙11 大促難關(guān)。
2)Serverless 帶來的新曙光
- 快速迭代部署
Serverless 研發(fā)效率快、運(yùn)維效率高、架構(gòu)解耦。
- 高并發(fā)、高彈性
Serverless 不需要人工擴(kuò)容和運(yùn)維管控。
- 穩(wěn)定、可靠、安全
Serverless 使搶購活動(dòng)和大促的整體體驗(yàn)都非常流暢。
- 數(shù)據(jù)、運(yùn)營、成本控制
Serverless 提供了完整的運(yùn)維觀測和報(bào)警監(jiān)控功能,運(yùn)維工程師可以輕松很多;另外按使用資源計(jì)費(fèi),資源利用率可達(dá) 100%。
5. 函數(shù)計(jì)算 2.0 及 All in Serverless
- 曲線圖 1:類似 ECS 方案,曲線顯示有資源不足和資源浪費(fèi)的情況。
- 曲線圖 2:機(jī)器擴(kuò)容,有延遲和誤差,需要提前操作,它的實(shí)時(shí)性和伸縮性都比較差。
- 曲線圖 3:函數(shù)計(jì)算 2.0 預(yù)留模式,有預(yù)留資源和彈性資源,可以實(shí)時(shí)擴(kuò)容。
- 資源管理層面:人工運(yùn)維 → 云平臺(tái)工具運(yùn)維 → Serverless 免運(yùn)維,實(shí)現(xiàn)完全自動(dòng)化。
- 資源利用率:預(yù)算采購低利用率 → 有限彈性高利用率 → Serverless 100% 資源利用率。
- 資源成本:固定成本支出 → 根據(jù)資源策略伸縮 → Serverless 根據(jù)業(yè)務(wù)策略適配。
2019 年 雙11 過后,世紀(jì)聯(lián)華快速上云,將線上核心業(yè)務(wù)改造為全 Serverless 架構(gòu)的中臺(tái)模式,采用“函數(shù)計(jì)算+API 網(wǎng)關(guān)+OTS”作為計(jì)算網(wǎng)絡(luò)存儲(chǔ)核心,彈性支撐日常和大促峰谷所需資源,輕松支撐 618 / 雙11 / 雙12 大促。
圖:2020 年 雙11 大促
2020 年 雙11 大促,世紀(jì)聯(lián)華線上業(yè)務(wù)實(shí)現(xiàn) All in Serverless,上為流量&時(shí)間的曲線圖,下為調(diào)用延遲&時(shí)間的曲線圖。
圖:Serverless 助力世紀(jì)聯(lián)華降本提效
三、設(shè)計(jì)架構(gòu)演進(jìn)總結(jié)
從物理單機(jī)到 All in Serverless 的架構(gòu)演進(jìn):
- 物理單機(jī) - 架構(gòu)簡單
- 高度耦合
- 數(shù)據(jù)同步難
- 升級(jí)困難
- 無法橫向擴(kuò)容
 
- 自建機(jī)房 - 統(tǒng)一維護(hù)升級(jí)
- 數(shù)據(jù)同步統(tǒng)一
- 系統(tǒng)部署困難
- 硬件成本高
- 非業(yè)務(wù)調(diào)查難
- 臨時(shí)擴(kuò)容
 
- 全面上云 - 硬件升級(jí)簡單
- 擴(kuò)容能力提升
- 備災(zāi)能力提升
- 設(shè)計(jì)要求高
- 監(jiān)測告警原始
- 數(shù)據(jù)庫單點(diǎn)
- 流控問題
 
- Serverless 嘗試 - 數(shù)據(jù)庫單點(diǎn)問題
- 流控問題解決
- 橫向擴(kuò)容
- 監(jiān)控告警
- 費(fèi)用免預(yù)算
- 部分延遲較大
 
- All in Serverless - 解耦
- 冷啟動(dòng)體驗(yàn)提升
- 研發(fā)效率提升
- 成本費(fèi)用下降
 
四、函數(shù)計(jì)算簡介
1. 阿里云函數(shù)計(jì)算產(chǎn)品全景
函數(shù)計(jì)算是國內(nèi)生態(tài)最完整、功能最豐富的 Serverless 產(chǎn)品,開發(fā)者一步上云、一鍵 Serverless 化將成為現(xiàn)實(shí)。
2. 業(yè)界發(fā)展趨勢(shì)
誰在使用函數(shù)計(jì)算?
作者簡介:
朱鵬,花名:旻蒼,函數(shù)計(jì)算一線技術(shù)專家,專注函數(shù)計(jì)算資源調(diào)度設(shè)計(jì)研發(fā)。
Serverless 電子書下載
本書亮點(diǎn):
- 從架構(gòu)演進(jìn)開始,介紹 Serverless 架構(gòu)及技術(shù)選型構(gòu)建 Serverless 思維;
- 了解業(yè)界流行的 Serverless 架構(gòu)運(yùn)行原理;
- 掌握 10 大 Serverless 真實(shí)落地案例,活學(xué)活用。
下載鏈接:https://developer.aliyun.com/topic/download?id=1128
原文鏈接:https://developer.aliyun.com/article/782598?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的世纪联华的 Serverless 之路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 快手基于RocketMQ的在线消息系统建
- 下一篇: 阿里资深技术专家崮德:如何成就更好的自己
