鍍金池/ 問答/PHP  GO/ 如何實(shí)現(xiàn)服務(wù)降級(jí)處理

如何實(shí)現(xiàn)服務(wù)降級(jí)處理

我在思考一個(gè)問題:服務(wù)如何降級(jí)處理?

比如說,之前有一個(gè)接口,要通過另外3個(gè)接口來確定一個(gè)平均值。假設(shè)啊,不一定合理。要獲取用戶的位置,先去請(qǐng)求高德地圖,然后請(qǐng)求百度地圖,然后請(qǐng)求騰訊地圖。最后三個(gè)數(shù)據(jù)結(jié)果對(duì)比之后返回給客戶端一個(gè)綜合結(jié)果。

那么降級(jí)之后,就只需要請(qǐng)求一個(gè)接口或者直接不請(qǐng)求,把上次緩存的數(shù)據(jù)直接返回給用戶了。

但是一般情況下,就比如就是一個(gè)查DB的請(qǐng)求,如何降級(jí)了?

之前看書有說過,定義多個(gè)接口權(quán)重,比如下面:

  1. 相當(dāng)重要
  2. 重要
  3. 一般
  4. 可要可不要

這樣當(dāng)服務(wù)器負(fù)載不過來的時(shí)候,可以優(yōu)先拋棄level 4->level 3...

但是怎么才算負(fù)載不過來呢,同時(shí),拋棄的規(guī)則應(yīng)該是什么樣的了?

有或者客戶端降級(jí),就是客戶端統(tǒng)計(jì)每個(gè)接口的請(qǐng)求和正常響應(yīng)情況。當(dāng)大量返回500時(shí),說明服務(wù)器負(fù)載高的可以,應(yīng)該避免大量請(qǐng)求??蛻舳酥苯痈嬖V用戶失敗了,而不去請(qǐng)求服務(wù)端

規(guī)則貌似還是:一段時(shí)間內(nèi):

canRequest = requestCount - N * responseCount > 0

就是說當(dāng)正常請(qǐng)求了requestCount個(gè),但是只有responseCount個(gè)成功了,其他都返回失敗了。

有這么玩的嗎?

有人可以具體舉個(gè)生產(chǎn)環(huán)境的例子嗎

回答
編輯回答
兔囡囡

可以提供一個(gè)思路,一個(gè)可用的服務(wù)列表,一個(gè)一場(chǎng)服務(wù)列表,每次只從可用服務(wù)列表頂部去拿服務(wù),這里可以按照不同的規(guī)則給權(quán)重排序什么的,異常的服務(wù)列表,可以開一個(gè)線程去檢測(cè)恢復(fù)情況,如果判斷恢復(fù)了,重新移回正常的服務(wù)列表~

2017年10月15日 22:56
編輯回答
深記你

降級(jí)的實(shí)現(xiàn)方式很多,你這樣的情況適合與熔斷,采用組合熔斷即可

2017年12月2日 02:30