成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談服務接口的高可用設計

開發 架構
我們說過高可用的本質是系統是否具備應對和規避風險的能力,那么從這個角度出發來設計高可用接口的有以下幾個關鍵因素:Dependence(依賴)、Probability(概率)、Time(時長)、Scope(范圍)。

作者:京東零售 王磊

前言

作為一個后端研發人員,開發服務接口是我正常不過的工作了,這些接口不管是面向前端HTTP或者是供其他服務RPC遠程調用的,都繞不開一個共同的話題就是“高可用”,接口開發往往看似簡單,但保證高可用這塊實現起來卻不并沒有想想的那么容易,接下來我們就看一下,一個高可用的接口是該考慮哪些內容,同時文中有不足的歡迎批評指正。

到底啥是高可用

用一句簡單的話來概就是我們的系統具不具備應對和規避風險的能力。

為啥做高可用

1. 程序都是有人開發的,在開發過程中會犯錯從而導致線上事故的發生
2. 系統運行依賴各種運行環境:CPU、內存、硬盤、網絡等等,而這些都有可能損壞
3. 業務拉新用戶正在注冊賬號,結果注冊接口掛了用戶體驗受影響
4. 雙十一、618等大促大量用戶下單,結果下單服務接口掛了GMV受影響等等
5. 其他未知因素等等
總之為了應對這些不可控因素的發生,我們必須要做高可用

高可用的關鍵點

我們說過高可用的本質是系統是否具備應對和規避風險的能力,那么從這個角度出發來設計高可用接口的有以下幾個關鍵因素:Dependence(依賴)、Probability(概率)、Time(時長)、Scope(范圍)

1. 依賴的資源相對少
2. 風險的概率足夠低
3. 影響的范圍足夠小
4. 影響時長足夠短

接口高可用設計的幾個原則

結合這些關鍵點,我們來看一下具體具體注意事項

1、控制依賴

能少依賴就少依賴,能不強依賴就不強依賴

少依賴
例如:日常每分鐘10個請求,查詢Mysql數據即可滿足,此時盲目引入Redis中間件,不僅浪費資源而且增加系統復雜性

弱依賴
例如:用戶注冊服務強依賴新用戶優惠券發放服務,當優惠券發放服務故障后,整個注冊不可用,好的方式是采用弱依賴,使用異步化的
方式,這樣優惠券發送服務不可用時,不會影響注冊鏈路。

2、避免單點

避免單點故障的核心是通過備份或者冗余快速的進行容錯

1. 我們采用多機房多實力部署我們應用來保障故障風險分攤,一旦有一臺服務器出現問題,其他服務仍然能夠繼續支撐我們的服務
2. 每次上線我們都會保留上一次上線發布版本,這樣一旦上線的程序出現問題我們能夠快速回滾到上一版本
3. 每個接口至少保障2人知道相關業務,一旦線上服務出現問題,其中任何一人一個能夠快速處理相關線上問題
4. 不管是Mysql還是Redis等中間件都支持數據主備機群部署

類似的例子很多這里就不再一一列舉了

3、負載均衡

將風險進行分攤避免分險擴散

例如:無論是Ngnix或者JSF的,其負載均衡目的就是盡量的將流量分散到不同的服務器節點上,這樣可以有效的保障單節點因系統瓶頸
問題而引發一系列的風險。

像上面這個例子我想每個研發人員都知道也都會這么做,但是是不是所有的場景我們都考慮到均衡這個問題?

例如:通常為了提高讀并發的能力,我們會把數據緩存到JIMDB中,但是因為緩存的key出現了熱點數據導致JIMDB單分片負載過高,恰
好,這個分片上也緩存了其他數據,但是因為CPU負載過高,導致查詢性能變差,大量的超時,影響了業務。所以,我們在接口設計
的時候,假如遇到類似場景,也要充分考慮數據存儲的均衡性,同時針對熱點數據做好監控,隨時支持動態均衡。

4、資源隔離

隔離的目的將風險控制在可控范圍內,避免風險擴散

例如:接口部署之間服務部署物理上是相互隔離的,避免單機房或者單服務器出現故障影響整個服務

例如:我們在存儲業務數據的時候會將數據分庫分表,數據通過不同分片存儲,這樣就不會導致某個服務器掛掉影響到整個服務

5、接口限流

限流是一種保護措施,目的是將風險控制在可控范圍內

我們在開發接口的時候,一定要結合業務流量情況進行限流措施,限流一方面處于對自身服務資源的保護,同時也是對依賴資源的一種
保護措施。

目前集團JSF在流量控制這塊已經有了對應的限流處理能力,同時我們也可以結合實際業務進行限流模塊的開發。

6、服務熔斷

熔斷也是一種保護措施,目的是將風險控制在可控范圍內,避免風險擴散

例如:經常我們服務A會同時調用B、C、D多個服務,當我們依賴的服務其中一個出現故障或者性能下降的時候,就是導致整體服務
可用率下降,所以我們在開發此類服務的時候,一定要注意接口之間的隔離。我們可以利用類似Hystrix組件實現,也可以借助DUCC
進行手動隔離。

其實熔斷也是一種控制資源依賴的一種,將強依賴降級為弱依賴

7、異步處理

將同步操作轉為異步操作

例如:用戶頁面領取一些權益,針對領取這個服務在大促期間因為用戶流量較大,為了避免系統負載,此時采用MQ異步接收用戶領取
請求然后進行優惠券發放,這樣不僅極大的減少了事故的影響范圍,也減少問題發生概率。

8、降級方案

服務降級屬于一種問題發生后的補救措施,通過服務降級可以減少一部分風險影響范圍

對于重要的服務接口我們都要具備完善的降級方案,這里需要說明的是,降級有損的,我們一定要在系統開發前就要考慮各種問題
發生的可能,降級的前提是通過降級非核心業務保證核心業務運行。

例如:大促峰值期間,一般會提前降級掉很多功能,同時限流,主要是為了保護峰值絕大部分人的交易支付體驗。

9、灰度發布

通過灰度發布降低風險影響范圍

例如:我們上線一個新服務,通過一定的灰度策略,讓用戶先行體驗新版本的應用,通過收集這部分用戶對新版本應用的反饋以及
對新版本功能、性能、穩定性等指標進行評論,進而決定繼續放大新版本投放范圍直至全量升級或回滾至老版本。根據線上反饋結果,
做到查漏補缺,發現重大問題,可回滾“舊版本”

10、混沌工程

通過提前對系統進行一些破壞性的手段,提前發現潛在問題

例如:一個復雜接口系統依賴了太多的服務和組件,這些組件隨時隨地都可能會發生故障,而一旦它們發生故障,會不會如蝴蝶效應
一般造成整體服務不可用呢,我們并不知道,因此我們可以借助泰山平臺混沌工程進行演練,針對發生的場景制定各種預案,將風險
控制在可控范圍內。

責任編輯:武曉燕 來源: 京東云
相關推薦

2017-09-13 13:42:09

微服務緩存架構

2018-01-12 14:20:37

數據庫MySQL高可用架構

2019-08-27 15:56:44

MySQL 互聯網數據庫

2013-09-09 09:39:02

云數據庫京東云

2021-03-09 20:52:01

架構無狀態服務

2020-12-09 09:21:41

微服務架構數據

2019-09-25 09:50:29

高可用微服務系統

2025-03-03 04:20:00

高可用架構冗余法則

2022-10-20 12:04:08

2021-05-24 09:28:41

軟件開發 技術

2017-09-25 12:11:14

高可用微服務架構

2021-09-17 07:51:24

Keepalived服務高可用

2015-09-23 09:35:51

數據中心網絡系統

2019-08-08 10:18:15

運維架構技術

2024-12-11 08:35:55

2020-07-24 08:50:17

Redis數據庫

2024-07-25 08:39:48

2023-12-20 09:26:20

高可用高吞吐高擴展性

2022-10-09 14:15:42

短鏈設計

2025-05-26 03:15:00

接口高可用框架
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区三区在线 | 毛片一级片 | 在线色网| 国产乱码精品一区二区三区中文 | 日韩免费三级 | 久久国 | 孕妇一级毛片 | 亚洲永久 | 中文字幕在线观看www | 精品国产乱码久久久 | 在线亚洲一区 | av色站| 国产视频精品免费 | 久久草视频 | av网站观看 | 狠狠色狠狠色综合系列 | 日韩视频观看 | 精产国产伦理一二三区 | 视频一区二区三区在线观看 | 在线看国产| 亚洲国产精品日韩av不卡在线 | 成人免费高清 | 日韩波多野结衣 | 男女视频在线观看免费 | 精品1区2区3区4区 | 亚洲人成人一区二区在线观看 | 亚洲精品欧美精品 | 日韩精品一区二区三区第95 | 久久精品国产一区二区电影 | 亚洲欧美精品久久 | 精品久久精品 | 亚洲一区二区三区视频 | 久久手机在线视频 | 视频一区在线 | 中文字幕在线二区 | 国产成人精品综合 | 成人免费观看男女羞羞视频 | 国产乱码精品1区2区3区 | a级片在线观看 | 免费一区| 亚洲免费视频播放 |