java 雪崩效应,七、微服务架构中的“雪崩效应”

java 雪崩效应,七、微服务架构中的“雪崩效应”1.雪崩效应在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。其实,在单体服务中,高并发也会导致服务瘫痪。见下一章,Jmeter模拟微服务当中的高并发场景在分布式系统中,由于网络原因或自身的原因,服…

大家好,又见面了,我是你们的朋友全栈君。

1. 雪崩效应

在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络

原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会

出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。

其实,在单体服务中,高并发也会导致服务瘫痪。见下一章,Jmeter模拟微服务当中的高并发场景

在分布式系统中,由于网络原因或自身的原因,服务一般无法保证 100% 可用。如果一个服务出现了

问题,调用这个服务就会出现线程阻塞的情况,此时若有大量的请求涌入,就会出现多条线程阻塞等

待,进而导致服务瘫痪。

由于服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩效应” 。见下图示:

1cc0b480fb55

雪崩效应图示.png

雪崩发生的原因多种多样,有不合理的容量设计,或者是高并发下某一个方法响应变慢,亦或是某

台机器的资源耗尽。我们无法完全杜绝雪崩源头的发生,只有做好足够的容错,保证在一个服务发生问

题,不会影响到其它服务的正常运行。也就是"雪落而不雪崩"。

2. 微服务中常见的容错方案

要防止雪崩的扩散,我们就要做好服务的容错,容错说白了就是保护自己不被猪队友拖垮的一些措施, 常见的服务容错思路有:

隔离

超时

限流

熔断

降级

2.1 隔离

它是指将系统按照一定的原则划分为若干个服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的系统服务。常见的隔离方式有:线程池隔离和信号量隔离.

2.2 超时

在上游服务调用下游服务的时候,设置一个最大响应时间,如果超过这个时间,下游未作出反应,

就断开请求,释放掉线程。

2.3 限流

限流就是限制系统的输入和输出流量已达到保护系统的目的。为了保证系统的稳固运行,一旦达到

的需要限制的阈值,就需要限制流量并采取少量措施以完成限制流量的目的。

2.4 熔断

在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。

服务熔断一般有三种状态:

熔断关闭状态(Closed)

服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制

熔断开启状态(Open)

后续对该服务接口的调用不再经过网络,直接执行本地的fallback方法

半熔断状态(Half-Open)

尝试恢复服务调用,允许有限的流量调用该服务,并监控调用成功率。如果成功率达到预

期,则说明服务已恢复,进入熔断关闭状态;如果成功率仍旧很低,则重新进入熔断关闭状

态。

2.5 降级

降级其实就是为服务提供一个托底方案,一旦服务无法正常调用,就使用托底方案。

3. 常见的容错组件

3.1 Hystrix

Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止

级联失败,从而提升系统的可用性与容错性。

3.2 Resilience4J

Resilicence4J一款非常轻量、简单,并且文档非常清晰、丰富的熔断工具,这也是Hystrix官方推

荐的替代产品。不仅如此,Resilicence4j还原生支持Spring Boot 1.x/2.x,而且监控也支持和

prometheus等多款主流产品进行整合。

3.3 Sentinel

Sentinel 是阿里巴巴开源的一款断路器实现,本身在阿里内部已经被大规模采用,非常稳定。

下面是三个组件在各方面的对比:

Sentinel

Hystrix

resilience4j

隔离策略

信号量隔离(并发线程数限流)

线程池隔离/信号量隔离

信号量隔离

熔断降级策略

基于响应时间、异常比率、异常数

基于异常比率

基于异常比率、响应时间

实时统计实现

滑动窗口(LeapArray)

滑动窗口(基于 RxJava)

Ring Bit Buffer

动态规则配置

支持多种数据源

支持多种数据源

有限支持

扩展性

多个扩展点

插件的形式

接口的形式

基于注解的支持

支持

支持

支持

限流

基于 QPS,支持基于调用关系的限流

有限的支持

Rate Limiter

流量整形

支持预热模式、匀速器模式、预热排队模式

不支持

简单的 Rate Limiter模式

系统自适应保护

支持

不支持

不支持

控制台

提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等

简单的监控查看

不提供控制台,可对接其它监控系统

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158585.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java面试题大全(2021版)

    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~本套Java面试题大全,全的不能再全,哈哈~一、Java基础知识面试题1、Java概述①.何为编程编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。这种人和计算机

  • c语言 hex转str 函数_int printf(const char)

    c语言 hex转str 函数_int printf(const char)voidhexDump(constchar*buf,intlen){ if(len<1||buf==NULL)return; constchar*hexChars="0123456789ABCDEF"; inti=0; charc=0x00; charstr_print_able[17]; charstr_hex_buffe…

  • oracle如何修改用户密码_oracle重置用户名密码

    oracle如何修改用户密码_oracle重置用户名密码轻松搞定Oracle用户密码修改 摘要:服务器更换、数据库移植都会涉及到Oracle用户密码的修改操作,这里给出几段简单的代码,帮您轻松搞定Oracle用户密码的修改操作。 我们假设这样一个应用场景,数据库需要移植,库中某一个用户的Oracle用户密码不知道,可是这个密码因为在其他程序中使用了而不能修改,在新的数据库系统中,这

  • WebRTC之ICE服务器coturn安装及部署

    WebRTC之ICE服务器coturn安装及部署GitHub:https://github.com/coturn/coturn一、安装sudoapt-getinstallcoturn

  • mac是基于什么内核的操作系统_mac编译android源码

    mac是基于什么内核的操作系统_mac编译android源码MAC内核编程指南-同步原语

  • vsftp账号_Vsftp用户限制

    vsftp账号_Vsftp用户限制背景Oracle全库备份,异地备份在实现异地备份后,由第三方人员登录服务器拉取dmp文件.为了确保安全,创建一个特定ftp账号用于第三方人员使用要求1.可以登录服务器2.可以拉取dmp文件3.仅限在dmp文件的目录下,不能cd其他路径,ls其他目录解决过程yum安装ftp服务[root@78778e06dc0a/]#yuminstallvsftpd-y修改vsftp配置文件,开启限制[…

    2022年10月26日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号