服務(wù)降級背后的技術(shù)架構(gòu)設(shè)計(jì)
本文是2016年11月肖飛在京東技術(shù)開放日分享的《服務(wù)降級背后的技術(shù)架構(gòu)設(shè)計(jì)》PPT內(nèi)容。
降級之術(shù)
數(shù)據(jù)
- 總共5000+預(yù)案
- 結(jié)算頁,依賴62個(gè)服務(wù)接口,31個(gè)有故障切換預(yù)案,45個(gè)降級預(yù)案
- 移動大促高峰時(shí)點(diǎn)前主動降級
數(shù)據(jù)來源京東預(yù)案管理系統(tǒng),有重合。涉及類型:故障切換、資源調(diào)配、限流、降級。
示例
- 犧牲部分用戶體驗(yàn)
- 商詳頁不顯示特色服務(wù)icon、促銷信息等
- 結(jié)算頁不顯示自提/311/411預(yù)約日歷
- 訂單詳情頁不顯示GIS訂單軌跡、催單等
- 評價(jià)列表禁止10頁之后的翻頁
- 實(shí)時(shí)統(tǒng)計(jì)和報(bào)表禁用
- 強(qiáng)制必選查詢條件中的路由或索引字段
- 領(lǐng)豆豆防刷降級為拼圖驗(yàn)證
- H5變PC頁面
- 使用通用內(nèi)容代替?zhèn)€性化推薦內(nèi)容
降低安全級別
- 發(fā)放京豆、提交訂單、發(fā)表評論、登錄不調(diào)用風(fēng)控接口
- 結(jié)算頁前端下單不啟用驗(yàn)證碼
- 集中式session不可用,cookie解密即可
- ip limit服務(wù),注冊、登錄不限制次數(shù)
- 商品修改內(nèi)容不做敏感詞過濾
犧牲部分業(yè)務(wù)邏輯
- 拍賣出價(jià)時(shí)不校驗(yàn)京豆數(shù)量
- 發(fā)表評價(jià),不再校驗(yàn)是否退貨
延緩任務(wù)處理
- WMS任務(wù)處理引擎,暫停調(diào)撥、節(jié)能補(bǔ)貼等任務(wù)
- OFW優(yōu)先處理高優(yōu)先級、拆分邏輯較簡單的訂單
損失數(shù)據(jù)持久性
- 用戶地址更新,寫redis,不回寫數(shù)據(jù)庫
- 庫存預(yù)占,寫redis,異步回寫數(shù)據(jù)庫
- 用戶新增普票,寫redis,不持久
- 訂單二次拆分任務(wù)機(jī)制,由JMQ降為redis隊(duì)列
降低準(zhǔn)確性/實(shí)時(shí)性
- 實(shí)時(shí)價(jià)格過期不回源
- 動態(tài)頁變靜態(tài)拖底頁
- 用戶昵稱接口降級,顯示用戶pin
- 庫存狀態(tài)接口降級,顯示有貨
- 抽獎異常,所有用戶均顯示未中獎
降低性能
- 數(shù)據(jù)庫代替緩存防重、查詢
- 數(shù)據(jù)庫任務(wù)隊(duì)列輪詢代替MQ
- CDN降為源站
- 本地緩存降為RPC
降低容災(zāi)能力
- 自動調(diào)度變?yōu)槭止ふ{(diào)度
- VIP降級為real ip
降級之架構(gòu)設(shè)計(jì)
降級設(shè)計(jì)的基礎(chǔ):服務(wù)化架構(gòu)
- 解決系統(tǒng)的擴(kuò)展性
- 故障隔離
- 服務(wù)拆分和治理
根據(jù)單一職責(zé)和故障隔離原則,確認(rèn)業(yè)務(wù)和功能邊界
- 確認(rèn)服務(wù)依賴關(guān)系
- 確認(rèn)上下游SLA
案例:結(jié)算頁核心服務(wù);上游:PC端結(jié)算頁Web、手機(jī)APP、微信入口等;下游:62個(gè)依賴服務(wù)接口。
上游依賴
上游依賴分析的目的:梳理上游系統(tǒng)等級;設(shè)計(jì)限流降級方案和開關(guān)。
針對上游的主要降級手段:限流降級;按照用戶質(zhì)量,將高風(fēng)險(xiǎn)用戶、爬蟲優(yōu)先降級;按照上游系統(tǒng)等級,將低級別系統(tǒng)的資源調(diào)度到高級別系統(tǒng)。
下游依賴
下游依賴分析的目的:–梳理依賴的影響程度和范圍;設(shè)計(jì)候選降級方案和開關(guān)。
結(jié)算頁強(qiáng)依賴:服務(wù):購物車、商品、庫房屬性、庫存預(yù)占、四級地址、訂單號、接單;存儲:orderstore緩存;不可降級,要求下游拼死保護(hù)SLA。
結(jié)算頁弱依賴
實(shí)施
降級實(shí)施:人工 or 自適應(yīng);主動 or 被動。
時(shí)機(jī):根據(jù)上游確認(rèn)的SLA,超出調(diào)用量閾值的,觸發(fā)限流降級開關(guān);根據(jù)下游確認(rèn)的SLA,結(jié)合最近的可用率、資源使用率、耗時(shí)等統(tǒng)計(jì)、監(jiān)控信息,切換到備選方案,或恢復(fù)到常規(guī)方案。
降級之道
降級:是利用有限資源,保障系統(tǒng)核心功能高可用、有損的架構(gòu)方法。有限資源;核心高可用;有損;架構(gòu)方法。
關(guān)鍵詞解讀:
有限資源(邊際效用遞減法則:單位資源投入對可用性的效用是不斷遞減的)。核心(功能/服務(wù)等級:核心高可用,級別越低,可用性要求越低)。有損(降級與故障切換的關(guān)系:降級是有損的故障切換)。架構(gòu)方法(降級需要預(yù)先分析、設(shè)計(jì),有實(shí)施方法論)。
降級預(yù)案設(shè)計(jì)原則
- 候選方案要簡潔,不要把系統(tǒng)復(fù)雜化
- 考慮降級的收益和影響成本,設(shè)計(jì)收益率最高的方案
- 降級預(yù)案需要定期review:業(yè)務(wù)復(fù)雜度變更;系統(tǒng)重要級別提升
- 簡潔原則;經(jīng)濟(jì)原則;動態(tài)原則
作者:肖飛,于2011年8月份加入京東,曾親身參與到京東的應(yīng)用性能監(jiān)控、統(tǒng)一日志、流式計(jì)算、內(nèi)存緩存、四層防攻擊等一些基礎(chǔ)技術(shù)平臺的研發(fā)和搭建工作,經(jīng)歷了京東的技術(shù)系統(tǒng)從簡單粗放向復(fù)雜精細(xì)化的演變過程。目前主要工作為多中心交易項(xiàng)目中的數(shù)據(jù)復(fù)制中間件JingoBUS的研發(fā)。平時(shí)也會開發(fā)一些公共的平臺和工具,關(guān)注分布式系統(tǒng)的實(shí)現(xiàn)、程序設(shè)計(jì)、性能優(yōu)化、開發(fā)語言等。
【本文來自51CTO專欄作者張開濤的微信公眾號(開濤的博客),公眾號id: kaitao-1234567】