公司上云之后,资源多了,灵活性也高了,但问题也跟着来了。比如晚上没人用的时候,服务器还开着一堆;一到促销活动,系统又扛不住,卡得像老牛拉车。其实这些都不是硬件不行,而是调度没做好。
动态伸缩:该多就多,该少就少
很多企业一开始为了保险,直接把资源配满,结果平时浪费严重。合理的做法是按需分配。比如电商网站在双11前自动扩容,在凌晨用户少时自动缩容。这背后靠的是动态伸缩策略(Auto Scaling),系统根据CPU、内存使用率实时调整实例数量。
aws autoscaling put-scaling-policy \
--policy-name ScaleUpPolicy \
--auto-scaling-group-name my-asg \
--scaling-adjustment 2 \
--adjustment-type ChangeInCapacity
上面这段命令就是给AWS的自动伸缩组设置一个增加两个实例的策略。当监控指标触发阈值,就会自动执行。
负载均衡+任务调度:别让一台机器累死
就算资源够,如果都压在一台服务器上,照样会崩。常见的做法是结合负载均衡和任务调度器。比如用Nginx做流量分发,后端接Kubernetes管理容器。K8s能根据节点负载情况,把新任务扔到最空闲的机器上去。
举个例子,你家小区快递柜满了,快递员不会全堆在一个柜子,而是看哪个还有空位。云调度也一样,谁有空谁接单。
优先级调度:关键任务先跑
不是所有任务都平等。财务报表生成这种定时任务必须准时完成,而日志分析可以晚点跑。通过设置任务优先级,调度器会先把资源留给高优先级作业。比如在YARN或Slurm这类资源管理器中,可以为不同队列分配权重和资源上限。
<property>
<name>yarn.scheduler.capacity.root.high-priority.capacity</name>
<value>60</value>
</property>
这个配置表示高优先级队列占60%的集群资源,确保核心业务不被挤占。
成本与性能平衡:别为了省钱卡成PPT
有人为了省钱,全用低配实例,结果响应慢得没法用。也有人不管三七二十一上顶配,账单吓人。优化调度不只是技术问题,更是成本权衡。可以用混合实例策略,主力用按需实例,高峰期加上竞价实例(Spot Instance)补足,便宜能省七八成。
但要注意,竞价实例可能随时被回收,所以得配合检查点机制,任务中断了也能续上。就像打游戏存档,不能一断线就从头开始。
监控反馈闭环:让调度越来越聪明
再好的策略也得看实际效果。部署Prometheus+Grafana这套组合,实时看资源使用趋势。发现某服务总在下午三点爆CPU,就可以提前扩容,而不是等用户投诉了才反应。
调度不是设完就完的事,得持续调。就像开车,导航定好路线,还得根据堵车情况随时变道。云资源调度也得形成“监控→分析→调整→验证”的闭环。