0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)高可用的接口是該考慮哪些內(nèi)容

OSC開(kāi)源社區(qū) ? 來(lái)源:京東云開(kāi)發(fā)者 ? 2023-01-17 11:18 ? 次閱讀

前言

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

到底啥是高可用

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

為啥做高可用

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

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

我們說(shuō)過(guò)高可用的本質(zhì)是系統(tǒng)是否具備應(yīng)對(duì)和規(guī)避風(fēng)險(xiǎn)的能力,那么從這個(gè)角度出發(fā)來(lái)設(shè)計(jì)高可用接口的有以下幾個(gè)關(guān)鍵因素:Dependence(依賴)、Probability(概率)、Time(時(shí)長(zhǎng))、Scope(范圍) 1. 依賴的資源相對(duì)少 2. 風(fēng)險(xiǎn)的概率足夠低 3. 影響的范圍足夠小 4. 影響時(shí)長(zhǎng)足夠短

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

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

1、控制依賴

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

少依賴 例如:日常每分鐘10個(gè)請(qǐng)求,查詢Mysql數(shù)據(jù)即可滿足,此時(shí)盲目引入Redis中間件,不僅浪費(fèi)資源而且增加系統(tǒng)復(fù)雜性 弱依賴 例如:用戶注冊(cè)服務(wù)強(qiáng)依賴新用戶優(yōu)惠券發(fā)放服務(wù),當(dāng)優(yōu)惠券發(fā)放服務(wù)故障后,整個(gè)注冊(cè)不可用,好的方式是采用弱依賴,使用異步化的 方式,這樣優(yōu)惠券發(fā)送服務(wù)不可用時(shí),不會(huì)影響注冊(cè)鏈路。

2、避免單點(diǎn)

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

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

3、負(fù)載均衡

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

例如:無(wú)論是Ngnix或者JSF的,其負(fù)載均衡目的就是盡量的將流量分散到不同的服務(wù)器節(jié)點(diǎn)上,這樣可以有效的保障單節(jié)點(diǎn)因系統(tǒng)瓶頸 問(wèn)題而引發(fā)一系列的風(fēng)險(xiǎn)。 像上面這個(gè)例子我想每個(gè)研發(fā)人員都知道也都會(huì)這么做,但是是不是所有的場(chǎng)景我們都考慮到均衡這個(gè)問(wèn)題? 例如:通常為了提高讀并發(fā)的能力,我們會(huì)把數(shù)據(jù)緩存到JIMDB中,但是因?yàn)榫彺娴膋ey出現(xiàn)了熱點(diǎn)數(shù)據(jù)導(dǎo)致JIMDB單分片負(fù)載過(guò)高,恰 好,這個(gè)分片上也緩存了其他數(shù)據(jù),但是因?yàn)镃PU負(fù)載過(guò)高,導(dǎo)致查詢性能變差,大量的超時(shí),影響了業(yè)務(wù)。所以,我們?cè)诮涌谠O(shè)計(jì) 的時(shí)候,假如遇到類似場(chǎng)景,也要充分考慮數(shù)據(jù)存儲(chǔ)的均衡性,同時(shí)針對(duì)熱點(diǎn)數(shù)據(jù)做好監(jiān)控,隨時(shí)支持動(dòng)態(tài)均衡。

4、資源隔離

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

例如:接口部署之間服務(wù)部署物理上是相互隔離的,避免單機(jī)房或者單服務(wù)器出現(xiàn)故障影響整個(gè)服務(wù) 例如:我們?cè)诖鎯?chǔ)業(yè)務(wù)數(shù)據(jù)的時(shí)候會(huì)將數(shù)據(jù)分庫(kù)分表,數(shù)據(jù)通過(guò)不同分片存儲(chǔ),這樣就不會(huì)導(dǎo)致某個(gè)服務(wù)器掛掉影響到整個(gè)服務(wù)

5、接口限流

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

我們?cè)陂_(kāi)發(fā)接口的時(shí)候,一定要結(jié)合業(yè)務(wù)流量情況進(jìn)行限流措施,限流一方面處于對(duì)自身服務(wù)資源的保護(hù),同時(shí)也是對(duì)依賴資源的一種 保護(hù)措施。 目前集團(tuán)JSF在流量控制這塊已經(jīng)有了對(duì)應(yīng)的限流處理能力,同時(shí)我們也可以結(jié)合實(shí)際業(yè)務(wù)進(jìn)行限流模塊的開(kāi)發(fā)。

6、服務(wù)熔斷

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

例如:經(jīng)常我們服務(wù)A會(huì)同時(shí)調(diào)用B、C、D多個(gè)服務(wù),當(dāng)我們依賴的服務(wù)其中一個(gè)出現(xiàn)故障或者性能下降的時(shí)候,就是導(dǎo)致整體服務(wù) 可用率下降,所以我們?cè)陂_(kāi)發(fā)此類服務(wù)的時(shí)候,一定要注意接口之間的隔離。我們可以利用類似Hystrix組件實(shí)現(xiàn),也可以借助DUCC 進(jìn)行手動(dòng)隔離。 其實(shí)熔斷也是一種控制資源依賴的一種,將強(qiáng)依賴降級(jí)為弱依賴

7、異步處理

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

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

8、降級(jí)方案

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

對(duì)于重要的服務(wù)接口我們都要具備完善的降級(jí)方案,這里需要說(shuō)明的是,降級(jí)有損的,我們一定要在系統(tǒng)開(kāi)發(fā)前就要考慮各種問(wèn)題 發(fā)生的可能,降級(jí)的前提是通過(guò)降級(jí)非核心業(yè)務(wù)保證核心業(yè)務(wù)運(yùn)行。 例如:大促峰值期間,一般會(huì)提前降級(jí)掉很多功能,同時(shí)限流,主要是為了保護(hù)峰值絕大部分人的交易支付體驗(yàn)。

9、灰度發(fā)布

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

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

10、混沌工程

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

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

編輯:何安

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8257

    瀏覽量

    149953
  • 服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    18482
  • 后端
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    2179

原文標(biāo)題:淺談服務(wù)接口的高可用設(shè)計(jì)

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RGMII接口案例:二個(gè)設(shè)備共享個(gè)PHY

    最近項(xiàng)目中,F(xiàn)PGA通過(guò)多個(gè)RGMII接口與其他設(shè)備通信,在通信的過(guò)程中,有個(gè)RGMII接口對(duì)端設(shè)備始終無(wú)法驅(qū)動(dòng),最后通過(guò)共享
    的頭像 發(fā)表于 11-27 16:47 ?7640次閱讀
    RGMII<b class='flag-5'>接口</b>案例:二<b class='flag-5'>個(gè)</b>設(shè)備共享<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>PHY

    升級(jí)至4K超高清12G-SDI接口時(shí)需要考慮的三個(gè)問(wèn)題

    圖1:高分辨率視頻如果你是名研究視頻切換器、顯示器、路由器、具有串行數(shù)字視頻接口 (SDI) 的格式轉(zhuǎn)換器或分布式放大器燈廣播或?qū)I(yè)視頻設(shè)備的系統(tǒng)設(shè)計(jì)人員,你很有可能考慮過(guò)以下這三個(gè)
    發(fā)表于 11-16 07:10

    嵌入式系統(tǒng)的可用

    設(shè)計(jì)人員正在調(diào)整各種可用體系結(jié)構(gòu),以滿足客戶對(duì)用于下代超級(jí)可靠嵌入式系統(tǒng)應(yīng)用的持久數(shù)據(jù)接口的需求。
    發(fā)表于 07-22 15:07 ?600次閱讀

    淺談Kubernetes集群的可用方案

    性還應(yīng)包含以下兩個(gè)層面的考慮:etcd數(shù)據(jù)存儲(chǔ)的可用性和Kubernetes Master組件的可用
    發(fā)表于 10-11 10:04 ?1次下載
    淺談Kubernetes集群的<b class='flag-5'>高</b><b class='flag-5'>可用</b>方案

    通過(guò)安裝Linux-HA軟件可以實(shí)現(xiàn)Linux雙機(jī)系統(tǒng)的可用性解決方案

    簡(jiǎn)介通過(guò)安裝Linux-HA軟件,可以實(shí)現(xiàn)Linux雙機(jī)系統(tǒng)的可用性解決方案,實(shí)現(xiàn)雙機(jī)系統(tǒng)的熱備份,這篇文章對(duì)于HA做了個(gè)詳細(xì)的解讀。
    的頭像 發(fā)表于 12-20 14:24 ?7510次閱讀
    通過(guò)安裝<b class='flag-5'>該</b>Linux-HA軟件可以實(shí)現(xiàn)Linux雙機(jī)系統(tǒng)的<b class='flag-5'>高</b><b class='flag-5'>可用</b>性解決方案

    阿里云應(yīng)用可用服務(wù)公測(cè)發(fā)布

    產(chǎn)品介紹:?應(yīng)用可用服務(wù) AHAS 是款專注于提高應(yīng)用可用能力的 SaaS 產(chǎn)品,提供應(yīng)用架構(gòu)自動(dòng)探測(cè)、故障注入式
    發(fā)表于 11-28 16:20 ?250次閱讀

    設(shè)計(jì)個(gè)登錄接口我們要考慮哪些地方?

    的時(shí)候,發(fā)現(xiàn)很多同學(xué)雖然都有在簡(jiǎn)歷上寫(xiě):負(fù)責(zé)項(xiàng)目的登錄/注冊(cè)功能模塊的開(kāi)發(fā)和設(shè)計(jì)工作,但是都只是簡(jiǎn)單的實(shí)現(xiàn)了功能邏輯,在安全方面并沒(méi)有考慮太多。 這篇文章主要是和大家聊聊,在設(shè)計(jì)個(gè)
    的頭像 發(fā)表于 06-03 09:36 ?1338次閱讀

    探究Kafka宕機(jī)引發(fā)的可用問(wèn)題

    處理而生的Kafka,所以我直很好奇Kafka的可用實(shí)現(xiàn)和保障。從Kafka部署后,系統(tǒng)內(nèi)部使用的Kafka直運(yùn)行穩(wěn)定,沒(méi)有出現(xiàn)不可用
    的頭像 發(fā)表于 10-20 15:41 ?1400次閱讀

    Nginx可用方案

    可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之,它通常是指,通過(guò)設(shè)計(jì)減少系統(tǒng)不能提供服務(wù)的時(shí)間。如果
    的頭像 發(fā)表于 02-01 09:19 ?445次閱讀

    互聯(lián)網(wǎng)三并發(fā)、高性能、可用)中的可用

    那么這么多組件怎么做可用設(shè)計(jì)呢,其實(shí)任何組件要做可用,都離不開(kāi)「冗余」和「自動(dòng)故障轉(zhuǎn)移」,眾所周知單點(diǎn)是
    的頭像 發(fā)表于 02-14 09:27 ?3512次閱讀

    帶寬數(shù)字內(nèi)容保護(hù)(HDCP)系統(tǒng)到HDMI的映射

    保護(hù)的接口上流經(jīng)個(gè)樹(shù)形的 HDCP 接收器拓?fù)洹1疽?guī)范描述了內(nèi)容保護(hù)機(jī) 制:(1)HDCP 接收器
    發(fā)表于 02-21 18:04 ?0次下載

    個(gè)可用于計(jì)量電容的電路

    這是個(gè)可用于計(jì)量電容的電路。電路類似于以前的儀表電路。它有點(diǎn)區(qū)別,電路使用晶體管而不是邏
    的頭像 發(fā)表于 07-28 15:50 ?428次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>可用</b>于計(jì)量電容的電路

    電源和接口的EMC設(shè)計(jì)考慮

    電源和接口的EMC設(shè)計(jì)考慮
    的頭像 發(fā)表于 10-17 16:38 ?906次閱讀
    電源和<b class='flag-5'>接口</b>的EMC設(shè)計(jì)<b class='flag-5'>考慮</b>

    在配置外部接口的過(guò)程當(dāng)中,需要考慮的因素?

    :在配置外部接口時(shí),安全性是個(gè)重要的考慮因素。需要確保接口的傳輸數(shù)據(jù)的機(jī)密性和完整性,防止數(shù)據(jù)被篡改、泄露或未經(jīng)授權(quán)的訪問(wèn)??梢圆捎眉用芗?/div>
    的頭像 發(fā)表于 12-15 15:46 ?574次閱讀

    接口測(cè)試是測(cè)試什么內(nèi)容

    接口測(cè)試是軟件測(cè)試的個(gè)重要組成部分,主要用于驗(yàn)證系統(tǒng)組件之間的交互是否符合預(yù)期。接口測(cè)試可以確保各個(gè)模塊之間的數(shù)據(jù)傳輸、控制流和錯(cuò)誤處理等方面能夠正常工作。本文將詳細(xì)介紹
    的頭像 發(fā)表于 05-30 15:11 ?908次閱讀