范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

揭开服务降级的面纱

  作者简介:曾任职于阿里巴巴,每日优鲜等互联网公司,任技术总监,15年电商互联网经历。
  提起服务降级,估计很多人都听说过,但是又因为亲身经历不多,所以可能不是很理解。本文我们会结合具体实例从多方面详细阐述服务降级。
  写在前面
  互联网分布式系统中,经常会有一些异常状况导致服务器压力剧增,比如促销活动时访问量会暴增,为了保证系统核心功能的稳定性和可用性,我们需要一些应对策略。这些应对策略也就是所谓的服务降级。下面根据笔者的实际经历,跟大家聊聊服务降级那些事儿。希望对大家有所启发!
  服务降级方式和案例
  关闭次要功能
  在服务压力过大时,关闭非核心功能,避免核心功能被拖垮。
  例如,电商平台基本都支持物流查询功能,而物流查询往往要依赖第三方物流公司的系统接口。物流公司的系统性能往往不会太好。所以我们经常会在双11这种大型促销活动期间把物流接口屏蔽掉,在页面上也关掉物流查询功能。这样就避免了我们自己的服务被拖垮,也保证了重要功能的正常运行。
  降低一致性之读降级
  对于读一致性要求不高的场景。在服务和数据库压力过大时,可以不读数据库,降级为只读缓存数据。以这种方式来减小数据库压力,提高服务的吞吐量。
  例如,我们会把商品评论评价信息缓存在Redis中。在服务和数据库压力过大时,只读缓存中的评论评价数据,不在缓存中的数据不展示给用户。当然评论评价这种不是很重要的数据可以考虑用NOSQL数据库存储,不过我们曾经确实用Mysql数据库存储过评论评价数据。
  降低一致性之写入降级
  在服务压力过大时,可以将同步调用改为异步消息队列方式,来减小服务压力并提高吞吐量。既然把同步改成了异步也就意味着降低了数据一致性,保证数据最终一致即可。
  例如,秒杀场景瞬间生成订单量很高。我们可以采取异步批量写数据库的方式,来减少数据库访问频次,进而降低数据库的写入压力。详细步骤:后端服务接到下单请求,直接放进消息队列,消费端服务取出订单消息后,先将订单信息写入Redis,每隔100ms或者积攒100条订单,批量写入数据库一次。前端页面下单后定时向后端拉取订单信息,获取到订单信息后跳转到支付页面。用这种异步批量写入数据库的方式大幅减少了数据库写入频次,从而明显降低了订单数据库写入压力。不过,因为订单是异步写入数据库的,就会存在数据库订单和相应库存数据暂时不一致的情况,以及用户下单后不能及时查到订单的情况。因为是降级方案,可以适当降低用户体验,所以我们保证数据最终一致即可。流程如下图:
  屏蔽写入
  很多高并发场景下,查询请求都会走缓存,这时数据库的压力主要是写入压力。所以对于某些不重要的服务,在服务和数据库压力过大时,可以关闭写入功能,只保留查询功能。这样可以明显减小数据库压力。
  例如,商品的评论评价功能。为了减小压力,大促前可以关闭评论评价功能,关闭写接口,用户只能查看评论评价。而大部分查询请求走查询缓存,从而大幅减小数据库和服务的访问压力。
  数据冗余
  服务调用者可以冗余它所依赖服务的数据。当依赖的服务故障时,服务调用者可以直接使用冗余数据。
  例如,我之前在某家自营电商公司。当时的商品服务依赖于价格服务,获取商品信息时,商品服务要调用价格服务获取商品价格。因为是自营电商,商品和SKU数量都不太多,一两万的样子。所以我们在商品服务冗余了价格数据。当价格服务故障后,商品服务还可以从自己冗余的数据中取到价格。当然这样做价格有可能不是最新的,但毕竟这是降级方案,牺牲一些数据准确性,换来系统的可用性还是很有意义的!(注:由于一个商品会有多个价格,比如普通价,会员价,促销直降价,促销满减价,所以我们把价格做成了单独的服务)
  数据冗余可以结合熔断一起使用,实现自动降级。下面的熔断部分会详细说明。
  熔断和Fallback
  熔断是一种自动降级手段。当服务不可用时,用来避免连锁故障,雪崩效应。发生在服务调用的时候,在调用方做熔断处理。熔断的意义在于,调用方快速失败(Fail Fast),避免请求大量阻塞。并且保护被调用方。
  详细解释一下,假设A服务调用B服务,B发生故障后,A开启熔断:
  对于调用方A:请求在A直接快速返回,快速失败,不再发送到B。 避免因为B故障,导致A的请求线程持续等待,进而导致线程池线程和CPU资源耗尽,最终导致A无法响应,甚至整条调用链故障。
  对于被调用方B:熔断后,请求被A拦截,不再发送到B,B压力得到缓解,避免了仍旧存活的B被压垮,B得到了保护。
  还是以电商的商品和价格服务为例。获取商品信息时,商品服务要调用价格服务获取商品价格。为了提高系统稳定性,我们要求各个服务要尽量自保。所以我们在商品服务加了熔断,当价格服务故障时,商品服务请求能够快速失败返回,保证商品服务不被拖垮,进而避免连锁故障。
  看到这,可能有读者会问,快速失败后价格怎么返回呢?因为是自营电商,商品和SKU数量都不太多,一两万的样子。所以我们做了数据冗余,在商品服务冗余了价格数据。这样我们在熔断后获取价格的fallback方案就变成了从商品服务冗余的数据去取价格。下图为商品服务熔断关闭和开启的对比图。
  开源熔断组件:Hystrix,Resilience4j等
  限流
  说起服务降级,就不可避免的要聊到限流。我们先考虑一个场景,例如电商平台要搞促销活动,我们按照预估的峰值访问量,准备了30台机器。但是活动开始后,实际参加的人数比预估的人数翻了5倍,这就远远超出了我们的服务处理能力,给后端服务、缓存、数据库等带来巨大的压力。随着访问请求的不断涌入,最终很可能造成平台系统崩溃。对于这种突发流量,我们可以通过限流来保护后端服务。因为促销活动流量来自于用户,用户的请求会先经过网关层再到后端服务,所以网关层是最合适的限流位置,如下图。
  另外,考虑到用户体验问题,我们还需要相应的限流页面。当某些用户的请求被限流拦截后,把限流页面返回给用户。页面如下图。
  另外一个场景,假如有一个核心服务,有几十个服务都调用他。如果其中一个服务调用者出了Bug,频繁调用这个核心服务,可能给这个核心服务造成非常大的压力,甚至导致这个核心服务无法响应。同时也会影响到调用他的几十个服务。所以每个服务也要根据自己的处理能力对调用者进行限制。
  对于服务层的限流,我们一般可以利用spring AOP,以拦截器的方式做限流处理。这种做法虽然可以解决问题,但是问题也比较多。比如一个服务中有100个接口需要限流,我们就要写100个拦截器。而且限流阈值经常需要调整,又涉及到动态修改的问题。为了应对这些问题,很多公司会有专门的限流平台,新增限流接口和阈值变动可以直接在限流平台上配置。
  关于限流,还有很多细节需要考虑,比如限流算法、毛刺现象等。篇幅原因,这些问题就不在本文讨论了。
  开源网关组件:Nginx,Zuul,Gateway,阿里Sentinel等
  服务降级总结和思考
  上面我们结合具体案例解释了多种降级方式。实际上,关于服务降级的方式和策略,并没有什么定式,也没有标准可言。上面的降级方式也没有涵盖所有的情况。不同公司不同平台的做法也不完全一样。不过,所有的降级方案都要以满足业务需求为前提,都是为了提高系统的可用性,保证核心功能正常运行。
  降级分类
  一般我们可以把服务降级分为手动和自动两类。手动降级应用较多,可以通过开关的方式开启或关闭降级。自动降级,比如熔断和限流等属于自动降级的范畴。大多手动降级也可以做成自动的方式,可以根据各种系统指标设定合理阈值,在相应指标达到阈值上限自动开启降级。在很多场景下,由于业务过于复杂,需要参考的指标太多,自动降级实现起来难度会比较大,而且也很容易出错。所以在考虑做自动降级之前一定要充分做好评估,相应的自动降级方案也要考虑周全。
  大规模分布式系统如何降级?
  在大规模分布式系统中,经常会有成百上千的服务。在大促前往往会根据业务的重要程度和业务间的关系批量降级。这就需要技术和产品提前对业务和系统进行梳理,根据梳理结果确定哪些服务可以降级,哪些服务不可以降级,降级策略是什么,降级顺序怎么样。大型互联网公司基本都会有自己的降级平台,大部分降级都在平台上操作,比如手动降级开关,批量降级顺序管理,熔断阈值动态设置,限流阈值动态设置等等。
  写在最后
  本文的主要目的是通过具体实例,让大家了解服务降级,并提供一些降级的思路。具体的降级方式和方案还是要取决于实际的业务场景和系统状况。
  OK,就这。如果感觉本文对您有帮助,有劳点下在看,分享知识是美德哦

孩子不打招呼就是没礼貌?家长做好这6点,能让他主动开口叫人前阵子我要忙工作,就让奶奶帮忙带孩子,那些天奶奶带他到处去,但每天晚上回家,她都会跟我投诉孩子,说他什么都好,就是有一个坏毛病,就不爱叫人,平时跟他出去,见到一些熟人,让他叫人死活孩子被骂丑,家长的这6个方法,能帮他走出自卑无可否认,现今的社会大多时候都是一个看脸的时代,无论是上学工作还是相亲,就算能力再强,但大家首先看到的还是你的脸,只有你的脸被人认可,别人才会给你耐心和机会去展示你的才能。尽管每个博德妈妈亲亲直播预告春季宝宝不防晒不止晒黑这么简单春天,宝宝需要防晒吗?什么?宝宝春季也需要防晒?是的,而且春季宝宝比大人更容易晒伤。合理地晒太阳,能够促进合成维生素D,帮助人体内钙的吸收和利用,而且对儿童近视也有一定程度的预防和妈妈亲亲分享宝宝春季护肤8个要点你知道几个?春天是万物复苏的季节,也是过敏高发的季节,天气潮湿,细菌繁生,成年人的皮肤都爱在此时出现问题,更何况是皮肤娇嫩的宝宝呢!只有做好皮肤护理,才能让宝宝远离皮肤病的困扰。今天小编就和大博德妈妈亲亲年花5亿养女儿!明星天价养娃,简直壕到哭啊你听过或见过富养孩子的最高境界是什么?可能很多人,在亲子育儿节目里,看过不少明星为富养孩子豪掷千金的例子李湘曾在一档节目中自曝一个月生活费65万,而给女儿王诗龄一年的生活费,够买一母婴早知道20210223奶业释放利好信号新动态格乐立获批新增适应症儿童斑块状银屑病百奥泰公告,公司于近日收到国家药品监督管理局核准签发的关于阿达木单抗注射液(商品名称格乐立的药品补充申请批准通知书,该药品获批新增适应症儿宝宝春季护肤全攻略,宝妈小课堂春暖花开,万物复苏,春天的气息在细如无声的春雨滋润下悄然蔓延。但是,春天的气候多变,在暖和潮湿的季节里,细菌也迎来了它们又一次的生命高峰期,这使得免疫系统还未发育完善的婴幼儿极易感母婴早知道2021224嘉兴一母婴品牌因销售山寨奶瓶被重罚新动态保健品新规出台凝胶糖果不适用3岁以下,直接口服粉剂不适用6岁以下2月20日,市场监管总局公告,为进一步推进和规范保健食品备案管理工作,根据相关食品安全国家标准及注册产品情况,母婴早知道0125编程训练营Ironhack获B轮融资新动态优然牧业寻求在香港IPO中融资约5亿美元据报道,中国大型乳业上游综合产品和服务提供商优然牧业寻求今年首季在香港IPO,争取最快在农历年后进行上市聆讯,预计集资约5亿美元(折合母婴早知道202103101320万女性通过抖音获得收入新动态快手女性人群报告2020通过快手消费涨265已育占44。5日前,快手官方数据营销洞察平台发布快手有佳人2020快手女性人群价值报告,通过真实全面且清晰地描绘快手上不同人生阶段母婴早知道202103192020年母婴市场破4万亿新动态BigData年度母婴报告2020年母婴市场破4万亿宝宝树用户规模领跑行业日前,第三方数据挖掘及市场研究机构比达(BigDataResearch)发布了2020年度中国互联网
优博瑞慕君乐宝至臻A2爱他美卓萃等8款奶粉深度评测奶粉智库致力于为1亿宝妈及从业者解读每一款奶粉,欢迎关注奶粉智库评测中心的奶粉评测系列文章!一直以来,宝宝的消化吸收和免疫力都牵动着宝爸宝妈的心,奶粉的配方更是受到大家的高度关注,宝宝起名姓与名交相呼应的好名字,每一个很美很特别惊艳的名字有很多,有的是一眼惊艳,让你初见时就心动不已有的是经过时间的洗礼,仍然历久弥新,可以触动大部分人的名字。今天小编就给大家带来一些姓与名交相呼应的好名字,每一个都历久弥新,大宝3次遭霸凌,二胎妈妈总结3点经验,家长这样做孩子没人敢欺负大宝3次遭霸凌,二胎妈妈总结3点经验家长这样做孩子没人敢欺负孩子被欺负,是一件非常普遍的事情,尤其是上学之后。那么当孩子告诉你我被欺负了,家长到底该怎么做才能让孩子不受欺负呢?前不释法为爱疯狂!护犊家长替娃出气要不得前不久一位爸爸替孩子出气狠狠打了对方孩子一巴掌这条新闻顿时冲上热搜引发网友热议(图片源自网络)孩子和小伙伴起冲突家长该不该出气?一起来看看这个案例某日下午老李带4岁的孙子在拱桥上玩学前不要教孩子识字?小学家长告诉你太天真了,识字量非常重要妈妈,我不想看这些纯图画的书了,我想看那些有字的绘本!,在朋友女儿3岁的时候,朋友突然发现自己女儿好像对认字开始感兴趣了。再加上朋友每次带女儿出去玩,都能听到邻居炫耀我家薇薇5岁都她在教育孩子方面成功的秘诀竟然是睡觉前坚持和孩子说点废话我身边有一个对孩子教育特别成功的妈妈,她家孩子从小到大都特别自信阳光学习成绩优秀,进入社会后发展很好。很多人向她请教教育孩子成功的秘诀,可是她竟然说成功的秘诀就是坚持睡前和孩子聊点太难了!宝妈在幼儿园干不下去了,决定辞职不是生活太难,而是处理人际关系太难了。经过反复考虑,我终于决定辞职了。说我无能也好,说我其他也行,我真的待不下去了。自从我以配班身份进入这家幼儿园,我就非常努力。由于自身并不会跳舞小小故事,伴我成长诺亚舟中联壹城幼儿园大班故事比赛小小故事,伴我成长诺亚舟中联壹城幼儿园大班故事比赛幼儿的语言能力是在交流和运用的过程中发展起来的。应为幼儿创设自由宽松的语言交往环境,鼓励和支持幼儿与成人同伴交流,让幼儿想说敢说喜幼儿园要不要教孩子识字?10年经验小学老师直言3个真相很现实文忒咪妈妈(原创文章,欢迎个人分享转发)我家大宝4岁的时候,闹出了一个尴尬的事情,让我深知孩子提前识字的重要性。当时,女儿本身是在距离我家比较近的幼儿园上学,但是后来因为搬了房子,小孩子上早教到底好不好随着时代的发展,人们的思想也逐渐转变,有的家庭从小就开始对孩子注重培养了,一岁多点,不到两岁的,送去早教的太多太多,这是不是就叫,不能不输在起跑线上呢首先说一下早教的费用,那真的是案例分享家庭战争中长大的愤怒的小孩案例分享家庭战争中长大的愤怒的小孩在之前的文章从小到大,为什么我们都这么容易愤怒?中,我们讨论了青少年的愤怒情绪到底来自于哪里,而青少年时期的矛盾如果处理不好,往往会遗留到成年后,