⑴ 對比rpc框架功能1——降級
降級功能基本是rpc框架的標配了,不過對比了一些rpc框架,發現實現方式還是挺不一樣的。
osp是提供了一個配置,如果配置服務為降級,那個這個服務的server端收到請求,直接返回一個降級對應的錯誤碼,client收到這個結果後,可以根據這個錯誤碼做處理,比如返回一些固定數據之類的。
優點:
1 降級配置方式非常靈活,可以根據請求來源配置是否降級。
2 能非常快速方便處理一些場景:比如唯品會大促的時候,把商品評論服務設置為降級,這樣就可以方便的關閉掉商品評論功能了。
3 不同的調用方可以根據降級錯誤碼來做不同的事情,非常的靈活。
缺點:
1 降級了的服務,還是會收到client的請求,對client和server還是有些壓力
sofa沒有看到明確的降級功能。
只是提供了自動故障剔除功能,但是這個功能只是修改server的流量權重,叫他為熔斷更加貼切。
bbo提供了一個mock功能,如果server返回異常的情況下,可以用mock數據替代。
⑵ 什麼是服務降級springCloud如何實現
服務降級,當伺服器壓力劇增的情況下,根據當前業務情況及流量對一些服務和頁面有策略的降級,以此釋放伺服器資源以保證核心任務的正常運行。比如電商平台,在針對618、雙11等高峰情形下採用部分服務不出現或者延時出現的情形。
二、實現方式
我在spring Cloud項目中,使用了兩種方式處理降級操作。
(1)使用feign組件完成降級操作,到內容提供者無法提供服務時, 消費者會調用降級操作,返回服務不可用等信息,或者返回提前准備好的靜態頁面。 調用的降級處理方法如下:
1@Component
2public class FeignClientFallbackFactory implements FallbackFactory<SchealServiceHi> {
3 // 列印日誌
4 private static final Logger print = LoggerFactory.getLogger(FeignClientFallbackFactory.class);
5 //降級處理方式
6 @Override
7 public SchealServiceHi create(Throwable throwable) {
8 return new SchealServiceHi() {
9 @Override
10 public String mm(@RequestParam("uname") String uname, @RequestParam("upwd") String upwd) {
11 print.info("fallback; reason was:", throwable);
12 return "服務報錯了";
13 }
14 };
15 }
16}
(2)也可以使用zuul網關,在spring Cloud自定義一個類實現ZuulFallbackProvider介面,當出現問題,無法正常調用時 ,為服務提供回退響應。
1@Component
2public class MyfaultFallback implements FallbackProvider {
3 @Override
4 public String getRoute() {
5// 表示為哪個服務提供回退,此處表示所有微服務。
6 return "*";
7 }
8
9 @Override
10 public ClientHttpResponse fallbackResponse(String route, Throwable cause) {11 return new ClientHttpResponse() {
12 @Override
13 public HttpStatus getStatusCode() throws IOException {
14// fallback返回的狀態碼
15 return HttpStatus.OK;
16 }
17
18 @Override
19 public int getRawStatusCode() throws IOException {
20 //數字類型的狀態碼,本例返回的是200
21 return this.getStatusCode().value();
22 }
23
24 @Override
25 public String getStatusText() throws IOException {
26 //狀態文本27 return "OK";
28 }
29
30 @Override
31 public void close() {
32
33 }
34
35 @Override
36 public InputStream getBody() throws IOException {
37// 響應體38 return new ByteArrayInputStream("用戶微服務不可用,請稍候再試".getBytes());
39 }
40
41 @Override
42 public HttpHeaders getHeaders() {
43 HttpHeaders headers = new HttpHeaders();
44 headers.setContentType(MediaType.APPLICATION_JSON);
45 MediaType mt = new MediaType("application",
46 "json", Charset.forName("UTF-8"));
47 headers.setContentType(mt);
48 return headers;
49 }
50 };
51 }
52}
三、效果展示
當我們訪問zuul網關時,服務提供者沒有開啟,訪問不到,就會進行降級處理,顯示下面內容。
原文鏈接:https://zhuanlan.hu.com/p/69635613