版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、極客時(shí)間彈力設(shè)計(jì)篇之“降級(jí)設(shè)計(jì)”2018-03-22彈力設(shè)計(jì)篇之“降級(jí)設(shè)計(jì)”- 00:01 / 09:3所謂的降級(jí)設(shè)計(jì)(Degradation),本質(zhì)是為了解決資源不足和量過大的問題。當(dāng)資源和 量出現(xiàn) 的時(shí)候,在有限的資源內(nèi)為了能夠扛住大量的請(qǐng)求, 就需要對(duì)的系統(tǒng)進(jìn)行降級(jí)操作。也就是,暫時(shí)犧牲掉一些東西,保障整個(gè)系統(tǒng)的平穩(wěn)運(yùn)行。我記得我在倫敦參與諾丁山狂歡節(jié)的時(shí)候,以及看阿森納英超足球比賽的時(shí)候,散場(chǎng)時(shí)因?yàn)槿颂?,所有?系統(tǒng)( 車,地鐵)完全免費(fèi),就是為了讓人通行得更快。而且早在散場(chǎng)前,場(chǎng)外就備著一堆 車和地鐵了,這樣就是為了在最短時(shí)間內(nèi)把人疏散掉。雖然虧掉了一些錢,但是相比因?yàn)?擁塞造成道
2、路交通擁塞以及還可能出現(xiàn)的一些意外情況所造成的社會(huì)成本的損失, 免費(fèi)策略真是很明智的做法。與此類似, 的系統(tǒng)在應(yīng)對(duì)一些突 況的時(shí)候也需要這樣的降級(jí)流程。一般來說, 的降級(jí)需要犧牲掉的東西有:降低一致性。從強(qiáng)一致性變成最終一致性。停止次要功能。停止不重要的功能,從而 出 的資源。簡(jiǎn)化功能。把一些功能簡(jiǎn)化掉,比如,簡(jiǎn)化業(yè)務(wù)流程,或是不再返回全量數(shù)據(jù),只返回部分?jǐn)?shù)據(jù)。降低一致性要清楚地認(rèn)識(shí)到,這世界上大多數(shù)系統(tǒng)并不是都需要強(qiáng)一致性的。對(duì)于降低一致性,把強(qiáng)一致性變成最終一致性的做法可以有效地 資源,并且讓系統(tǒng)運(yùn)行得更快,從而可以扛住更大的流量。一般來說,會(huì)有兩種做法,一種是簡(jiǎn)化流程的一致性,一種是降低
3、數(shù)據(jù)的一致性。使用異步簡(jiǎn)化流程舉個(gè)例子,比如 的下單交易系統(tǒng),在強(qiáng)一致的情況下,需要結(jié)算賬單,扣除庫(kù)存,扣除賬戶上的余額(或發(fā)起支付),最后進(jìn)行發(fā)貨流程,這一系列的操作。如果需要是強(qiáng)一致性的,那么就會(huì)非常慢。尤其是支付環(huán)節(jié)可能會(huì)涉及 方面的接口性能,就像雙11那樣, 方面出問題會(huì)導(dǎo)致支付不成功,而訂單流程不能往下走。在系統(tǒng)降級(jí)時(shí), 可以把這一系列的操作做成異步的,快束結(jié)算訂單,不占庫(kù)存,然后把 支付降級(jí)成用戶到付,這樣就省去支付環(huán)節(jié),然后批量處理用戶的訂單,向用戶發(fā)貨,用戶貨到付款。極客時(shí)間如上圖所示,一開始需要的全同步的方式,降級(jí)成了全異步的方式,庫(kù)存從單筆強(qiáng)一致性也變成了多筆最終一致性,如
4、果庫(kù)存不夠了,就只能根據(jù)先來后到取消訂單了。而支付也從最開始的下單請(qǐng)求時(shí)的強(qiáng)一致性,變成了用戶到付的最終一致性。一般來說,功能降級(jí)都有可能會(huì)損害用戶的體驗(yàn),所以,最好給出友好的用戶提示。比如,“系統(tǒng)當(dāng)前繁忙,您的訂單已收到, 正努力為您處理訂單中, 會(huì)盡快給您發(fā)送訂單確認(rèn)通知還請(qǐng)見諒”諸如此類的提示信息。降低數(shù)據(jù)的一致性降低數(shù)據(jù)的一致性一般來說會(huì)使用緩存的方式,或是直接就去掉數(shù)據(jù)。比如,在頁(yè)面上不顯示庫(kù)存的具體數(shù)字,只顯示有還是沒有庫(kù)存這兩種狀態(tài)。對(duì)于緩存來說,可以有效地降低數(shù)據(jù)庫(kù)的壓力,把數(shù)據(jù)庫(kù)的資源交給更重要的業(yè)務(wù),這樣就能讓系統(tǒng)更快速地運(yùn)行。對(duì)于降級(jí)后的系統(tǒng),不再通過數(shù)據(jù)庫(kù)獲取數(shù)據(jù),而是
5、通過緩存獲取數(shù)據(jù)。關(guān)于緩存的設(shè)計(jì)模式,我在CoolS 中有一篇叫緩存更新的套路中講述過緩存的幾種更新模式,大家可以前往一讀。在功能降級(jí)中, 一般使用Cache Aside模式或是Read Through模式。也就是下圖所示的這個(gè)策略。失效:應(yīng)用程序先從cache取數(shù)據(jù),沒有得到,則從數(shù)據(jù)庫(kù)中取數(shù)據(jù),成功后,放到緩存中。命中:應(yīng)用程序從cache中取數(shù)據(jù),取到后返回。更新:先把數(shù)據(jù)存到數(shù)據(jù)庫(kù)中,成功后,再讓緩存失效。Read Through 模式就是在查詢操作中更新緩存,也就是說,當(dāng)緩存失效的時(shí)候(過期或LRU換出),Cache Aside是由調(diào)用方負(fù)責(zé)把數(shù)據(jù)加載入緩存,而Read Throug
6、h則用緩存服務(wù)自己來加載,從而對(duì)應(yīng)用方是透明的。停止次要的功能停止次要的功能也是一種非常有用的策略。把一些不重要的功能給暫時(shí)停止掉,讓系統(tǒng) 出 的資源來。比如, 中的搜索功能,用戶的評(píng)論功能,等等。等待 的峰值過去后, 再把這些功能給恢復(fù)回來。當(dāng)然,最好不要停止次要的功能,首先可以限制次要的功能的流量,或是把次要的功能 成簡(jiǎn)單的功能,最后如果量太大了, 才會(huì)進(jìn)入停止功能的狀態(tài)。停止功能對(duì)用戶會(huì)帶來一些用戶體驗(yàn)的問題,尤其是要停掉一些可能對(duì)于用戶來說是非常重要的功能。所以,如果可能,最好給用戶一些補(bǔ)償,比如把用戶切換到一個(gè)送積分卡,或是紅包抽獎(jiǎng)的網(wǎng)頁(yè)上,有限地補(bǔ)償一下用戶。簡(jiǎn)化功能關(guān)于功能的簡(jiǎn)化
7、上,上面的下單流程中已經(jīng)提到過相應(yīng)的例子了。而且,從緩存中返回?cái)?shù)據(jù)也是其中一個(gè)。這里再提一個(gè),就是一般來說,一個(gè)API會(huì)有兩個(gè)版本,一個(gè)版本返回全量數(shù)據(jù),另一個(gè)版本只返回部分或最小的可用的數(shù)據(jù)。舉個(gè)例子,對(duì)于一個(gè)文章,一個(gè)API會(huì)把商品詳情頁(yè)或文章的內(nèi)容和所有的評(píng)論都返回到前端。那么在降級(jí)的情況下, 就只返回商品信息和文章內(nèi)容,而不返回用戶評(píng)論了,因?yàn)橛脩粼u(píng)論會(huì)涉及 的數(shù)據(jù)庫(kù)操作。所以,這樣可以降級(jí)設(shè)計(jì)的要點(diǎn)的數(shù)據(jù)資源。而商品信息或文章信息可以放在緩存中,這樣又能 出 的資源給交易系統(tǒng)這樣的需要 數(shù)據(jù)庫(kù)資源的業(yè)務(wù)使用。對(duì)于降級(jí),一般來說是要犧牲業(yè)務(wù)功能或是流程,以及一致性的。所以, 需要對(duì)業(yè)務(wù)
8、做非常仔細(xì)的梳理和分析。 很難通過不侵入業(yè)務(wù)的方式來做到功能降級(jí)。在設(shè)計(jì)降級(jí)的時(shí)候,需要清楚地定義好降級(jí)的關(guān)鍵條件,比如,吞吐量過大 響應(yīng)時(shí)間過慢 失敗次數(shù)多過,有網(wǎng)絡(luò)或是服務(wù)故障,等等,然后做好相應(yīng)的應(yīng)急預(yù)案。這些預(yù)案最好是寫成代碼可以快速地自動(dòng)化或半自動(dòng)化執(zhí)行的。功能降級(jí)需要梳理業(yè)務(wù)的功能,哪些是mus ve的功能,哪些是nice-to-have的功能;哪些是必需要死保的功能,哪些是可以犧牲的功能。而且需要在事前設(shè)計(jì)好可以簡(jiǎn)化的或是用來應(yīng)急的業(yè)務(wù)流程。當(dāng)系統(tǒng)出問題的時(shí)候,就需要走簡(jiǎn)化應(yīng)急流程。極客時(shí)間降級(jí)的時(shí)候,需要犧牲掉一致性,或是一些業(yè)務(wù)流程:對(duì)于讀操作來說,使用緩存來解決,對(duì)于寫操作
9、來說,需要異步調(diào)用來解決。并且, 需要以方便對(duì)賬,以免漏掉或是和正常的流程 。的方式 下來,這樣降級(jí)的功能的開關(guān)可以是一個(gè)系統(tǒng)的配置開關(guān)。做成配置時(shí),你需要在要降級(jí)的時(shí)候推送相應(yīng)的配置。另樣可以由上游調(diào)用者來驅(qū)動(dòng)。式是,在對(duì)外服務(wù)的API上有所區(qū)分(方法簽名或是開關(guān)參數(shù)),這比如:一個(gè)網(wǎng)關(guān)在限流時(shí),在協(xié)議頭中加入了一個(gè)限流程度的參數(shù),讓后端服務(wù)能知道限流在發(fā)生中。當(dāng)限流程度達(dá)到某個(gè)值時(shí),或是限流時(shí)間超過某個(gè)值時(shí),就自動(dòng)開始降級(jí),直到限流好轉(zhuǎn)。對(duì)于數(shù)據(jù)方面的降級(jí),需要前端程序的配合。一般來說,前端的程序可以根據(jù)后端傳來的數(shù)據(jù)來決定展示哪些界面模塊。比如,當(dāng)前端收不到商品評(píng)論時(shí),就不展示。為了區(qū)分
10、本來就沒有數(shù)據(jù),還是因?yàn)榻导?jí)了沒有數(shù)據(jù)的兩種情況,在協(xié)議頭中也應(yīng)該加上降級(jí)的 。因?yàn)榻导?jí)的功能平時(shí)不會(huì)總是會(huì)發(fā)生,屬于應(yīng)急的情況,所以,降級(jí)的這些業(yè)務(wù)流程和功能有可能長(zhǎng)期不用而出現(xiàn)bug或問題,對(duì)此,需要在平時(shí)做一些演練。小結(jié)好了, 來總結(jié)一下的主要內(nèi)容。首先,降級(jí)設(shè)計(jì)本質(zhì)上是為了解決資源不足和 量過大的問題。降級(jí)的方法有降低一致性 停止次要功能和簡(jiǎn)化功能。最后,我總結(jié)了降級(jí)設(shè)計(jì)的要點(diǎn)。下篇文章中,我將總結(jié)整個(gè)彈力設(shè)計(jì)篇。希望對(duì)你有幫助。也歡迎你 一下你實(shí)現(xiàn)過怎樣的降級(jí)機(jī)制?有沒有和限流機(jī)制配合?給出了分布式系統(tǒng)設(shè)計(jì)模式系列文章的目錄,希望你能在這個(gè)列表里找到自己感彈力設(shè)計(jì)篇認(rèn)識(shí)故障和彈力設(shè)計(jì)
11、設(shè)計(jì)Bulkheads異步通訊設(shè)計(jì)Asynchronous冪等性設(shè)計(jì)Idempotency的內(nèi)容。服務(wù)的狀態(tài)Se補(bǔ)償事務(wù)Compensating Tran重試設(shè)計(jì)Retry熔斷設(shè)計(jì)Circuit Breaker限流設(shè)計(jì)Throttle降級(jí)設(shè)計(jì)degradation彈力設(shè)計(jì)總結(jié)ion管理設(shè)計(jì)篇分布式鎖Distributed Lock配置中心Confgur ation Management邊車模式Sidecar服務(wù)網(wǎng)格Service Mesh網(wǎng)關(guān)模式Gateway部署升級(jí)策略性能設(shè)計(jì)篇緩存Cache異步處理Asynchronous數(shù)據(jù)庫(kù)擴(kuò)展秒殺Flash Sales邊緣計(jì)算Edge Computi
12、ng丁英才2018-03-23耗子叔的文章給人行云流水之感 每篇文章從 介紹 應(yīng)用場(chǎng)景 分例介紹 架構(gòu)補(bǔ)圖到篇末小節(jié) 不僅詳略得當(dāng) 而且讀起來感覺暢快 最近響應(yīng)耗子叔號(hào)召 重溫基礎(chǔ) tcp/ip 詳解 書是好書但沒有暢快的感覺 耗子叔要不按你風(fēng)格寫本基礎(chǔ)的書 會(huì)幫助 的人作者回復(fù)2018-03-27TCP/IP的 我寫在CoolS 上了Geek_122dd92018-04-23極客時(shí)間可以理解為TCC嗎來2018-06-09關(guān)于降級(jí)突然想到了生活中一個(gè)類似降級(jí)的場(chǎng)景現(xiàn)在小飯館都支持網(wǎng)上訂餐 當(dāng)餐廳內(nèi)客人不多的時(shí)候 餐廳 或者服務(wù)員會(huì)去出去送餐 而當(dāng)餐廳內(nèi)客戶突然增多 服務(wù)員忙不過來的時(shí)候 一般
13、會(huì)進(jìn)行降級(jí) 降級(jí)的策略是將外賣配送交給第 來配送 或者在某個(gè)時(shí)間段內(nèi)暫不支持網(wǎng)上訂餐 這種情況類似于功能降級(jí) 還有一個(gè)場(chǎng)景就是關(guān)于餐廳炒菜 當(dāng)餐廳內(nèi)食客少的時(shí)候 大廚一般會(huì)現(xiàn)點(diǎn)現(xiàn)炒 而當(dāng)食客多忙不過來的時(shí)候 一般會(huì)提前將菜炒好 客人點(diǎn)完就可以吃到 將熱菜降級(jí)為快餐 這種情況類似于服務(wù)降級(jí) 純屬個(gè)人理解 不妥 還請(qǐng)見諒來2018-06-09現(xiàn)在的降級(jí)分為功能降級(jí)和服務(wù)降級(jí)目前將降級(jí)開關(guān)放到配置中心能降級(jí)1、通過降級(jí)開關(guān)控制功能可用不可用 一般為頁(yè)面和按鈕2、簡(jiǎn)化業(yè)務(wù)操作流程 當(dāng)降級(jí)后簡(jiǎn)化業(yè)務(wù)操作步驟 快速完成業(yè)務(wù)操作二、服務(wù)降級(jí)1、讀降級(jí) 降級(jí)前會(huì)讀緩存 緩存中不存在的話讀數(shù)據(jù)庫(kù) 降級(jí)后讀緩存 緩存中不存在的話 返回默認(rèn)值 不再讀數(shù)據(jù)庫(kù)2、寫降級(jí) 將之前的同步寫數(shù)據(jù)庫(kù)降級(jí)為先寫緩存 然后異步寫庫(kù)3、服務(wù)調(diào)用降級(jí) 之前兩個(gè)系統(tǒng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)站設(shè)計(jì)對(duì)品牌形象的影響計(jì)劃
- 美術(shù)作品鑒賞與藝術(shù)史教育計(jì)劃
- 創(chuàng)建積極班級(jí)氛圍的方法計(jì)劃
- 分析生產(chǎn)數(shù)據(jù)提升決策效率計(jì)劃
- 文化沙龍與講座安排計(jì)劃
- 生物課堂小組合作學(xué)習(xí)安排計(jì)劃
- 媒體蛻變:電商新篇章-探索傳統(tǒng)媒體電商化新模式
- 初中數(shù)學(xué)一次函數(shù)相關(guān)知識(shí)點(diǎn)
- 岳池離婚協(xié)議書范本2024標(biāo)準(zhǔn)版
- 應(yīng)急物質(zhì)儲(chǔ)備協(xié)議書范文范本
- 小學(xué)三通兩平臺(tái)匯報(bào)
- 加油加氣站員工手冊(cè)
- 科研的思路與方法
- 山東聯(lián)通公司招聘筆試題
- 2024年新智認(rèn)知數(shù)字科技股份有限公司招聘筆試參考題庫(kù)含答案解析
- 金屬探測(cè)器檢測(cè)記錄
- 2024年供應(yīng)鏈管理競(jìng)賽考試題庫(kù)
- 三年級(jí)語(yǔ)文下冊(cè)第二單元群文閱讀教學(xué)設(shè)計(jì)
- 習(xí)思想教材配套練習(xí)題 第七章 社會(huì)主義現(xiàn)代化建設(shè)的教育、科技、人才戰(zhàn)略
- led顯示屏工藝流程
- 護(hù)理學(xué)本科教育標(biāo)準(zhǔn)及專業(yè)認(rèn)證
評(píng)論
0/150
提交評(píng)論