一般来说,互联网面试,一般都会考察的:什么是分布式系统,高并发以及简单的高可用系统。限流、熔断、降级,在分布式的系统架构和微服务架构中,其实都是最常见、基础和简单的保障 系统高可用 的手法。可能使用dubbo开发也可能是spring cloud去开发,在这个系统的接口调用中,我们是用hystrix去实现一整套的高可用保障机制,基于hystrix去做了限流、熔断和降级。
hystrix是国外的netflix开源的,netfix是国外很大的视频网站,系统非常复杂,微服务架构多达几千个服务,为自己的场景,经过大量的工业经验,线上生产环境的实践,产出和开源了高可用相关的一个架构,熔断框架:hystrix。
如何用hystrix做限流、熔断、降级。以及这些都是什么鬼?如何使用hystrix来在你的系统中做开发,加入高可用的保障机制?
hystrix未来会成为国内的高可用的限流、熔断和降级这块的标准,spring cloud微服务框架,就是集成了hystrix来做微服务架构中的限流、降级和熔断的。
问题:如何设计一个高可用系统?
1.hystrix是什么?
netflix(国外最大的类似于爱奇艺、优酷)视频网站,感觉自己的系统,经常故障,可用性不太高,有时候一些VIP会员不能支付,有时候看视频卡顿,看不了视频。。。影响公司的收入。在这种情况下开发了hystrix框架。
hystrix框架提供了高可用相关的各种各样的功能,然后确保在hystrix的保护下,整个系统可以长期处于高可用状态,100%,99.999999%
最理想的状况,软件的故障,不应该会导致整个系统的崩溃。包括服务器硬件的一些故障,也不会导致整个系统的崩溃(设计有服务冗余)
2.高可用系统架构
资源隔离、限流、熔断、降级、运维监控
资源隔离:让你的系统里,某块东西,在故障的情况下,不会耗尽系统所有的资源。比如线程资源
限流:高并发的流量涌入进来,如果系统一秒钟100万QPS,废掉了,10万QPS进入系统,其他的90万QPS被拒绝了
熔断:系统后端的一些依赖,出了一些故障,比如说mysql挂掉了,每次请求都是报错的,熔断了,后续请求过来都不直接接收了,拒绝访问,10分钟后尝试去看看mysql恢复没有
降级:mysql挂了,系统发现了,自动降级,从内存里存的少量数据,去取一些数据出来
运维监控:架空+告警+优化,各种异常的情况,有问题就及时报警,优化一下系统的配置和参数或者代码。