50彈力設(shè)計篇之降級_第1頁
50彈力設(shè)計篇之降級_第2頁
50彈力設(shè)計篇之降級_第3頁
50彈力設(shè)計篇之降級_第4頁
50彈力設(shè)計篇之降級_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、極客時間彈力設(shè)計篇之“降級設(shè)計”2018-03-22彈力設(shè)計篇之“降級設(shè)計”- 00:01 / 09:3所謂的降級設(shè)計(Degradation),本質(zhì)是為了解決資源不足和量過大的問題。當(dāng)資源和 量出現(xiàn) 的時候,在有限的資源內(nèi)為了能夠扛住大量的請求, 就需要對的系統(tǒng)進(jìn)行降級操作。也就是,暫時犧牲掉一些東西,保障整個系統(tǒng)的平穩(wěn)運行。我記得我在倫敦參與諾丁山狂歡節(jié)的時候,以及看阿森納英超足球比賽的時候,散場時因為人太多,所有的 系統(tǒng)( 車,地鐵)完全免費,就是為了讓人通行得更快。而且早在散場前,場外就備著一堆 車和地鐵了,這樣就是為了在最短時間內(nèi)把人疏散掉。雖然虧掉了一些錢,但是相比因為 擁塞造成道

2、路交通擁塞以及還可能出現(xiàn)的一些意外情況所造成的社會成本的損失, 免費策略真是很明智的做法。與此類似, 的系統(tǒng)在應(yīng)對一些突 況的時候也需要這樣的降級流程。一般來說, 的降級需要犧牲掉的東西有:降低一致性。從強一致性變成最終一致性。停止次要功能。停止不重要的功能,從而 出 的資源。簡化功能。把一些功能簡化掉,比如,簡化業(yè)務(wù)流程,或是不再返回全量數(shù)據(jù),只返回部分?jǐn)?shù)據(jù)。降低一致性要清楚地認(rèn)識到,這世界上大多數(shù)系統(tǒng)并不是都需要強一致性的。對于降低一致性,把強一致性變成最終一致性的做法可以有效地 資源,并且讓系統(tǒng)運行得更快,從而可以扛住更大的流量。一般來說,會有兩種做法,一種是簡化流程的一致性,一種是降低

3、數(shù)據(jù)的一致性。使用異步簡化流程舉個例子,比如 的下單交易系統(tǒng),在強一致的情況下,需要結(jié)算賬單,扣除庫存,扣除賬戶上的余額(或發(fā)起支付),最后進(jìn)行發(fā)貨流程,這一系列的操作。如果需要是強一致性的,那么就會非常慢。尤其是支付環(huán)節(jié)可能會涉及 方面的接口性能,就像雙11那樣, 方面出問題會導(dǎo)致支付不成功,而訂單流程不能往下走。在系統(tǒng)降級時, 可以把這一系列的操作做成異步的,快束結(jié)算訂單,不占庫存,然后把 支付降級成用戶到付,這樣就省去支付環(huán)節(jié),然后批量處理用戶的訂單,向用戶發(fā)貨,用戶貨到付款。極客時間如上圖所示,一開始需要的全同步的方式,降級成了全異步的方式,庫存從單筆強一致性也變成了多筆最終一致性,如

4、果庫存不夠了,就只能根據(jù)先來后到取消訂單了。而支付也從最開始的下單請求時的強一致性,變成了用戶到付的最終一致性。一般來說,功能降級都有可能會損害用戶的體驗,所以,最好給出友好的用戶提示。比如,“系統(tǒng)當(dāng)前繁忙,您的訂單已收到, 正努力為您處理訂單中, 會盡快給您發(fā)送訂單確認(rèn)通知還請見諒”諸如此類的提示信息。降低數(shù)據(jù)的一致性降低數(shù)據(jù)的一致性一般來說會使用緩存的方式,或是直接就去掉數(shù)據(jù)。比如,在頁面上不顯示庫存的具體數(shù)字,只顯示有還是沒有庫存這兩種狀態(tài)。對于緩存來說,可以有效地降低數(shù)據(jù)庫的壓力,把數(shù)據(jù)庫的資源交給更重要的業(yè)務(wù),這樣就能讓系統(tǒng)更快速地運行。對于降級后的系統(tǒng),不再通過數(shù)據(jù)庫獲取數(shù)據(jù),而是

5、通過緩存獲取數(shù)據(jù)。關(guān)于緩存的設(shè)計模式,我在CoolS 中有一篇叫緩存更新的套路中講述過緩存的幾種更新模式,大家可以前往一讀。在功能降級中, 一般使用Cache Aside模式或是Read Through模式。也就是下圖所示的這個策略。失效:應(yīng)用程序先從cache取數(shù)據(jù),沒有得到,則從數(shù)據(jù)庫中取數(shù)據(jù),成功后,放到緩存中。命中:應(yīng)用程序從cache中取數(shù)據(jù),取到后返回。更新:先把數(shù)據(jù)存到數(shù)據(jù)庫中,成功后,再讓緩存失效。Read Through 模式就是在查詢操作中更新緩存,也就是說,當(dāng)緩存失效的時候(過期或LRU換出),Cache Aside是由調(diào)用方負(fù)責(zé)把數(shù)據(jù)加載入緩存,而Read Throug

6、h則用緩存服務(wù)自己來加載,從而對應(yīng)用方是透明的。停止次要的功能停止次要的功能也是一種非常有用的策略。把一些不重要的功能給暫時停止掉,讓系統(tǒng) 出 的資源來。比如, 中的搜索功能,用戶的評論功能,等等。等待 的峰值過去后, 再把這些功能給恢復(fù)回來。當(dāng)然,最好不要停止次要的功能,首先可以限制次要的功能的流量,或是把次要的功能 成簡單的功能,最后如果量太大了, 才會進(jìn)入停止功能的狀態(tài)。停止功能對用戶會帶來一些用戶體驗的問題,尤其是要停掉一些可能對于用戶來說是非常重要的功能。所以,如果可能,最好給用戶一些補償,比如把用戶切換到一個送積分卡,或是紅包抽獎的網(wǎng)頁上,有限地補償一下用戶。簡化功能關(guān)于功能的簡化

7、上,上面的下單流程中已經(jīng)提到過相應(yīng)的例子了。而且,從緩存中返回數(shù)據(jù)也是其中一個。這里再提一個,就是一般來說,一個API會有兩個版本,一個版本返回全量數(shù)據(jù),另一個版本只返回部分或最小的可用的數(shù)據(jù)。舉個例子,對于一個文章,一個API會把商品詳情頁或文章的內(nèi)容和所有的評論都返回到前端。那么在降級的情況下, 就只返回商品信息和文章內(nèi)容,而不返回用戶評論了,因為用戶評論會涉及 的數(shù)據(jù)庫操作。所以,這樣可以降級設(shè)計的要點的數(shù)據(jù)資源。而商品信息或文章信息可以放在緩存中,這樣又能 出 的資源給交易系統(tǒng)這樣的需要 數(shù)據(jù)庫資源的業(yè)務(wù)使用。對于降級,一般來說是要犧牲業(yè)務(wù)功能或是流程,以及一致性的。所以, 需要對業(yè)務(wù)

8、做非常仔細(xì)的梳理和分析。 很難通過不侵入業(yè)務(wù)的方式來做到功能降級。在設(shè)計降級的時候,需要清楚地定義好降級的關(guān)鍵條件,比如,吞吐量過大 響應(yīng)時間過慢 失敗次數(shù)多過,有網(wǎng)絡(luò)或是服務(wù)故障,等等,然后做好相應(yīng)的應(yīng)急預(yù)案。這些預(yù)案最好是寫成代碼可以快速地自動化或半自動化執(zhí)行的。功能降級需要梳理業(yè)務(wù)的功能,哪些是mus ve的功能,哪些是nice-to-have的功能;哪些是必需要死保的功能,哪些是可以犧牲的功能。而且需要在事前設(shè)計好可以簡化的或是用來應(yīng)急的業(yè)務(wù)流程。當(dāng)系統(tǒng)出問題的時候,就需要走簡化應(yīng)急流程。極客時間降級的時候,需要犧牲掉一致性,或是一些業(yè)務(wù)流程:對于讀操作來說,使用緩存來解決,對于寫操作

9、來說,需要異步調(diào)用來解決。并且, 需要以方便對賬,以免漏掉或是和正常的流程 。的方式 下來,這樣降級的功能的開關(guān)可以是一個系統(tǒng)的配置開關(guān)。做成配置時,你需要在要降級的時候推送相應(yīng)的配置。另樣可以由上游調(diào)用者來驅(qū)動。式是,在對外服務(wù)的API上有所區(qū)分(方法簽名或是開關(guān)參數(shù)),這比如:一個網(wǎng)關(guān)在限流時,在協(xié)議頭中加入了一個限流程度的參數(shù),讓后端服務(wù)能知道限流在發(fā)生中。當(dāng)限流程度達(dá)到某個值時,或是限流時間超過某個值時,就自動開始降級,直到限流好轉(zhuǎn)。對于數(shù)據(jù)方面的降級,需要前端程序的配合。一般來說,前端的程序可以根據(jù)后端傳來的數(shù)據(jù)來決定展示哪些界面模塊。比如,當(dāng)前端收不到商品評論時,就不展示。為了區(qū)分

10、本來就沒有數(shù)據(jù),還是因為降級了沒有數(shù)據(jù)的兩種情況,在協(xié)議頭中也應(yīng)該加上降級的 。因為降級的功能平時不會總是會發(fā)生,屬于應(yīng)急的情況,所以,降級的這些業(yè)務(wù)流程和功能有可能長期不用而出現(xiàn)bug或問題,對此,需要在平時做一些演練。小結(jié)好了, 來總結(jié)一下的主要內(nèi)容。首先,降級設(shè)計本質(zhì)上是為了解決資源不足和 量過大的問題。降級的方法有降低一致性 停止次要功能和簡化功能。最后,我總結(jié)了降級設(shè)計的要點。下篇文章中,我將總結(jié)整個彈力設(shè)計篇。希望對你有幫助。也歡迎你 一下你實現(xiàn)過怎樣的降級機(jī)制?有沒有和限流機(jī)制配合?給出了分布式系統(tǒng)設(shè)計模式系列文章的目錄,希望你能在這個列表里找到自己感彈力設(shè)計篇認(rèn)識故障和彈力設(shè)計

11、設(shè)計Bulkheads異步通訊設(shè)計Asynchronous冪等性設(shè)計Idempotency的內(nèi)容。服務(wù)的狀態(tài)Se補償事務(wù)Compensating Tran重試設(shè)計Retry熔斷設(shè)計Circuit Breaker限流設(shè)計Throttle降級設(shè)計degradation彈力設(shè)計總結(jié)ion管理設(shè)計篇分布式鎖Distributed Lock配置中心Confgur ation Management邊車模式Sidecar服務(wù)網(wǎng)格Service Mesh網(wǎng)關(guān)模式Gateway部署升級策略性能設(shè)計篇緩存Cache異步處理Asynchronous數(shù)據(jù)庫擴(kuò)展秒殺Flash Sales邊緣計算Edge Computi

12、ng丁英才2018-03-23耗子叔的文章給人行云流水之感 每篇文章從 介紹 應(yīng)用場景 分例介紹 架構(gòu)補圖到篇末小節(jié) 不僅詳略得當(dāng) 而且讀起來感覺暢快 最近響應(yīng)耗子叔號召 重溫基礎(chǔ) tcp/ip 詳解 書是好書但沒有暢快的感覺 耗子叔要不按你風(fēng)格寫本基礎(chǔ)的書 會幫助 的人作者回復(fù)2018-03-27TCP/IP的 我寫在CoolS 上了Geek_122dd92018-04-23極客時間可以理解為TCC嗎來2018-06-09關(guān)于降級突然想到了生活中一個類似降級的場景現(xiàn)在小飯館都支持網(wǎng)上訂餐 當(dāng)餐廳內(nèi)客人不多的時候 餐廳 或者服務(wù)員會去出去送餐 而當(dāng)餐廳內(nèi)客戶突然增多 服務(wù)員忙不過來的時候 一般

13、會進(jìn)行降級 降級的策略是將外賣配送交給第 來配送 或者在某個時間段內(nèi)暫不支持網(wǎng)上訂餐 這種情況類似于功能降級 還有一個場景就是關(guān)于餐廳炒菜 當(dāng)餐廳內(nèi)食客少的時候 大廚一般會現(xiàn)點現(xiàn)炒 而當(dāng)食客多忙不過來的時候 一般會提前將菜炒好 客人點完就可以吃到 將熱菜降級為快餐 這種情況類似于服務(wù)降級 純屬個人理解 不妥 還請見諒來2018-06-09現(xiàn)在的降級分為功能降級和服務(wù)降級目前將降級開關(guān)放到配置中心能降級1、通過降級開關(guān)控制功能可用不可用 一般為頁面和按鈕2、簡化業(yè)務(wù)操作流程 當(dāng)降級后簡化業(yè)務(wù)操作步驟 快速完成業(yè)務(wù)操作二、服務(wù)降級1、讀降級 降級前會讀緩存 緩存中不存在的話讀數(shù)據(jù)庫 降級后讀緩存 緩存中不存在的話 返回默認(rèn)值 不再讀數(shù)據(jù)庫2、寫降級 將之前的同步寫數(shù)據(jù)庫降級為先寫緩存 然后異步寫庫3、服務(wù)調(diào)用降級 之前兩個系統(tǒng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論