微服务下接口的高可用性: 限流&降级&熔断 (缓存&负载均衡)

前言

从PC互联网到移动互联网,B/S架构演化为多端/S架构。后端服务SOA模式下的重服务或单服务架构,逐渐按功能模块被切分成微服务架构(延伸阅读《软件工程和架构发展简史》)。微服务架构确实能解决单服务架构的许多顽疾,比如代码维护难、部署不灵活、稳定性不高、无法快速扩展等。但随着微服务模块的与日俱增,它又带来了一些新的问题需要解决。针对这些问题,Spring Cloud提供了一整套微服务实施方案,包括服务发现、分布式配置、客户端负载均衡、服务容错保护、API网关、安全、分布式服务跟踪等。今天就谈一下微服务容错保护中的三个重要概念:服务降级、服务限流以及服务熔断。还有缓存和负载均衡回头再说


降级、限流以及熔断都是解决服务之间RPC过程出现的异常问题,避免因局部服务问题造成全局服务雪崩。服务间的RPC过程可以简单描述为C⇄S。那么这个过程可能会出现哪些异常情况?降级、限流以及熔断各自解决的是什么异常问题,它们又是如何解决的?



限流

C⇄S 的异常问题:C的请求太多,超出S的服务能力,导致S不可用。DoS攻击就是根据此原理,耗尽被攻击对象的资源,让目标系统无法响应甚至崩溃。解决方案:S对C限流,保护S的服务资源。


限流通常在网关或网络层面实施。对各类请求设置最高的QPS阈值,当请求高于阈值时直接阻断。常用的限流算法有滑动计数,漏斗限流和令牌桶限流三种。


滑动计数限流:按时间片(比如1秒)定义滑动窗口,计数器记录当前窗口的请求次数,达到阈值就限流,窗口滑动后计数器归零。可采用循环队列数据结构实现。


漏斗限流:维护一个队列,所有请求进队列,按FIFO服务,队满溢出则丢弃请求。


令牌桶限流:按固定速率往桶中存入令牌,服务前先从桶中取令牌,取到令牌才服务。


降级

C⇄S的异常问题:S自身出现异常,或者由于资源有限需要对部分C请求故意表现为异常(类似限流),为了不影响其他服务功能,主动关闭服务的一些功能。


降级的反义词是升级,升级需要代码开发,降级类似于把部分代码注释掉,牺牲部分功能。这要求S在实现时,需要具备感知异常的能力,并对关键逻辑实现开关控制。实际场景中,对异常的『感知』通常由熔断器实现。



熔断


C⇄S的异常问题:C发现S出现异常(比如大量超时),主动出击,暂停对S的请求。

C对S熔断后,那么原本需要调用S实现的逻辑怎么办呢?可以用mock数据、缓存数据、缺省数据等替代,或者干脆就是抛异常返回错误信息。此时,如果C也是一个服务,它相当于做了服务降级。所以我们经常看到服务熔断和服务降级一起出现(Hystrix的断路器在实现时就是把熔断和降级方案打包实现的)。但本质上它们不是一回事,降级发生在S,熔断发生在C。之所以配合实现,是因为许多微服务模块同时承担C和S两种角色。

熔断的设计有两个关键点:① 判断何时熔断,② 何时从熔断状态恢复。

判断何时熔断:通常使用无锁循环队列计数来实现。C对每次请求S的正常、异常(失败、拒绝、超时)返回计数,当异常返回次数超过设定阈值时进行熔断。

何时从熔断状态恢复:处于熔断状态时,C每隔一段时间(比如5秒),允许部分请求通过,若这部分请求正常返回,就恢复熔断。

总结

降级、限流以及熔断都是解决服务之间RPC过程的异常问题,保证服务稳定性的手段。降级和限流发生在S端,熔断发生在C端。在实际场景中,它们通常会配合实现,特别是熔断和降级。熔断决定何时降级,降级是服务在熔断状态下的对外表现。Spring Cloud全家桶中的Hystrix就是一个优秀的熔断&降级组件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 降级熔断的自我理解: 熔断:当这个接口不可用了,然后下次掉服务的时候就不会再访问到这个节点了,然后后台还有一个程序...
    胖子爱猪蹄阅读 17,355评论 0 6
  • 在分布式系统中,如果某个服务节点发生故障或者网络发生异常,都有可能导致调用方被阻塞等待,如果超时时间设置很长,调用...
    码市冲冲冲阅读 901评论 0 2
  • 表情是什么,我认为表情就是表现出来的情绪。表情可以传达很多信息。高兴了当然就笑了,难过就哭了。两者是相互影响密不可...
    Persistenc_6aea阅读 123,146评论 2 7
  • 16宿命:用概率思维提高你的胜算 以前的我是风险厌恶者,不喜欢去冒险,但是人生放弃了冒险,也就放弃了无数的可能。 ...
    yichen大刀阅读 6,018评论 0 4