47-01、hystrix与高可用系统架构:资源隔离+限流+熔断+降级+运维监控

HA,HAProxy,主备服务间的切换,这就做到了高可用性,主备实例,多冗余实例,高可用最最基础的东西。

那么,什么样的情况下,可能会导致系统的崩溃,以及系统不可用,针对各种各样的一些情况,然后我们用什么技术,去保护整个系统处于高可用的一个情况下?

1、hystrix是什么?

netflix(国外最大的类似于,爱奇艺,优酷)视频网站,五六年前,也是,感觉自己的系统,整个网站,经常出故障,可用性不太高,有时候一些vip会员不能支付,有时候看视频就卡顿,看不了视频。

影响公司的收入。

五六年前,netflix,api team,提升高可用性,开发了一个框架,类似于spring,mybatis,hibernate,等等这种框架

高可用性的框架,hystrix

hystrix,框架,提供了高可用相关的各种各样的功能,然后确保说在hystrix的保护下,整个系统可以长期处于高可用的状态,100%,99.99999%

最理想的状况下,软件的故障,就不应该说导致整个系统的崩溃,服务器硬件的一些故障,服务的冗余,唯一有可能导致系统彻底崩溃,就是类似于之前,支付宝的那个事故,工人施工,挖断了电缆,导致几个机房都停电不可用,和产生一些故障或者bug的区别。

2、高可用系统架构

资源隔离、限流、熔断、降级、运维监控。

资源隔离:让你的系统里,某一块东西,在故障的情况下,不会耗尽系统所有的资源,比如线程资源。

我实际的项目中的一个case,有一块东西,是要用多线程做一些事情,小伙伴做项目的时候,没有太留神,资源隔离,那块代码,在遇到一些故障的情况下,每个线程在跑的时候,因为那个bug,直接就死循环了,导致那块东西启动了大量的线程,每个线程都死循环。最终导致我的系统资源耗尽,崩溃,不工作,不可用,废掉了。

资源隔离,那一块代码,最多最多就是用掉10个线程,不能再多了,就废掉了,限定好的一些资源。

限流:高并发的流量涌入进来,比如说突然间一秒钟100万QPS,废掉了,10万QPS进入系统,其他90万QPS被拒绝了;

熔断:系统后端的一些依赖,出了一些故障,比如说mysql挂掉了,每次请求都是报错的,熔断了,后续的请求过来直接不接收了,拒绝访问,10分钟之后再尝试去看看mysql恢复没有;

降级:mysql挂了,系统发现了,自动降级,从内存里存的少量数据中,去提取一些数据出来;

运维监控:监控+报警+优化,各种异常的情况,有问题就及时报警,优化一些系统的配置和参数,或者代码。

3、如何讲解这块内容?

(1)如何将eshop-cache,核心的缓存服务改造成高可用的架构;
(2)hystrix中的一部分内容,单拉出来,做成一个免费的小课程,作为福利发放出去;
(3)eshop-cache,写代码,eshop-cache-ha,业务场景,跟之前衔接起来,重新去写代码;
(4)hystrix做服务高可用这一块的内容,讲解成只有一个业务背景,重新写代码,独立。

eshop-cache,在各级缓存数据都失效的情况下,会重新从源系统中调用接口,依赖源系统去查询mysql数据库去重新获取数据。如果你的各种依赖的服务有了故障,那么很可能会导致你的系统不可用,hystrix对系统进行各种高可用性的系统加固,来应对各种不可用的情况。缓存雪崩那一块去讲,redis肯定挂,mysql有较大概率挂掉,在风雨飘摇中。

我之前做的一个项目,我们多个项目都用了公司里公用的缓存的存储,缓存彻底挂了,雪崩了,导致各种业务系统全部崩溃,崩溃了好几个小时,导致公司损失了大量的资金的损失。其中导致公司损失最大的负责人,受到了很大的处分。

文集:https://www.jianshu.com/nb/32293473

猜你喜欢

转载自blog.csdn.net/A_BlackMoon/article/details/86286837