微服务架构下如何正确的选择降级策略保障服务高可用?

摘要:在微服务架构下,一个服务可能依赖多个下游服务,为了保证自身服务的可用性,当下游服务出现故障时,特别是强依赖的下游服务出现故障时,如何做才能最大程度的保证自己不受影或者说把影响降到最低?

关键词:微服务 降级 高可用

一、依赖服务的分级

一个服务依赖的可能有很多个,但并不是每一个依赖都需要同等对待,我们可以将依赖服务对本身逻辑的影响范围大致分为弱依赖和强依赖。

  • 弱依赖:不影响核心逻辑的依赖服务,例如:直播APP列表中主播的角标信息,即时没有数据也不影响进房。
  • 强依赖:影响核心逻辑的依赖服务,例如:直播APP列表中主播的房间号,没了就进不了房。

注意,同一个服务在不同的场景下分级可能会不一样,并且随着业务的变化,强依赖和弱依赖间可能发生转变。

二、降级的时机

根据降级的触发条件可分为主动降级和被动降级;

  • 主动降级:一般在大型活动时产生流量尖峰,系统无法支撑,提前对非核心的业务进行了降级处理;
  • 被动降级:一般是在发生故障时自动触发预设的降级策略。

举个例子,某个流量明星的演唱会独家直播,可能带来平时流量的10+倍以上,预估已经达到了某些瓶颈,为了保证核心业务的可用性,就需要提前做好预案牺牲一些边缘业务。

三、降级的策略

降级策略大致可以分为以下几类,不同的策略适用的场景和依赖级别会有所不同,下面针对每一种降级策略进行了分析,多种策略可以根据情况结合使用。

1、读旧

每次服务调用成功时,记录服务的结果,下一次失败时读取缓存的旧数据;可以根据时延要求选择本地缓存、分布式缓存、数据库或本地文件。
适用场景:
弱依赖&强依赖,只读业务,能够接受一定的延迟,有足够的存储资源。

需要注意:

  1. 分布式缓存或数据库只是把服务故障转移到另一个依赖,依赖故障多是网络故障时谨慎选择。
  2. 冷数据无法降级;
  3. 降级后的数据存在一致性问题;根据业务情况设置合理的有效期;
  4. 数据量大时消耗过多的存储(特别是缓存)且命中率低,可以设置合理的缓存大小,使用LRU方式替换旧缓存。

举例:
查询用户的守护主播服务故障时可以使用旧数据,因为有守护的用户占比小(占用缓存小),且活跃度高(冷数据少)。

2、PlanB

提前准备好候选方案,核心业务甚至可以有PlanC、PlanD等,按业务损害从小到大排序。
适用场景:
弱依赖&强依赖,只读业务,有备用数据。
需要注意:
根据业务评估影响范围以及合理的备选方案。
举例:
直播推荐页的信息流依赖个性化推荐服务失败时,降级使用热门推荐;热门推荐接口也故障时,使用备用接口,备用接口的逻辑尽可能简化降低故障概率并采用较长的CDN缓存;备用接口依然失败时继续降级为使用客户端缓存。

3、默认值

直接返回配置中的默认值或者空数据。

适用场景:
弱依赖,只读业务。

需要注意:
默认值尽量有多种选择,避免千篇一律。

举例:
主播标语服务,在配置中心配置一批中性的默认标语,标语服务失败时直接随机取一条返回给用户,故障率不高的情况下用户基本上感知不到异常。

4、放弃部分请求

选择性丢弃部分请求,也是一种限流措施。

适用场景:
弱依赖&强依赖,部分特殊场景。

需要注意:
需要尽量保障丢弃后的请求不会使用户流程受阻,或导致用户体验受损严重。

举例:
在大型活动直播间的弹幕,当大量弹幕刷屏时,使用一定采样比率丢弃部分弹幕,用户并不会太在意自己的弹幕是否飘过,是在太多了。

5、降低质量

使用低资源消耗的服务替代高资源消耗的服务。

适用场景:
弱依赖&强依赖,部分特殊场景。

举例:
直播视频使用低码率替代高码率,使用标清替代高清,也可以根据用户的等级区别对待,比如VIP用户推高清,普通用户推标清。

6、提高参与门槛

其实这算一个限流的措施,比如当直播间人数已经接近设定阀值时,限制只有VIP用户才能继续进入。

7、反向过滤

过滤某个集合中的子集时,通过补集过滤,补集读取失败时放弃过滤;例如白名单改成黑名单(需要注意数据量),黑名单服务故障时则降级为通过;

适用场景:
弱依赖。

举例:
查询有线主播的城市列表,依赖服务提供无在线主播的城市(而不是有在线的城市),服务失败时则可以采用全部城市都显示的方式,比一个城市或极少城市显示体验好。

8、补偿

采用事后处理,可以是自动或者手动补偿。

适用场景:
弱依赖&强依赖,对实时性有一定容忍度。

举例:
Appstore充值服务在海外经常导致校验凭证失败,这时可以记录日志采用后台自动补单方式,并告知用户稍后查询,正常重试几次后基本能够完成到账。

9、容灾

依赖服务需要使用同城双机房、异地三机房、两地三中心等灾备方案中的一种,调用方通过灾备自动切换方案进行重试。

适用场景:
弱依赖&强依赖。

需要注意:
扩机房重试可能产生较高的时延,根据业务情况设置合理的超时时间。

举例:
关注服务是一个核心的业务,部署了异地双活,当单机房故障时重试另一个机房通常都能够成功。

四、总结

降级是一种保障高可用非常有效的手段,但同时对设计者的要求也较高;实际工作中需要对业务非常了解,能够对每种降级方式给业务带来影响精确的评估。另外对于依赖服务,要有合理的超时和重试机制,预留好降级需要的时间和资源,比如依赖超时太长或重试次数太多,你的上游已经中断请求了,这时再好的降级也是徒劳的。

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

推荐阅读更多精彩内容