阿里系业务容量规划
Tair集群部署与水位调配
阿里系容量精调之单机压测场景
传统模拟请求
流量复制
流量转发
网关权重
线上测试注意点
阿里系混合部署技术
- 资源分时复用:提高资源利用率
- sigama框架做在线资源池调度,伏羲做离线资源池调度;两者之上有顶层混部调度
生产级限流维度和前端柔性方案
网关流控
- 限流
- 全局维度
- 用户维度
- IP维度
- Sentinel:调用方限流、热点限流
- 准入
- 黑名单
- 白名单
- DDos高防
- 整形
- 预热、冷启动
- 匀速通过
- 排队机制:把当前先到的请求先暂存起来,等时间节点到之后再放出来
后端降级、客户端限流
前端柔性
- 在前端做削峰、错峰的处理
- 例如在零点开始双十一大促,在零点零分零秒点击感觉点不动,极短时间比如一秒的时候就点进去了。可能就是前端作了处理。当全国的用户都在狂点请求的时候,前端不会立即发起请求,而是在0 ~ T0秒之间随机取一个延时时间,等延时时间到了之后在发送该请求。这样做就把瞬间的流量洪峰散列开,达到削峰的效果。
- 也可以设置一个有效请求的最短时间间隔。比如设置的时间阈值是3秒钟,用户在这三秒钟的时间内点了很多次请求,但是前端只会发送一次请求,其他的请求会视为无效请求。
- 合理的使用前端柔性可以大大降低后端的压力,并且非常轻量级,容易实现
线上应急预案
- 预防问题
- 精准评估:容量评估、全链路压测
- 数据 + 服务:缓存、异构、异步化;分库分表;DR(容灾)
- 系统阈值:限流、降级熔断(自动 + 手动)、弹性扩缩
- 发现问题
- 监控预警:水位监控、QPS/RT监控、业务埋点、硬件资源监控
- 快速响应
- 应急预案:三级响应、FO(故障转移:把问题流量的机房转移到容灾备份机房)、手动降级、容灾演练(定期切断部分机房,模拟故障场景)、RCA复盘
识别故障等级
- 核心主链路(必须马上处理)
- 外围支持系统
- 影响范围(受影响的终端用户的数量)
- 预估资损(比如广告系统故障,可能没有影响到终端用户,但会带来很大的资损)
故障预案
- 应用层
- 人工降级方案(留人工干预的接口:第一时间可以响应、主动对边缘业务降级)
- 降级异步写
- 读降级(对一致性要求不高的场景)
- 功能性降级(例如账单模块和历史浏览等可以在双十一大促期间关掉)
- 客户端限流开关
- 开关推送(springcloud中的config推送)
- 禁止爬虫(大促情况下禁止)
- 人工降级方案(留人工干预的接口:第一时间可以响应、主动对边缘业务降级)
- 平台层
- 机房断网演练
- 故障转移
三高系统的稳定性
一个系统的并发量是不是越高越好?
- 不是,更重要的是高可用
- 并发QPS vs TP99(99%的请求的平均响应时间,可以反应系统的稳定性)
- 稳定性指标
- 时延:空间换时间(缓存,异步)
- 网络传输:时间换空间(Feign组件有请求压缩的功能,压缩请求可以减少网络传输中的占用的带宽,减少网络开销,但是压缩和解压会增加时间开销)
- 减少资源开销
- 降低锁竞争:尽量少用synchronized,开销大。本地可以使用 cas + 线程出让。即使有时候不得不用到synchronized,也要尽可能减少锁定资源的范围
- 节省线程资源:池化(session建立开销);线程隔离:给指定的资源分配一定数量的线程
- 服务无状态化:弹性、快上快下
- 异步化
- 异步编排、状态机推进
- 缓存更新(canal监控mysql的binlog日志,做数据同步:业务复杂度–,稳定性++)
- 队列化——本地、MQ
- 异步化不可避免的会有重试,所以一定要注意接口的幂等性保证和重试机制。
线上异常的回退
- 版本化部署
- 发布历史记录
- 快速回退到稳定版本
- 版本发布
- 金丝雀测试、灰度发布
- AB Testing
- 切流量:将一部分流量导向旧代码,一部分流量导向新代码
- 数据DDL变更
- 版本控制 + 发布历史
- DDL & 数据订正也是代码
- 全量脚本 + 增量脚本 + 执行脚本 + 回退脚本
面试题
谈谈你对全链路调优的经验(针对大厂)
- 业务容量预估
- 单机压测
- 线上数据 + 模型回测 - 老业务 新业务预估
- 容量精调 —— 全链路压测(瓶颈)
- 水位调配,降级熔断,限流——重新压
从架构层面考虑,如何提高线上计算资源的利用率
- 水位监控,弹性计算
- 混合部署(面试官懵逼系列)
架构层面,如何防止流量超过系统承载能力
- 优秀的答案不是一个“点”,而是一个“面”,一个完整的解决方案
- 限流——网关层限流、分布式组件限流,客户端多个维度
- 降级、熔断
- 前端柔性——错峰、削峰
- 弹性计算
如何评估系统的饿稳定性、可用性
- 时延:空间换时间,空间:时间换空间
- 宏观层面:DR(容灾备份)、镜像同步、FO
- 微观层面:降低资源竞争、池化、无状态(弹性)、异步化