zoukankan      html  css  js  c++  java
  • SpringCloud系列十四:实现容错的手段

    1. 回顾

      前面已用Eureka实现了微服务的注册与发现,Ribbon实现了客户端侧的负载均衡,Feign实现了声明式的API调用。

    2. 实现容错的手段

      如果服务提供者响应非常慢,那么消费者对提供者的请求就会被强制等待,知道提供者响应或超时。

      在高负载场景下,如果不做任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统的崩溃。

      例如,曾经发生过一个案例——某电子商务网站在一个黑色星期五发生过载。过度的并发请求,导致用户支付的请求延迟很久

        都没有响应,在等待很长时间后最终失败。支付失败又导致用户重新刷新页面并再次尝试支付,进一步增加了服务器的负载,

        最终整个系统都崩溃了。

      当依赖的服务不可用时,服务自身会不会被拖垮?这是我们要考虑的问题。

    3. 雪崩效应

      微服务架构的应用系统通常包含多个服务层。微服务之间通过网络进行通信,从而支撑起整个应用系统,因此,微服务之间难免存在

        依赖关系。任何微服务都并非100%可用,网络往往也很脆弱,因此难免有些请求会失败。

      我们常把“基础服务故障”导致“级联故障”的现象称为雪崩效应。雪崩效应描述的是提供者不可用导致消费者不可用,并将不可用逐渐放大的过程。

      比如,A作为服务提供者(基础服务),B作为A的服务消费者,C和D是B的服务消费者。当A不可用引起B的不可用,并将不可用像滚雪球一样

        放大到C和D时,雪崩效应就形成了。

    4. 如何容错

      要想防止雪崩效应,必须有一个强大的容错机制。该容错机制需实现以下两点。

    • 为网络请求设置超时

      正常情况下,一个远程调用一般在几十毫秒内就能得到响应了。如果依赖的服务不可用或网络有问题,那么响应时间就会变得很长(几十秒)

      通常情况下,一次远程调用对应着一个线程/进程。如果响应太慢,这个线程/进程就得不到释放。而线程/进程又对应着系统资源,

        如果得不到释放的线程/进程越积越多,资源就会逐渐会耗尽,最终导致服务的不可用。

      因此,必须为每个网络请求设置超时,让资源尽快释放。

    • 使用断路器模式

      如果对某个微服务的请求有大量超时(常常说明该微服务不可用),再去让新的请求访问该服务已经没有任何意义,只会无谓耗费资源。

        例如,设置了超时时间为1秒,如果短时间内有大量的请求无法在1秒内得到响应,就没有必须再去请求依赖的服务了。

      断路器可理解为对容易导致错误的操作的代理。这种代理能够统计一段时间内调用失败的次数,并决定是正常请求依赖的服务还是直接返回。

      断路器可实现快速失败,如果它在一段时间内检测到许多类似的错误(例如超时),就会在之后的一段时间内,强迫对该服务的调用快速失败,

        即不再请求所依赖的服务。这样,应用程序就无需再浪费CPU时间去等待长时间的超时。

      断路器也可自动诊断依赖的服务是否已经恢复正常。如果发现依赖的服务已经恢复正常,那么就会恢复请求该服务。使用这种方式,

        就可以实现微服务的“自我恢复”——当依赖的服务不正常时打开断路器时快速失败,从而防止雪崩效应;当发现依赖的服务恢复正常时,

        又会恢复请求。

      断路器的大致流程如下:

        > 正常情况下,断路器关闭,可正常请求依赖的服务。

        > 当一段时间内,请求失败率达到一定阈值(例如错误率达到50%,或100次/分钟等),断路器就会打开。此时,不会再去请求依赖的服务。

        > 断路器打开一段时间后,会自动进入“半开”状态。此时,断路器可允许一个请求访问依赖的服务。

          如果该请求能够调用成功,则关闭断路器;否则继续保持打开状态。

    5. 总结

      本文讲解了容错机制的重要性,以及一个良好的容错机制应该实现哪些功能。

      下文将讲解使用Hystrix实现容错。敬请期待~~~

    6. 参考

      周立 --- 《Spring Cloud与Docker微服务架构与实战》

  • 相关阅读:
    阿里巴巴微服务开源项目盘点(持续更新)
    云计算、大数据、编程语言学习指南下载,100+技术课程免费学!这份诚意满满的新年技术大礼包,你Get了吗?
    【机器学习PAI实战】—— 玩转人工智能之综述
    泡沫下的破浪者,智能语音产品到底落地何处?
    我们总结了每个技术团队都会遇到的 4 个难题
    在 Ali Kubernetes 系统中,我们这样实践混沌工程
    云上护航服务—保障云上的尖峰时刻
    本地 vs. 云:大数据厮杀的最终幸存者会是谁?— InfoQ专访阿里云智能通用计算平台负责人关涛
    WAF开放规则定义权:专家策略+用户自定义策略=Web安全
    队列的其本应用_迷官问题
  • 原文地址:https://www.cnblogs.com/jinjiyese153/p/8668829.html
Copyright © 2011-2022 走看看