天津网络广告公司,seo小白入门,商场设计案例分析,做机械网站问题概述
在微服务架构中一定要预防微服务雪崩问题#xff0c;微服务雪崩问题就是指在微服务架构中#xff0c;当一个服务出现故障时#xff0c;由于服务之间的依赖关系#xff0c;故障可能会传播到其他服务#xff0c;从而导致了大规模的服务失败#xff0c;系统无法正…问题概述
在微服务架构中一定要预防微服务雪崩问题微服务雪崩问题就是指在微服务架构中当一个服务出现故障时由于服务之间的依赖关系故障可能会传播到其他服务从而导致了大规模的服务失败系统无法正常运行。这种情况就像雪崩一样因为最初的一个小问题最终引发了整个系统的崩溃。
简单来说微服务雪崩就是微服务之间相互调用因为调用链中的一个服务故障引起整个链路都无法访问的情况 熔断当某个异常条件被触发直接熔断整个服务而不是一直等到此服务超时为了防止防止整个系统的故障而采用了一些保护措施过载保护。比如A服务的X功能依赖B服务的某个接口当B服务接口响应很慢时A服务X功能的响应也会被拖慢进一步导致了A服务的线程都卡在了X功能上A服务的其它功能也会卡主或拖慢。此时就需要熔断机制即A服务不在请求B这个接口而可以直接进行降级处理。
降级 服务器压力剧增时根据当前业务情况以及流量对一些服务和页面进行有策略的降级。以此缓解服务器资源的压力以保证核心业务的正常运行同时也保证了客户和大部分客户得到正确的响应
解决方案
常用的预防微服务雪崩的方法有
超时处理设定超时时间请求超过一定时间没有响应就返回错误信息不会无休止的等待
熔断降级当服务的异常数或异常比例超过了预设的阈值熔断器就会进入开启状态暂时中断对该服务的请求此时走降级方法能够快速响应确保系统的基本功能能够继续运行
限流限制对服务的请求速率避免短时间内大量的请求导致系统崩溃
线程池隔离给要请求的资源分配一个线程池线程池去控制请求数量
信号量隔离使用计数器模式记录请求资源的并发线程数量达到信号量上限时禁止新的请求信号隔离适合同步请求控制并发数比如对文件的下载并发数进行控制
大多场景都适合使用线程池隔离对于需要同步操作控制并发数的场景可以使用信号量隔离
Sentinel解决熔断降级
什么是SentinelSentinel (分布式系统的流量防卫兵) 是阿⾥开源的⼀套⽤于服务容错的综合性解决⽅案。它以流量为切⼊点, 从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性
本项目中使用Sentinel实现限流、熔断等机制预防微服务雪崩
熔断降级是微服务保护的一种方法当使用Feign进行远程调用在客户端通过熔断降级措施进行微服务保护
如orders-manager订单服务请求customer查询地址簿在进行feign远程调用过程时出现异常将走降级方法当异常比例或异常数达到一定的阈值将出发熔断熔断期间将直接走降级逻辑快速响应
在feign进行远程调用服务的同时Sentinel会一直对使用SentinelResource注解标注的资源进行流量控制和熔断降级SentinelResource注解的属性value--用于定义资源的名称Sentinel对其进行流量控制和熔断降级fallback降级方法但是异常不是因为限流和熔断等blockHandler出发限流、熔断时执行的降级方法
实例
Component
Slf4j
public class CustomerClient {Resourceprivate AddressBookApi addressBookApi;SentinelResource(value getAddressBookDetail, fallback detailFallback, blockHandler detailBlockHandler)public AddressBookResDTO getDetail(Long id) {log.error(根据id查询地址簿id:{}, id);// 调用其他微服务方法AddressBookResDTO detail addressBookApi.detail(id);return detail;}//执行异常走public AddressBookResDTO detailFallback(Long id, Throwable throwable) {log.error(非限流、熔断等导致的异常执行的降级方法id:{},throwable:, id, throwable);return null;}//熔断后的降级逻辑public AddressBookResDTO detailBlockHandler(Long id, BlockException blockException) {log.error(触发限流、熔断时执行的降级方法id:{},blockException:, id, blockException);return null;}
}
当customer服务恢复之后熔断时间结束此时会再次尝试请求customer如果成功请求将关闭熔断恢复原来的链路否则将再次走降级逻辑 关于Sentinel实现熔断降级还可以看服务熔断降级 Sentinel(保姆级)_sentinel 熔断降级-CSDN博客
熔断降级貌似还有Hystrix可以实现之后可以再去了解