拆解交易系统--服务稳定性
交易系统承担了整个交易链路上的所有交易相关的流量,同时交易系统上时常会组织一些营销,大促相关的活动,所以需要面对着因大促造成的瞬时流量激增的情况。
所以如何做好服务拆分后的交易系统稳定性也就尤为重要。
主要方式一般是:自动预案,限流保护。
当我们对系统进行了微服务拆分之后,服务之间有了良好的边界,可以有效的进行服务故障隔离,防止因雪崩造成的系统崩溃。
而针对于流量激增情况时,系统会有什么表现呢?
流量激增时会伴随着因激增流量造成的系统CPU / Load的飙高,机器告警频繁。
一些热点商品缓存可能会被击穿,如果系统依赖于MQ进行通信,可能伴随着消息积压,处理延迟。
限流是面对瞬时流量激增的通用方案,在商业大促和社会化爆点新闻相关的系统中都会用到,同时也是系统常态下有效的保护手段,在因系统面对大于自己所能处理的流量时,先拒绝为敬。
在进行限流操作之前,我们需要考虑限流的目的是什么?是采用单机限流,还是集群限流?限流的资源有哪些,网关?应用?DB?水位线怎么来的?限流阈值是多少?
拒绝处理上有两种方式,主动拒绝,或者降级到请求队列,总之是防止因为超预期的流量将系统打垮。
限流可以保护服务永远处理自己承受范围之内的流量,起到自我保护作用。
但是在一个链路过长的交易系统中,势必会有一些系统因各种原因不能很好的服务于链路请求,这种情况可以依据系统优先级,在系统稳定性受到挑战时进行降级,而确保核心路径不受影响。
系统对于降级常见的处理方式有两种:手动降级,自动降级。
手动降级一般是配置一个降级开开关,在需要的时候进行降级开关的操作。
为了可以更好或是更有效的控制系统降级,建议还是采用自动降级方案,因为他更有效,更适合于链路上的真实情况。
自动降级是基于熔断手段,采集时间窗口内服务的调用情况,调用失败 / 成功次数,依照失败率而操作是否进行自动降级。
做降级处理之前,我们需要考虑,系统接口之间的依赖关系,是强依赖还是弱依赖?哪些功能,服务可以降级掉?是否需要通知PM制定一定的话术?采用自动熔断还是手动熔断?哪些服务在降级之后需要做兜底操作?如何做兜底?
所以限流是一种主动干预流量,防止系统打挂,熔断降级是防止因运行时各种不稳定因素造成的系统超时等待,指标飙高,防止故障级联传导的防御措施。
当然具体系统或是业务中哪些环节,哪些接口需要做降级处理,是需要提前梳理的,千万不要轻易对核心流程做降级,因为毕竟是有损的。
在设置了降级措施之后,需要做相应的压测或故障注入,以确保降级,限流策略有效,而不至于真实情况发生时防御策略失效,造成系统可怕的结果。
系统可用性中很重要的一个点就是防止单点。
单点的系统永远存在可用性风险,小到主从数据库,数据多副本,多无状态服务,多机房,异地容灾,如果要求登记很高的金融场景,比如支付宝,则需要做到三地五中心的异地多活架构。
为什么要搞异地多活呢?业界无外乎以下原因:
单机房容量受到了限制
机房单点问题,造成系统可用性问题,进而造成经济损失
一个成熟的互联网架构体系,需要具备多层次,多维度,端到端的完备的监控体系。
健康检查是监控体系中很重要的一个环节。
主要实现方式可以是服务端轮询和客户端主动上报两种方式。
两者各有优缺点,Mysql服务这种无法主动上报,除非借助于三方代理,但是主动的端口健康检查也很难识别进程假死的情况。
健康体系,谷歌提出来四项黄金指标:
延迟:响应时间
流量:请求量,QPS
错误:错误数,错误率
饱和度:资源利用率
云原生时代监控体系的实现往往是通过应用 / 节点暴露端点,监控服务采用pull方式采集指标,比如prometheus监控系统最近比较火。也可以借助前面文章中提到的agent上报到服务端。
监控能力提升之后,告警系统能力也很重要,在阈值配置之后,告警触发极其灵敏度就很重要,阈值太高太低都不合适。
为了有效进行故障定位和快速处理,对现有服务依赖进行梳理就显得尤为重要。
好的服务依赖关系可以帮助我们快速定位问题,快速进行容量评估,减少资源浪费,友好的链路追踪。
如果服务之间,在其中一个可用性受到威胁时,传递到另一个系统上,并影响其可用性,则两个服务之间就是强依赖。
如果其中一个故障,另一个不影响主流程或核心流程,则两者是弱依赖。
梳理好系统之间的强弱依赖,可以更好的配置降级,限流阈值。针对于弱依赖的服务可以直接降级掉,或者返回兜底默认值。
上面说了系统稳定性的宏观层次,限流,熔断,降级,以及单点问题。其实稳定性很大一部分程度是需要在工作流程和工作方式上展开的。
比如你的代码或者新需求,是否可以做到快速回滚,快速应急处理降低损失。
简单总结下来可以从下面几个角度分析:
新功能是否可回滚 / 是否可快速减少损失
新功能是否可灰度,在技术角度和运营角度进行灰度
是否可监控,包括技术指标,告警和运营指标,收益
反推回来,我们需要在团队执行上落地一些做法和手段,比如:
做好业务分析,需求评审,系统设计,容量规划,避免风险,SQL审核(是否加索引了)
指定上线,发版的sop,做好流程制约和控制,提升自动化工具进行风险代码的扫描和检查
做好code review,减少风险上线
自动化用例覆盖,防止改新影响老业务
提高自动化,工具化,避免人肉
拆解交易系统--服务稳定性相关推荐
- 拆解交易系统--服务高可用
系统稳定性和系统可用性是对在线系统很重要的两个评价指标,也是最重要的系统能力,系统可用性或者成熟度不足,将会造成重大的事故或者经济损失. 系统故障在研发团队一般的生命周期如下: 原则按照事前事中事后来 ...
- 服务稳定性及应用防护方案
服务稳定性及应用防护方案 一. 服务稳定性 1. 基本监控 基本监控推荐使用Zabbix,开源分布式企业级监控系统,能满足目前我们监控的需求 a. 系统监控,包括CPU.内存.磁盘.网络等,能够对系统 ...
- 阿里云栖开发者沙龙PHP技术专场-聊聊服务稳定性保障这些事
本文主要带大家了解服务稳定性的重要性和相关策略.策略大概分两部分,第一方面从架构层面介绍保障服务稳定性的常见策略(限流,降级,隔离,超时,重试和集群).第二个方面是从流程方面(code review, ...
- 小日期时间型_利于就业的汽车拆解技术服务师证报名时间、考试流程分几个级别?...
汽车拆解技术服务师证报名入口是哪个?报名截止日期 维修技术人员不可能将数千种车型的维修资料.数据.程序记忆在大脑中.汽车拆解技术服务师证报名入口是哪个?报名截止日期对营销来说,在营销过程中,有一个好的 ...
- 拆解交易系统--如何做好稳定性
快速发展的互联网业务往往存在一段"快,糙,猛"的阶段,业务的高速发展过程中大家的注意力都集中在了业务快速迭代,系统功能快速实现,而忽略了稳定性相关的问题. 这一阶段往往故障比较多, ...
- 拆解交易系统--性能优化,安全加固与弹性扩缩容
点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 前几篇文章我们拆解了交易系统架构层次的设计方案,对于代码细节我们讨论很很少,今天基于几个方面简短的介绍一下,未来有时间可以针 ...
- 拆解交易系统--模块拆解与服务化
用户高速发展阶段如何做好稳定性 围绕做好稳定性可以从几个角度做,而不是简单的监控,压测,告警和容量规划. 第一件事 :设计方案尽量简单 做好架构很重要的一个原则是,大系统做小,精简设计方案.在众多可能 ...
- 服务稳定性保障手段与规范
服务的稳定性,对于任何一个在线提供服务给用户的公司来说,都是非常重要的.任何一次线上事故,都可能会给公司带来显而易见的损失.因为相比于其他部门,负责基础技术.公共服务的同学,发生事故的时候很容易暴露在 ...
- OneAlert助力车行易提升事件响应效率,保障服务稳定性
权威数据显示,目前国内汽车后服务市场的规模已达万亿级别.而在车主日常用车的多种生活场景中,与车辆违章相关的细分业务使用频度仅次于导航.停车.洗车等三项车后服务,这也是极具发展潜力的一个细分市场.「车行 ...
最新文章
- 空车上路,Waymo拿下加州首个“真”无人驾驶许可证
- 如何打造园本特色_立足城市特色 打造赛事品牌——年轻成马如何走向国际化...
- Windows 下 Anaconda3 的安装配置
- 触发器三(行级DML触发器)(学习笔记)
- vue学习笔记-03-浅谈组件-概念,入门,如何用props给组件传值?
- Eigen官网教程(7)geometry几何模块的实践
- github创建maven项目过程
- 类与对象、引用传递、封装、构造方法、匿名对象笔记
- 一个校园网络的规划与设计
- C++ freopen 打开txt文件,读取,写入txt文件
- 坐标变换(5)—用旋转轴和旋转角表示旋转
- 中国移动下月发布5G套餐:“三不一快”策略方便终端入网
- 为什么未来是全栈工程师的世界?
- 上门洗车软件的核心功能和技术选型
- 区块链应用场景:物联网和物流供应链
- 去年12月份挑错经验总结
- SQL SERVER 变量赋值
- 算法-回溯backtrack
- Arduino驱动oled显示动画
- powerbi使用说明_PowerBI动态报告嵌入到PPT中,这个方法推荐给你
热门文章
- 《算法竞赛中的初等数论》(二)正文 0x20同余(ACM / OI / MO)(十五万字符数论书)
- 9.67最不下降子序列
- Java中创建线程需要使用的类_如何通过使用Java中的匿名类创建线程?
- 121.买卖股票的最佳时机
- python使用opencv查找轮廓_(八)OpenCV-Python学习—轮廓查找,绘制和拟合
- 能量平衡_巴夏:平衡自己的能量,疗愈自己,疗愈世界
- [译] Spring 的分布式事务实现-使用和不使用XA — 第三部分
- Linux TOP 命令显示详情
- websocket客户端
- [算法也疯狂]实现假装商品抢购繁忙的效果(php版)