首页>云>正文

云工作负载韧性架构:弹性伸缩与高可用落地实践

Feng 19 阅读 云

企业上云的第一个十年,关键词是搬迁。第二个十年,关键词换成了韧性。业务从机房搬进云、从单体拆成微服务、发布节奏从月更压到日更,弹性和高可用就不再是运维报表上的两个数字,而是流量洪峰、机房故障、区域中断面前业务能不能继续转的底层能力。

弹性这件事,多数团队只做对了一半

流量来了加机器,这没错,但只是弹性的一半。完整的能力要回答三个问题:扩容够不够快、缩容敢不敢下手、伸缩决策准不准。

扩容的瓶颈往往不在编排层,而在工作负载本身。虚拟机、容器、Serverless 从触发扩容到真正接住流量,中间都有一段窗口期。Java 服务尤其吃亏,JVM 预热加上类加载,几十秒到几分钟都正常。只盯 CPU 使用率做触发条件,等扩容完成,洪峰早过去了。成熟做法是引入预测性伸缩、队列深度、并发连接数这类前置指标,再叠加业务日历做定时伸缩。

缩容才是真正考验人的地方。加机器心理上安全,减机器要担责任。可云账单的大头恰恰来自那些长期低负载又不敢下线的实例。健康的弹性系统敢在低谷期把副本压到”扛住基线流量加一次故障转移”的水平,前提是团队对自己的容量模型心里有数,而不是靠多留余量买安心。

决策准确性则完全依赖可观测性。指标滞后、采样粗、维度少,自动伸缩就只是在盲调。谁能更早从订单创建速率这类业务指标里读出压力,而不是等 CPU 飙起来,谁就能抢出那几十秒的提前量。

落到 Kubernetes 上,默认的 HPA 只认 CPU 和内存,对 JVM 应用经常失灵——GC 抖动会让 CPU 曲线和真实负载脱节。要接业务指标,得走 Prometheus Adapter 把自定义指标暴露给 custom.metrics.k8s.io,HPA 配置切到 autoscaling/v2。注意 v2 里 metrics 字段的结构和早期的 v2beta2 有差异,target 下用 averageValue 还是 value 取决于指标类型,从 v2beta2 迁移时这部分最容易踩坑。配好之后,按消息队列积压数或 HTTP 并发连接数伸缩,比按 CPU 靠谱得多。

高可用的衡量标准是故障时用户无感

副本数、多可用区,都是手段。真正要衡量的是故障发生那一刻:用户看到错误没有、数据丢没丢、交易重没重复、状态一致不一致。

先分清组件高可用和系统高可用。一个三副本的数据库,如果应用层还是单点连主库,主库一挂应用照样不可用。高可用必须端到端设计,DNS、负载均衡、网关、应用、缓存、消息队列、数据库,每一层都得有切换路径,而且路径要经过真实演练,不能只画在架构图上。

有状态工作负载是硬骨头。无状态服务做多副本、健康检查、自动摘除,相对成熟。数据库、分布式存储、有状态中间件就麻烦得多:主从切换的数据一致性、脑裂、切换后的连接重连、事务补偿,每一项都是工程难题。云厂商在把有状态高可用产品化,托管数据库的多可用区部署和自动故障转移已经比较普遍,但企业必须对 RPO 和 RTO 有明确预期,别默认”上了云就不丢数据”。

没做过故障注入的高可用,只是假设的高可用。定期杀实例、模拟可用区断网、注入延迟和错误,才能暴露那些”以为会切换、实际切不过去”的隐藏单点。

具体怎么做?在 Kubernetes 环境里可以用 Chaos Mesh 定义 PodChaos 做 Pod Kill,用 NetworkChaos 模拟分区。验证时别只看 Pod 有没有重建,要盯三样东西:就绪探针的失败率曲线、切换期间入口的 P99 延迟、以及业务侧的错误率。判定标准可以定得硬一点——注入单 Pod 故障后,副本在 30 秒内恢复 Ready,P99 延迟抬升不超过基线的 50%,错误率低于 0.1%,才算通过。达不到就说明探针配置、优雅下线或流量摘除环节有问题。这套演练最好先在预发环境跑通,再谨慎推到生产,并且必须有回滚和熔断兜底。

成本、复杂度、自动化,三者互相拉扯

弹性和高可用不是两件孤立的事,它们一起把团队推向一个三角:成本、复杂度、自动化水平。

高可用天然要冗余,冗余就是闲置;弹性想消灭闲置。理想状态是平时低冗余运行,故障时快速补位。但这要求弹性系统能区分”故障造成的容量缺口”和”流量增长”,否则故障一来,自动扩容反而可能把问题放大。容量模型和故障模型必须联动。

每多一个可用区、每多一层自动伸缩,可观测性和调试难度就往上跳一截。分布式系统的本质复杂度不会消失,只会转移。团队得判断哪些复杂度自己扛、哪些交给托管服务。平台工程能力在这里是关键——把弹性和高可用的最佳实践封装成内部平台,让业务团队默认获得,而不是各自拼装。

自动化的终点也不是无人化。自动伸缩、自动故障转移、自动降级、自动恢复,都需要清晰边界:什么情况自动扩容,什么情况自动熔断,什么情况必须人工介入。没有边界的自动化,能把一次小故障滚成一次大事故。

一个值得关注的方向是,弹性和高可用正从资源层能力上移到应用层契约。平台不再只给”能伸缩的机器”,而是接受声明式的韧性目标——业务声明”区域故障下 RTO 小于 5 分钟、RPO 等于 0″,平台负责编排底层资源、数据复制和流量切换。这需要更强的标准化和更深的可观测性,也是云原生社区正在推进的事。

技术决策者先回答三个问题

与其追最新的架构名词,不如先把三件事想清楚:我们的 RTO 和 RPO 到底是多少?弹性策略有没有经过真实流量验证?高可用架构有没有经过故障注入演练?这三个问题答好了,比堆任何技术名词都管用。

云提供了工具,韧性始终是一种选择。未来几年,弹性和高可用能力会进一步产品化和标准化,但业务连续性的最终责任,仍然落在架构设计者和运维团队肩上。

ID:7055

Feng
这位作者很神秘,还没有填写简介。