早上九点,咖啡刚泡好,公司官网突然涌入大量用户。后台监控显示请求量在三分钟内涨了五倍,但服务一点没卡——这背后不是运维团队连夜加班,而是容器平台的弹性伸缩机制在默默扛压。
什么是弹性伸缩?
简单说,就是系统能根据当前负载自动增减运行实例。比如你的应用原本跑在两个容器里,访问量暴增时,平台会自动拉起更多副本;等高峰期过去,又把多余的容器回收掉。整个过程就像肺部呼吸,随着需求自然扩张和收缩。
为什么需要它?
很多企业还停留在固定资源配置阶段。为了应对双十一或促销活动,提前几周就扩容服务器,结果平时资源闲置率超过70%。这就好比为了过年走亲戚,买辆大巴天天上下班开,费钱又难维护。
而容器平台通过Kubernetes这类编排工具,结合监控指标(如CPU使用率、请求数、队列长度),实现秒级响应。某电商在大促期间,订单服务从10个Pod自动扩到85个,峰值过后两小时内恢复原状,成本节省明显。
怎么配置才靠谱?
以K8s为例,Horizontal Pod Autoscaler(HPA)是常用组件。你只需要定义策略:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-app
minReplicas: 2
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
上面这个配置的意思是:当CPU平均使用率超过60%,就增加Pod数量,最多到20个;低于阈值则缩减,最少保留2个。实际使用中,还可以结合自定义指标,比如每秒处理的消息数。
别只盯着CPU
有些场景下,CPU利用率并不敏感。比如一个异步任务处理服务,可能CPU一直很低,但消息队列积压严重。这时候应该用KEDA这样的工具,基于Redis队列长度或Kafka lag来触发伸缩,更贴近真实压力。
还有些团队踩过坑:设置太激进,每分钟都在扩缩容,导致系统震荡。合理做法是加冷却窗口(cooldown period),比如两次伸缩之间至少等待3分钟,避免频繁抖动。
冷启动问题怎么破?
函数计算或Serverless场景中,新实例启动可能需要几秒时间,高峰期容易造成请求超时。一种解法是预热机制,在流量上升前预先拉起部分实例。另一种是保持最低可用副本数,哪怕空闲也留一两个“值班”。
某新闻类App就在早高峰前10分钟,通过CronJob触发一次预扩容,等用户打开APP刷头条时,服务早已准备就绪。