一、背景
作为开发人员,系统稳定性
是一个绕不开的话题,特别是做电商业务系统
这几年,几乎天天都要关注稳定性,一旦出现故障对于公司来说都是一场灾难,因此保障系统稳定是最关键的要求,本文将根据最近几年负责电商系统涉及到的稳定性建设常用方法做一次总结。
二、什么是系统稳定性?
对于业务系统来说,不管有什么因素对我们的系统干扰,都要尽可能的提供高可用性
,不影响系统功能
和用户体验
。
影响稳定性有哪些因素呢?
1、人为操作
比如不合理的系统变更,外部的攻击,访问流量突增
2、自然灾害
比如网线光纤被挖
3、硬件故障
比如自然硬盘损坏,内存网络
从以往经验来看,其实影响系统稳定性最多的原因是人为因素
造成的。
二、这些年学到的稳定性方法
1、注重代码健壮性,注重codereview
代码开发需要考虑可观测,可降级,考虑异常容错性
,合理使用缓存,线程池等,对于外部依赖需要超时机制
2、安全变更,遵守sop
任何生产环境的变更都要按公司规范操作,做到可灰度
,可监控
,可回滚
3、系统链路梳理,强弱依赖梳理
把系统核心链路流程梳理,分析系统的出强弱依赖
,分析是否有损降级
4、接口降级,限流,熔断,超时设置
需要对下游依赖设置可降级
,可熔断
,超时
,避免外部系统性能或者故障拖垮服务
对本服务接口设置必要的限流
,一般有网关层总限流
和单机限流
,防止突发流程冲击系统
5、定期业务系统降级演练
需要定期对系统的业务功能进行降级演练
,只有真实演练过了,线上有问题的时候才可以临危不乱。
6、系统预案准备充分
业务功能上线前都需要做好降级预案
,包括技术和业务层面的准备,这样出现问题可以快速恢复
,止血
7、系统或全链路压测
新功能上线需要做压测摸高
,日常也需要常态化压测
,通过压测用于合理评估系统资源是否合理,可以及时消除容量和性能瓶颈隐患
8、业务系统日常巡检
- 业务指标巡检
对于业务系统这点是非常重要的,我们需要观察业务指标
趋势,业务指标一般有一定的规律,如果变化比较大可能业务有调整,可以评估是否正常的业务。
- 业务流量qps巡检
巡检qps的环比
变化,发现异常的流量,防止业务或者流量突增对系统冲击
- 接口响应时间rt巡检
发现系统响应时间的变化,主动发现问题
- 系统异常巡检
自动发现系统的错误,提早评估业务影响
9、中间件巡检
- Mysql巡检
mysql慢查询
mysql的cpu繁忙度
mysql磁盘空间大小与增长情况
mysql的主键或者分布式id是否将达到阈值
上面这些是需要重点关注的部分,通过巡检提前发现系统隐患,降低故障发生概率,提高可用性。
- redis巡检
redis的cpu繁忙度
redis热点key
的变化
redis大key
的变化
redis的数据分布均衡情况
上面几个点是关注多的,如果使用的云上的产品,都有比较好的可视化监控
能力,我们通过监控面板发现问题。
10、系统值班
针对重要节假日,预估会有流量高峰的时间,安排相关人员值守,重点关注系统水位
,比如流量qps
,cpu
,有无异常
等,还关注客服响应群,保障有问题时可以及时响应
11、告警
配置核心告警群,把系统核心告警统一到群里,系统相关人需要在群里,需要将重要的业务情况
同步播报在群里,系统异常
情况告警出来,方便快速发现问题
。
三、总结
本文结合作者工作中稳定性建设相关的经验做了总结,存在不足欢迎补充或者指正,欢迎大家在评论区分享下自己是如何落地稳定性建设的。
稳定性建设是一个长期的任务
,不可能一朝一夕就把稳定性做好,而是需要持续不断的迭代优化。
作为开发人员,我们应该始终对生产系统保持敬畏之心
。
坚持相信有输入一定要有输出
,希望我们的技术能力越来越强大。