日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談服務(wù)接口的高可用設(shè)計(jì)

作者:京東零售 王磊

前言

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

到底啥是高可用

用一句簡單的話來概就是我們的系統(tǒng)具不具備應(yīng)對和規(guī)避風(fēng)險的能力。

為啥做高可用

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

高可用的關(guān)鍵點(diǎn)

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

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

接口高可用設(shè)計(jì)的幾個原則

結(jié)合這些關(guān)鍵點(diǎn),我們來看一下具體具體注意事項(xiàng)

1、控制依賴

能少依賴就少依賴,能不強(qiáng)依賴就不強(qiáng)依賴

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

弱依賴
例如:用戶注冊服務(wù)強(qiáng)依賴新用戶優(yōu)惠券發(fā)放服務(wù),當(dāng)優(yōu)惠券發(fā)放服務(wù)故障后,整個注冊不可用,好的方式是采用弱依賴,使用異步化的
方式,這樣優(yōu)惠券發(fā)送服務(wù)不可用時,不會影響注冊鏈路。

2、避免單點(diǎn)

避免單點(diǎn)故障的核心是通過備份或者冗余快速的進(jìn)行容錯

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

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

3、負(fù)載均衡

將風(fēng)險進(jìn)行分?jǐn)偙苊夥蛛U擴(kuò)散

例如:無論是Ngnix或者JSF的,其負(fù)載均衡目的就是盡量的將流量分散到不同的服務(wù)器節(jié)點(diǎn)上,這樣可以有效的保障單節(jié)點(diǎn)因系統(tǒng)瓶頸
問題而引發(fā)一系列的風(fēng)險。

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

例如:通常為了提高讀并發(fā)的能力,我們會把數(shù)據(jù)緩存到JIMDB中,但是因?yàn)榫彺娴膋ey出現(xiàn)了熱點(diǎn)數(shù)據(jù)導(dǎo)致JIMDB單分片負(fù)載過高,恰
好,這個分片上也緩存了其他數(shù)據(jù),但是因?yàn)镃PU負(fù)載過高,導(dǎo)致查詢性能變差,大量的超時,影響了業(yè)務(wù)。所以,我們在接口設(shè)計(jì)
的時候,假如遇到類似場景,也要充分考慮數(shù)據(jù)存儲的均衡性,同時針對熱點(diǎn)數(shù)據(jù)做好監(jiān)控,隨時支持動態(tài)均衡。

4、資源隔離

隔離的目的將風(fēng)險控制在可控范圍內(nèi),避免風(fēng)險擴(kuò)散

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

例如:我們在存儲業(yè)務(wù)數(shù)據(jù)的時候會將數(shù)據(jù)分庫分表,數(shù)據(jù)通過不同分片存儲,這樣就不會導(dǎo)致某個服務(wù)器掛掉影響到整個服務(wù)

5、接口限流

限流是一種保護(hù)措施,目的是將風(fēng)險控制在可控范圍內(nèi)

我們在開發(fā)接口的時候,一定要結(jié)合業(yè)務(wù)流量情況進(jìn)行限流措施,限流一方面處于對自身服務(wù)資源的保護(hù),同時也是對依賴資源的一種
保護(hù)措施。

目前集團(tuán)JSF在流量控制這塊已經(jīng)有了對應(yīng)的限流處理能力,同時我們也可以結(jié)合實(shí)際業(yè)務(wù)進(jìn)行限流模塊的開發(fā)。

6、服務(wù)熔斷

熔斷也是一種保護(hù)措施,目的是將風(fēng)險控制在可控范圍內(nèi),避免風(fēng)險擴(kuò)散

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

其實(shí)熔斷也是一種控制資源依賴的一種,將強(qiáng)依賴降級為弱依賴

7、異步處理

將同步操作轉(zhuǎn)為異步操作

例如:用戶頁面領(lǐng)取一些權(quán)益,針對領(lǐng)取這個服務(wù)在大促期間因?yàn)橛脩袅髁枯^大,為了避免系統(tǒng)負(fù)載,此時采用MQ異步接收用戶領(lǐng)取
請求然后進(jìn)行優(yōu)惠券發(fā)放,這樣不僅極大的減少了事故的影響范圍,也減少問題發(fā)生概率。

8、降級方案

服務(wù)降級屬于一種問題發(fā)生后的補(bǔ)救措施,通過服務(wù)降級可以減少一部分風(fēng)險影響范圍

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

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

9、灰度發(fā)布

通過灰度發(fā)布降低風(fēng)險影響范圍

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

10、混沌工程

通過提前對系統(tǒng)進(jìn)行一些破壞性的手段,提前發(fā)現(xiàn)潛在問題

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


當(dāng)前名稱:淺談服務(wù)接口的高可用設(shè)計(jì)
標(biāo)題來源:http://www.dlmjj.cn/article/dheiisc.html