服务治理利器Hystrix-理论篇

引言    

现在的大中型应用,很多都在朝着服务化、分布式的方向发展。这有多方面的考虑,比如说,方便治理、便于扩展、服务隔离等等。不过在带来如此多利好的同时,不可避免的也会带来麻烦,比如系统架构复杂、服务依赖关系繁杂。整体来说,还是利大于弊,而我们需要思考的,就是怎么在得到这些利的同时,解决弊端。从本篇开始,将会用两到三篇来探讨这方面的心得。

 正文

    这类应用,往往会依赖几个甚至几十个服务,而服务发生故障又是不可避免的事情,即使你说自己的服务达到了四个9的高标准,那么借用网上的一个算式,如果应用A依赖了30个服务,那么出错的几率也是99.99%^30=99.70%每年大约有24个小时是不稳定的。一亿次请求*0.3%=30w次失败。有没有细思极恐的赶脚?

    很多时候,我们还不得不面临,只有一个服务延迟或者挂掉,结果整个应用都受到影响。在高QPS的场景下,很快整个服务器上的资源就会被耗尽。来个图感受下(注:图片来自于网络):

    服务I出问题,站在其他服务的角度看,这就是坑队友了啊。如果再有级联的依赖,简直就是噩梦。

    那么怎么办呢?继续提升每个服务的可用率?当然,这是我们永远的追求,如星辰大海一般,没有止境。但也正是因此认识到,想达到100%的可用率,几乎不可能,只要有那么点缺憾的存在,那么,一旦量级起来了,刺耳的报警短信之音还是会在夜深人静的时候响起。

    既然这条路走不通,或者说只能部分走通,那么还有没有其他路呢?当然有,办法总比问题多。

    最常用的就是降级策略。所谓降级,无非就是愿意承担一定限度的成本,保证整体可用。举几个例子来说:

  • 牺牲一小部分流量(其实深究起来就是用户的请求),来保证服务整体不被压垮。
  • 不再强求一小部分服务的返回值,保证绝大多数服务可用。
  • 当然还有缓存,牺牲数据的时效性,保证可用性。

    方向性的指导原则有了,不会南辕北辙了,那么剩下的就是具体实践了,正所谓工欲善其事必先利其器。本篇,将重点研究业界流行的一件神兵利器:Hystrix。

    Hystrix是通过什么手段来实现的服务降级呢?在小端看来,最核心的就是以下三点,其他的都是锦上添花的东西:

  1. 配置线程池,来控制并发量
  2. 配置超时时间,加快返回速度
  3. 配置熔断器,直接拒绝请求(舍小我保大家)   

   下面,详细说明:

隔离:

        为每一个服务,注意,是每一个,都维护一个独立的线程池(或者信号量),当线程池满时,使用相应策略处理,比如拒绝服务,比如排队(要看配置的是哪种线程池了)。这样,就控制了并发量。不会因为突然而至的请求骤增,压垮服务。这样就实现了服务间相互隔离,彼此不受影响的效果。如下图(图片来自网络):

命令模式:

        这个真没什么高深的,就是我们的业务逻辑类,要继承HystrixCommand或者HystrixObservableCommand,重写他们的run()或construct()方法。在该方法里,实现对外部服务的调用。而在使用时,就像下命令一样,对业务逻辑类实例化的对象,下达“命令”(即调用提供的统一的execute、queue等方法),而不需关心内部的具体调用逻辑,即可自动执行我们重写的run()或者construct()。

超时:

        设置超时时间,那么在每个请求执行过程中,一旦发生响应超时,即可有所动作,对的,就是转而去执行getFallBack()方法,快速返回结果,释放系统资源。当然,执行失败的,也是如此处置。

熔断器:

        这个词看起来高大上,知道这个词,是前几年A股里的那次事件。在这里思路其实差不多,就是我要统计一个时间窗口内,服务的成功、失败、超时等的数据,然后依据配置的策略,比如失败率达到80%时,切断服务一段时间,这时,任何请求,都拒绝服务!拒绝服务!拒绝服务!直接执行getFallBack()逻辑。比较牛的设计是,提供了自动恢复能力。可以配置一个时间阈值,在拒绝服务超过这个时长后,接受一个请求,尝试调用服务。如果成功,则服务恢复,如果失败,则继续进入熔断状态。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

复用代码引发悲剧:含漏洞的安卓ROM致10万用户受中间人攻击(MITM)影响

关于CyanogenMod CyanogenMod(发音:sigh-AN-oh-jen-mod。简称CM):Cyanogen团队是目前全球最大的Android第...

1975
来自专栏吴逸翔的专栏

海量服务实践:手 Q 游戏春节红包项目设计与总结(下篇)

本篇文章接上篇,主要讲解了手 Q 游戏春节红包项目系统保障、演戏验证和总结三个部分。团队从系统容灾/过载保护/柔性可用/立体监控方面做的一些工作,为了保障项目顺...

6880
来自专栏FreeBuf

iOS最新更新修复了多个安全问题,包括KRACK漏洞

苹果最近发布了iOS 11.1和macOS High Sierra 10.13.1版本,修复了一些问题,更新了70多个新的表情,并且对多个安全问题进行了修复。除...

2629
来自专栏FreeBuf

记一次完整的办公网渗透到idc过程

前言: 看到各位大神分享他们内网渗透的经验与技巧,小菜打算也来分享分享。 http://www.freebuf.com/articles/sys...

2907
来自专栏散尽浮华

双机热备工作模式及高内聚低耦合架构解释

双机热备份技术是一种软硬件结合的较高容错应用方案。 该方案是由两台服务器系统和一个外接共享磁盘阵列柜 ( 也可没有,而是在各自的服务器中采取 RAID 卡 ) ...

2619
来自专栏安恒信息

存在漏洞的Java及Flash版本使用者众多

众所周知的是Java和Flash历来被攻击者所青睐,这多亏了它们巨大的装机量和众多的安全问题。但与此同时被攻击者所定为目标的用户们却没有这么乐观,...

1983
来自专栏FreeBuf

给树莓派小车控制系统加上装甲

前不久写了一篇题目为《Windows系统监听键盘通过UDP协议控制树莓派小车》的文章在FreeBuf上发表了,当初设计小车控制系统的时候仅仅是为了实现控制目的而...

1133
来自专栏自由而无用的灵魂的碎碎念

一个关于Windows Vista下“开始”搜索的小发现

之前一直以为在Windows Vista下从“开始”搜索程序时,搜索范围是“开始”--“所有程序”下的所有列表。

1493
来自专栏北京马哥教育

使用版本控制系统的 3 个建议

git的三个建议 如果说有什么是开发软体专案一定要使用的基础工具,使用「版本控制系统」应该可以记上一笔。无论是个人或是团队开发,都可以透过版本控制系统获得巨大的...

2136
来自专栏黑白安全

物联网厂商 CalAmp 服务器配置错误,黑客可盗窃数据、接管车辆

安全研究人员发现,CalAmp(一家为多个知名系统提供后端服务的公司)运营的一台服务器因为错误配置,黑客可借助该漏洞接入账号数据,甚至直接接管相关车辆。

853

扫码关注云+社区

领取腾讯云代金券