什么是服务降级?springCloud如何实现?

什么是服务降级?springCloud如何实现?,第1张

服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。比如电商平台,在针对618、双11等高峰情形下采用部分服务不出现或者延时出现的情形。

二、实现方式

我在spring Cloud项目中,使用了两种方式处理降级操作。

(1)使用feign组件完成降级操作,到内容提供者无法提供服务时, 消费者会调用降级操作,返回服务不可用等信息,或者返回提前准备好的静态页面。 调用的降级处理方法如下:

1@Component

2public class FeignClientFallbackFactory implements FallbackFactory<SchedualServiceHi> { 

3    //    打印日志

4    private static final Logger print = LoggerFactory.getLogger(FeignClientFallbackFactory.class) 

5    //降级处理方式 

6    @Override 

7    public SchedualServiceHi create(Throwable throwable) {

8        return new SchedualServiceHi() { 

9            @Override

10            public String mm(@RequestParam("uname") String uname, @RequestParam("upwd") String upwd) {

11                print.info("fallbackreason 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    } 

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.zhihu.com/p/69635613

代码应该是$taskset-c-p。

linux服务器怎么降低内核cpu进程,获知Linux的进程运行在哪个CPU内核上的当你在多核NUMA处理器上运行需要较高性能的HPC(高性能计算)程序或非常消耗网络资源的程序时。

CPU/memory的亲和力是限度其发挥最大性能的重要因素之一。

在同一NUMA节点上调度最相关的进程可以减少缓慢的远程内存访问。

像英特尔SandyBridge处理器,该处理器有一个集成的PCIe控制器,你可以在同一NUMA节点上调度网络I/O负载(如网卡)来突破PCI到CPU亲和力限制。

作为性能优化和故障排除的一部分,你可能想知道特定的进程被调度到哪个CPU内核(或NUMA节点)上运行。

这里有几种方法可以找出哪个CPU内核被调度来运行给定的Linux进程或线程。

方法一如果一个进程使用taskset命令明确的被固定(pinned)到CPU的特定内核上,你可以使用taskset命令找出被固定的CPU内核。

复制代码代码如下:$taskset-c-p。

例如,如果你对PID5357这个进程有兴趣:复制代码代码如下:taskset-c-p5357。

pid5357'scurrentaffinitylist:5输出显示这个过程被固定在CPU内核5上。

但是,如果你没有明确固定进程到任何CPU内核,你会得到类似下面的亲和力列表。

pid5357'scurrentaffinitylist:0-11输出表明该进程可能会被安排在从0到11中的任何一个CPU内核。

在这种情况下,taskset不能识别该进程当前被分配给哪个CPU内核,你应该使用如下所述的方法。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/604180.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-11
下一篇2023-07-11

发表评论

登录后才能评论

评论列表(0条)

    保存