浅谈京东服务接口的高可用计划

开发者 2024-10-3 16:43:17 216 0 来自 中国
前言

作为一个后端研发职员,开辟服务接口是我正常不外的工作了,这些接口不管是面向前端 HTTP 大概是供其他服务 RPC 远程调用的,都绕不开一个共同的话题就是“高可用”,接口开辟每每看似简朴,但包管高可用这块实现起来却不并没有想想的那么容易,接下来我们就看一下,一个高可用的接口是该思量哪些内容,同时文中有不敷的接待品评指正。
到底啥是高可用

用一句简朴的话来概就是我们的体系具不具备应对和规避风险的本领。
为啥做高可用


  • 步调都是有人开辟的,在开辟过程中会犯错从而导致线上事故的发生
  • 体系运行依靠各种运行环境:CPU、内存、硬盘、网络等等,而这些都有大概破坏
  • 业务拉新用户正在注册账号,效果注册接口挂了用户体验受影响
  • 双十一、618 等大促大量用户下单,效果下单服务接口挂了 GMV 受影响等等
  • 其他未知因素等等
总之为了应对这些不可控因素的发生,我们必须要做高可用
高可用的关键点

我们说过高可用的本质是体系是否具备应对和规避风险的本领,那么从这个角度出发来计划高可用接口的有以下几个关键因素:Dependence(依靠)、Probability(概率)、Time(时长)、Scope(范围)

  • 依靠的资源相对少
  • 风险的概率富足低
  • 影响的范围富足小
  • 影响时长富足短
接口高可用计划的几个原则

联合这些关键点,我们来看一下详细详细留意事项
1、控制依靠

能少依靠就少依靠,能不强依靠就不强依靠
少依靠
比方:一样平常每分钟 10 个哀求,查询 Mysql 数据即可满意,此时盲目引入 Redis 中间件,不但浪费资源而且增长体系复杂性
弱依靠
比方:用户注册服务强依靠新用户优惠券发放服务,当优惠券发放服务故障后,整个注册不可用,好的方式是采取弱依靠,利用异步化的方式,如许优惠券发送服务不可用时,不会影响注册链路。
2、制止单点

制止单点故障的焦点是通过备份大概冗余快速的举行容错
我们采取多机房多力气摆设我们应用来保障故障风险分摊,一旦有一台服务器出现题目,其他服务仍然可以大概继承支撑我们的服务
每次上线我们都会保存上一次上线发布版本,如许一旦上线的步调出现题目我们可以大概快速回滚到上一版本
每个接口至少保障 2 人知道干系业务,一旦线上服务出现题目,此中任何一人一个可以大概快速处置处罚干系线上题目
不管是 Mysql 还是 Redis 等中间件都支持数据主备机群摆设
类似的例子很多这里就不再逐一列举了
3、负载平衡

将风险举行分摊制止分险扩散
比方:无论是 Ngnix 大概 JSF 的,其负载平衡目的就是只管的将流量分散到差别的服务器节点上,如许可以有效的保障单节点因体系瓶颈题目而引发一系列的风险。
像上面这个例子我想每个研发职员都知道也都会这么做,但是是不是全部的场景我们都思量到平衡这个题目?
比方:通常为了进步读并发的本领,我们会把数据缓存到 JIMDB 中,但是由于缓存的 key 出现了热门数据导致 JIMDB 单分片负载过高,恰好,这个分片上也缓存了其他数据,但是由于 CPU 负载过高,导致查询性能变差,大量的超时,影响了业务。以是,我们在接口计划的时间,如果碰到类似场景,也要充实思量数据存储的平衡性,同时针对热门数据做好监控,随时支持动态平衡。
4、资源隔离

隔离的目的将风险控制在可控范围内,制止风险扩散
比方:接口摆设之间服务摆设物理上是相互隔离的,制止单机房大概单服务器出现故障影响整个服务
比方:我们在存储业务数据的时间会将数据分库分表,数据通过差别分片存储,如许就不会导致某个服务器挂掉影响到整个服务
5、接口限流

限流是一种掩护步调,目的是将风险控制在可控范围内
我们在开辟接口的时间,肯定要联合业务流量环境举行限流步调,限流一方面处于对自身服务资源的掩护,同时也是对依靠资源的一种掩护步调。
如今团体 JSF 在流量控制这块已经有了对应的限流处置处罚本领,同时我们也可以联合实际业务举行限流模块的开辟。
6、服务熔断

熔断也是一种掩护步调,目的是将风险控制在可控范围内,制止风险扩散
比方:经常我们服务 A 会同时调用 B、C、D 多个服务,当我们依靠的服务此中一个出现故障大概性能降落的时间,就是导致团体服务可用率降落,以是我们在开辟此类服务的时间,肯定要留意接口之间的隔离。我们可以利用类似 Hystrix 组件实现,也可以借助 DUCC 举行手动隔离。实在熔断也是一种控制资源依靠的一种,将强依靠降级为弱依靠
7、异步处置处罚

将同步利用转为异步利用
比方:用户页面领取一些权益,针对领取这个服务在大促期间由于用户流量较大,为了制止体系负载,此时采取 MQ 异步吸收用户领取哀求然后举行优惠券发放,如许不但极大的淘汰了事故的影响范围,也淘汰题目发生概率。
8、降级方案

服务降级属于一种题目发生后的调停步调,通过服务降级可以淘汰一部家声险影响范围
对于紧张的服务接口我们都要具备美满的降级方案,这里必要分析的是,降级有损的,我们肯定要在体系开辟前就要思量各种题目发生的大概,降级的条件是通过降级非焦点业务包管焦点业务运行。
比方:大促峰值期间,一样平常会提前降级掉很多功能,同时限流,主要是为了掩护峰值绝大部门人的交易业务付出体验。
9、灰度发布

通过灰度发布低沉风险影响范围
比方:我们上线一个新服务,通过肯定的灰度计谋,让用户先行体验新版本的应用,通过网络这部门用户对新版本应用的反馈以及对新版本功能、性能、稳固性等指标举行品评,进而决定继承放大新版本投放范围直至全量升级或回滚至老版本。根据线上反馈效果,做到查漏补缺,发现庞大题目,可回滚“旧版本”
10、混沌工程

通过提前对体系举行一些粉碎性的本领,提前发现潜伏题目
比方:一个复杂接口体系依靠了太多的服务和组件,这些组件随时随地都大概会发生故障,而一旦它们发生故障,会不会如蝴蝶效应一样平常造成团体服务不可用呢,我们并不知道,因此我们可以借助泰山平台混沌工程举行演练,针对发生的场景订定各种预案,将风险控制在可控范围内。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2025-3-14 22:54, Processed in 0.166077 second(s), 33 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表