首先:守住你的底线
- 底线?单体实例的***处理量
- 单体实例?泛指单个应用实例、单个缓存实例,单个存储实例
- 底线从何而来?压测
- 底线恒定不变?随着服务的架构变化随时调整
- 如:一个实例【java实例+DB】的处理峰值为500/秒,在缓存化数据后处理峰值可以调整的5000/秒,但是缓存异常情况下,系统降级,那峰值必须要回到500/秒。
- 守不住底线?打怪如同碰见一个大 BOSS,经由负载均衡一个个秒掉你的服务,最终全局502
- 怎么守住底线?限流、限流、限流!
- 限流:一个系统稳定的***层的护城河,永远不要轻视它。
线上的情况千变万化,交易峰值你可以规划,但是异常流量永远不可预测
如我们的限流拆分:
监控的力度也是根据限流层次同步细化
PS:我们搭建了一个流量分析平台,通过接入系统,可以通过自定义规则定义流量拆分报表,并且实现精细化流量控制
其次:不断提高底线
1. 提高单位处理量
优化数据结构和使用缓存等手段,提升单体实例的***吞吐量。
常用手段:
- 网站静态流量分流:页面静态化、APP本地缓存、CDN分发
- 数据缓存化:配置性数据本地预加载缓存,热点数据redis预加载缓存[注意:缓存也是吞吐量阀值和容量阀值]
- 流程简化:收单流程和生产流程拆分
- 请求流量清理:启用gzip压缩、ajax清理掉多余的数据信息
2. 无状态化
高内聚,低耦合,将应用+DB打包成一个对外可扩展的服务模块,标准有三:
- 对内依赖数据的多源化
- 对上游实现无依赖化
- 对下游实现数据的自动传递
价保系统流程处理中心样例: