摘要:阿里妹導讀提到盒馬鮮生,除了新鮮的大龍蝦以外,大家印象最深的就是快速配送門店附近公里范圍內(nèi),分鐘送貨上門。系統(tǒng)異常業(yè)務異常的處理,上線時門店灰度方案一個門店出問題,不影響整個盒馬門店,緩存機制柔性可用重試機制事務處理串并行打日志等等。
阿里妹導讀:提到盒馬鮮生,除了新鮮的大龍蝦以外,大家印象最深的就是快速配送:門店附近3公里范圍內(nèi),30分鐘送貨上門。
盒馬是基于規(guī)模化和業(yè)務復雜度兩個交織,從IT到DT,從原產(chǎn)地到消費者而形成的端到端的平臺,而盒馬配送更是集成IOT、智能化、自動化等到線下作業(yè),同時受不可抗力因素雨雪冰霧、道路交通、小區(qū)設施等讓配送系統(tǒng)的穩(wěn)定性更加雪上加霜,如何保障線下配送作業(yè)的穩(wěn)定性,讓騎手快樂,更讓用戶開心是盒馬配送永恒的話題。
三大規(guī)范整個盒馬技術部對線上/線下作業(yè)生產(chǎn)之關注,代碼質(zhì)量之高、故障處理之嚴,讓我們工程師在反復反復地肯定自己的同時又不斷地否定自己,在開發(fā)中設計重構系統(tǒng),在生產(chǎn)之中檢驗系統(tǒng)。經(jīng)過線上/線下冰與火的歷練,我們淬煉出了一套穩(wěn)定性的方法論,概括起來就12個字:研發(fā)規(guī)范、架構規(guī)范、穩(wěn)定性規(guī)范。
無規(guī)矩,無以成方圓首先是研發(fā)規(guī)范,且看下圖:
這個圖管它叫做7層漏斗模型(努力畫出漏斗,畫圖功夫不行,淺色的箭頭表示漏斗),7層是指PRD評審、技術方案評審、TC評審、編碼、測試&代碼Review、灰度發(fā)布、運維。為什么是漏斗模型呢?因為我們通過這7層經(jīng)過層層篩選,將阻礙線下流程的重大故障全部在這7層兜住。
PRD評審:我們有個需求池,所有的需求都先扔到這個池子里面,每兩周有個運營雙周會,從中篩選出優(yōu)先級高、緊急程度高的需求開始進行PRD評審(倒排項目除外),所有的PRD評審都有PD組織,從項目或者需求的價值認識上達成一致,在評審的過程中研發(fā)同學從PRD中尋找名詞進行領域建模和抽象。整個需求和項目需要識別到技術風險,遵循“不被別人搞死、不搞死別人”的原則,識別核心鏈路和非核心鏈路;測試同學從中識別風險點和測試功能點,為后面TC評審做好準備。
技術方案評審:PM組織研發(fā)、測試和PD總共參與,研發(fā)同學按照事先分配好的研發(fā)模塊進行技術串講,同時和PD、甚至電話業(yè)務同學共同達成產(chǎn)品兜底方案和業(yè)務兜底方案。人都會犯錯,何況是人寫出來的代碼,我們要擁抱bug,但更要識別到潛在的風險進行兜底。
TC評審:一般在技術評審完成后的兩天內(nèi)會進行TC評審,主要功能的覆蓋點、技術方案潛在的坑、非功能角度的業(yè)務降級方案、性能的QPSRT、接口的可測性的評估、測試環(huán)境、測試數(shù)據(jù)等,最后給出可靠的上線時間。
編碼:首先遵循集團的編碼規(guī)則,然后就是防御性編程,業(yè)務系統(tǒng)可能80%的代碼都在考慮異常情況下如何保證高可用。系統(tǒng)異常、業(yè)務異常的處理,上線時門店灰度方案(一個門店出問題,不影響整個盒馬門店),緩存機制、柔性可用、重試機制、事務處理、串并行、打日志等等。
測試&代碼Review:首先研發(fā)完成自測并冒煙通過,正式提測,當然在編碼的過程中也會進行代碼Review,那時的代碼Review管它叫線上Review,通過Aone的功能提交給相關同學進行Review;整個測試結束后上線前我們會聚集到一起進行代碼圍觀Review,這個階段也會完成系統(tǒng)依賴順序、發(fā)布順序、回滾順序,每個人的位置。
灰度發(fā)布:首先我們嚴格遵守盒馬研發(fā)紅線,按照發(fā)布窗口進行發(fā)布,同時為了將風險降到最低,針對不同的業(yè)務做不同的發(fā)布時間點,比如O2O場景下午2點準時發(fā)布,B2C場景晚上8點半準時點火;針對不同的門店進行灰度,發(fā)布完成后就立馬通過SLS查看原始錯誤日志,A3查看錯誤統(tǒng)計日志,EagleEye查看QPS/RT,CloudDBA查看DB性能/慢SQL等全面盯屏30分鐘以上。一般我們覺得風險比較大的,在發(fā)布時會只發(fā)2臺機器,第二天觀察沒有任何問題再全部上線,如果有問題就直接上去Kill掉這兩臺機器。
運維:每次發(fā)布后第二天早起盯屏是非常關鍵,尤其是配送涉及不同運力商、運力類型等作業(yè)的校驗方式不同,在早上運力類型豐富是最容易出問題,也最容易發(fā)現(xiàn)問題。一旦有問題,誰先第一個發(fā)現(xiàn)先問題就會立馬在群里釘釘電話所有人,若是跨團隊的會多帶帶拉小群電話所有人,對于問題的定位我們設置專門的同學,有人看SLS,有人看EagleEye,有人看A3,有人看Xflush,有人看CloudDBA,有人對外發(fā)聲安撫騎手,一個人統(tǒng)一指揮,大家分工明確,整個問題處理起來就像一個人。
不把雞蛋放在一個籃子盒馬配送目前有50+系統(tǒng),其中核心應用有20+,那么這么多系統(tǒng)如何既保穩(wěn)定又能協(xié)作?且看下圖:
項目化:盒馬配送從剛開始按照項目維度構建整個系統(tǒng),能夠滿足盒馬用戶的個性化需求,這種在人少的情況下開發(fā)起來很快,也能快速的迭代。
產(chǎn)品化:隨著業(yè)務需求越來越多,這種開發(fā)方式越來越拖慢整個項目節(jié)奏,尤其是需求的靈活多變,這個時候產(chǎn)品化的方式隨之而來,我們在去年5月份的引入了NBF的規(guī)則中心、各種Setup,將運營邏輯和業(yè)務邏輯區(qū)別開來等各種配置化,快速支持需求的變化。
服務化:去年8月份的時候和點我達、鄰趣、蜂鳥等三方進行對接,對接的過程比較痛苦,我們發(fā)現(xiàn)業(yè)務邏輯主要是在盒馬場景下,三方的場景需要做一些定制,這個時候我們開始考慮整個線下作業(yè)不變業(yè)務規(guī)則和基于場景的業(yè)務規(guī)則,將不變業(yè)務規(guī)則下沉作為我們的后臺,基于場景的業(yè)務規(guī)則放到我們的中臺,形成后臺解釋業(yè)務概念、業(yè)務狀態(tài)和業(yè)務規(guī)則,中臺做統(tǒng)一權限校驗、場景化的業(yè)務邏輯、數(shù)據(jù)網(wǎng)關、整個降級限流可以上浮到中臺來,完成對各運力商的流控,慢慢孵化出上面的架構規(guī)范。這一過程比較痛苦,我們既要追趕業(yè)務,又把34個核心的L0服務梳理業(yè)務邏輯、接口參數(shù)的合理性、外部依賴等重新升級一遍,新老服務平滑遷移對業(yè)務無感,最后注冊到NBF上,通過NBF鏈接起所需的各域能力去表達業(yè)務。
數(shù)字化:最底下一層是我們的用工管理平臺,新零售從企業(yè)角度看有兩個核心層面,其一是技術層面“人貨場”的數(shù)字化;其二是零售層面的“人貨場”的變革或者革命;用技術驅(qū)動零售變革,讓我們真正能看到整個線下作業(yè)流程的好與壞,哪些門店好,哪些門店差,原因到底在哪里,如何去優(yōu)化提供技術依據(jù)和支撐,整個數(shù)據(jù)模型如下圖:
紙上得來終覺淺任何理論、架構都要不斷接受實踐的檢驗,在錯誤中學習,在錯誤中成長,提出了一套適合線下配送的7路23招打法,如下圖:
第一路:核心和非核心隔離
首先我們從應用維度進行核心和非核心隔離,核心服務和非核心服務隔離,從數(shù)據(jù)庫層面我們做了核心庫和非核心庫隔離,讀寫分離、充分發(fā)揮各存儲層的優(yōu)勢,比如核心作業(yè)場景我們采用Mysql,實時聚合分析場景我們采用ADS,非核心多維度組合查詢場景我們引入OpenSearch、和離線場景的ODPS,這樣既起到分流的作用,又保護了核心作業(yè)場景。如此架構升級,可以讓我們的上嘉同學進來在一些非核心場景上獨擋一面,充分發(fā)揮他們的潛力。
系統(tǒng)交互上我們采用基于Request/Response模式的HSF水平調(diào)用;另外一種基于Event-driven模式的消息垂直調(diào)用。
對核心服務的依賴上,我們本著不信任任何外部服務的原則,即使外部服務出問題,我們依然能夠繼續(xù)作業(yè),形成如下圖的調(diào)用方式:
鏈路開銷大且網(wǎng)絡抖動很容易引起問題,我們會將其做成一個“航母級”的服務來調(diào)用,如下調(diào)用:
舉個例子:配送人貨匹配生成笛卡爾積后類似map-reduce進行分布式計算,通過鷹眼鏈路觀察發(fā)現(xiàn)耗時主要在map到reduce的網(wǎng)絡耗時,不在于計算耗時,我們將將人貨匹配生成矩陣,平衡網(wǎng)絡開銷和分布式計算,最后將108次調(diào)用變?yōu)?次,性能基本提升12倍,如下矩陣:
第二路:及時發(fā)現(xiàn)問題是穩(wěn)定的一半
服務級別-冪等、參數(shù)校驗、熔斷、還是靜態(tài)和動態(tài)控制超時時間、重試次數(shù)來保障服務級別的高可用;
系統(tǒng)級別-流量調(diào)度、研發(fā)紅線、代碼Reivew文化、重大發(fā)布集體上光明頂、流量調(diào)度、A3EagleEyeSLSXflush等的QPSRT同比環(huán)比的服務監(jiān)控還是底層的機器性能監(jiān)控都能保證在第一時間發(fā)現(xiàn)問題。重大發(fā)布集體上光明頂是我們的一個文化,記得在雙12前兩周我們對整個系統(tǒng)架構進行了一次升級,涉及13個系統(tǒng)又在大促前頂著壓力發(fā)布上線,最終在雙12期間系統(tǒng)整體平穩(wěn),較雙11各項指標毛刺減少,特別是雙12哪幾天的雨雪天氣在站內(nèi)批次積壓嚴重的情況下,我們的人貨追加服務較雙11的QPS增加近一倍,但我們的RT卻降低了50%。
其它招,比如我們在過年期間每天的專人進行核心系統(tǒng)的例行檢查,確保系統(tǒng)正常運行;在穩(wěn)定性知識方面,我們內(nèi)外結合進行分享,同時將別的team的故障都當做自己的故障來分析原因和查找我們系統(tǒng)的不足。
第三路:故障預防
在系統(tǒng)復雜和業(yè)務需求不斷導致代碼腐化,我們定時對整個系統(tǒng)進行重構,將整個重構方案大家達成一致;在今年系統(tǒng)的混部環(huán)境對我們也是一個挑戰(zhàn),所以我們引入了超時和重試機制,特別是做到了運行期修改超時時間,防止雪崩,每一個新功能上線時都會做故障注入和故障演練,識別潛在風險。
第四路:故障緩解
我們機器留有一些buffer以防大促、線程池滿等緊急擴容情況下使用,同時對高QPS有降級預案以防異常情況緊急止血。還是前面提到的業(yè)務系統(tǒng)一定要有產(chǎn)品和業(yè)務兜底方案,比如我們在和蜂鳥對接時當蜂鳥的系統(tǒng)如果出現(xiàn)問題時,我們服務端針對此種情況做了防御性編程,打開開關讓蜂鳥騎手用飛魚app進行作業(yè),減輕對用戶的影響面。在穩(wěn)定上,我們不但要自己贏,也要讓合作伙伴贏。
第五路:快速恢復
回滾是系統(tǒng)發(fā)布后出現(xiàn)異常最有效的止血方案,對于弱依賴我們通過柔性可用性讓它跳過不阻塞繼續(xù)往下走,當出現(xiàn)異常case時比如履約和配的狀態(tài)不一致我們通過阿波羅后臺進行一鍵修復,異常緊急訂正預案、Diamond命令下發(fā)等來快速恢復。
第六路:快速補償
我們的系統(tǒng)在設計的都是無狀態(tài)扁平化,不存在單點,機器擴容是應對某些異常情況的快速止血方案。
第七路:發(fā)布治療
在上述路數(shù)招數(shù)都無法快速止血的情況下只能采用發(fā)布治療,我們有一次突然機器Load飆高,收到報警后第一反應是機器問題,但又發(fā)現(xiàn)部分機器的線程池也快滿了,我們隨即開始擴容和機器重啟,一部分同學在快速擴容,一部分同學在不停的機器重啟,其它同學在迅速查找問題的根本原因,最后通過DUMP發(fā)現(xiàn)是由于引用了一個Jar,而這個Jar包里面使用了Java的正則表達式在解析一個特殊商品名稱的時候進入了死循環(huán),找到原因后這種情況只能通過發(fā)布解決,我們迅速達成一致緊急發(fā)布解決,正是前面一部分同學的擴容和不停的重啟,從而避免了一場故障。
大海航行靠舵手盒馬配送的穩(wěn)定性靠的是業(yè)務方、產(chǎn)品、研發(fā)、測試、Web端、App端、RF端、GOC、上下游、算法、IOT、NBF、盒馬安全生產(chǎn)、中間件、網(wǎng)絡、氣象臺、雨雪冰霧、道路交通、紅綠燈、小區(qū)設施、騎手裝備等等各種因素,每一個組成部分都是至關重要。穩(wěn)定性的探索我們還在路上,不斷追求極致。
閱讀原文
本文來自云棲社區(qū)合作伙伴“?阿里技術”,如需轉載請聯(lián)系原作者。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11994.html
摘要:可以說,美團要建設的就是配送系統(tǒng)的超級大腦。美團超腦配送系統(tǒng)目前互聯(lián)網(wǎng)技術,很大部分還是針對線上產(chǎn)品和系統(tǒng)研發(fā),整個流程可以在線上全部完成,而這也正是配送技術最大的不同和挑戰(zhàn)。 在2018 AI開發(fā)者大會(AI NEXTCon)上,美團配送AI方向負責人何仁清,分享了美團在即時配送領域中機器學習技術的最新進展,以及如何通過大數(shù)據(jù)和機器學習手段,建立對線下真實世界各種場景的感知能力,還原...
摘要:智匯方象以系統(tǒng)研發(fā)為核心,打通收銀系統(tǒng)后臺管理系統(tǒng)小程序支付系統(tǒng)第三方配送服務商等,構建零售業(yè)數(shù)字化運營方案閉環(huán)。自新零售概念提出以后,就成為零售業(yè)的熱門詞匯。新零售是利用互聯(lián)網(wǎng)的工具和方法,提升傳統(tǒng)零售的效率,以線上線下相融合為特征的新零售,正成為互聯(lián)網(wǎng)時代下零售業(yè)變革的主要方向。 新零售的發(fā)展,催生了一批以大數(shù)據(jù)、人工智能、物聯(lián)網(wǎng)等新興技術為基礎服務平臺,今天的案例smartpos...
摘要:摘要智能監(jiān)控是智能運維的子領域,詳細分析。我和我的團隊在阿里內(nèi)部的分工是橫向去看阿里巴巴業(yè)務指標的監(jiān)控,我們就以這個話題展開。分享分為五個環(huán)節(jié),從阿里巴巴不同的業(yè)態(tài),特別是新的業(yè)態(tài)帶來的挑戰(zhàn)講起。 摘要:?智能監(jiān)控是智能運維的子領域,詳細分析。 showImg(https://segmentfault.com/img/remote/1460000017348788); 作者簡介 王肇...
摘要:背景近年來,隨著阿里新業(yè)務新技術的快速發(fā)展,傳統(tǒng)的業(yè)務總量監(jiān)控大盤已經(jīng)越來越不能滿足監(jiān)控需求,主要表現(xiàn)在以下幾個方面缺乏全局視角監(jiān)控大盤主要反映的是單個業(yè)務或應用的運行狀態(tài),缺少全局的業(yè)務視角能反應整個業(yè)務域的上下游整體的運行情況。 背景 近年來,隨著阿里新業(yè)務、新技術的快速發(fā)展,傳統(tǒng)的業(yè)務總量監(jiān)控大盤已經(jīng)越來越不能滿足監(jiān)控需求,主要表現(xiàn)在以下幾個方面: 缺乏全局視角:監(jiān)控大盤主要反映...
閱讀 1336·2021-11-25 09:43
閱讀 1894·2021-11-12 10:36
閱讀 5966·2021-09-22 15:05
閱讀 3480·2019-08-30 15:55
閱讀 2005·2019-08-26 14:06
閱讀 3640·2019-08-26 12:17
閱讀 492·2019-08-23 17:55
閱讀 2448·2019-08-23 16:23