微服务时代的三大稳定性挑战
引言:从单体到微服务的演进之痛 2015年,Netflix宣布他们的微服务架构已经包含超过1000个微服务,每天处理数十亿次API调用。这标志着微服务架构从理论走向了大规模生产实践。 但微服务不是银弹。在享受它带来的灵活性、可扩展性的同时,我们也必须面对新的挑战。 上一篇我们讲了流量控制的本质,这篇我们深入微服务场景,看看现代分布式系统面临的三大稳定性威胁:流量洪峰、服务雪崩、资源耗尽。这三个问题如果不妥善处理,任何一个都足以让整个系统在几分钟内瘫痪。 一、挑战1:流量洪峰——当10倍流量来袭 1.1 真实案例:2019年双11零点的惊险时刻 2019年双11,阿里云技术团队事后复盘了一个惊险瞬间: 零点前1秒: 系统QPS:50万/秒 服务器CPU:60% 数据库连接:5000个 零点后1秒: 系统QPS:680万/秒(13.6倍) 服务器CPU:95%(濒临极限) 数据库连接:10000个(已达上限) 零点后2秒: 部分慢查询开始出现 RT从50ms上升到200ms 用户开始疯狂刷新(雪上加霜) 如果没有流量控制和弹性扩容,这个洪峰足以在10秒内压垮整个系统。 1.2 流量洪峰的特征 流量洪峰不是均匀的,而是呈现尖刺特征: QPS | | ╱╲ | ╱ ╲ | ╱ ╲ |─────────────────╱ ╲──────────── | 时间 └─────────────────────────────────────> 平时 活动开始 高峰 回落 关键问题: 短时极高:可能在1秒内达到10倍甚至100倍 难以预测:用户行为受心理因素影响(从众效应) 恢复困难:系统崩溃后,重启需要时间,流量会继续堆积 1.3 微服务架构下的放大效应 单体应用时代,1个用户请求 = 1次数据库查询。 微服务时代: 1个用户请求 → 网关(1次调用) → 订单服务(1次调用) → 用户服务(查询用户信息) → 商品服务(查询商品信息) → 库存服务(检查库存) → 优惠券服务(计算优惠) → 积分服务(计算积分) ↓ 5次下游调用 × 3次数据库查询 = 15次数据库操作 放大效应: ...