阿里云增强型95付费的共享带宽,保底200Mbps,最低消费200*0.2=40Mbps,经过我计算,我觉得在40~50Mbps时使用比较合理.
由于2020年春节+武汉冠状肺炎的严重影响,网站流量急剧减少.所以我把所有的IP都纳入了共享带宽.
2020-03-05 13:20 星期四,百度在爬我们站点,带宽瞬间达到200Mbps.
原本我想把EIP脱离共享带宽,结果那天下午我刚睡醒,智商只有平时10%,没看清楚电脑屏幕,错误地移除了EIP绑定的SLB,造成了网站无法访问.
痛定思痛,我决定,开发一个自动管理调整共享带宽EIP池的程序让他在
- 流量低峰时把EIP纳入共享带宽,节约流量费用;
- 带宽高峰时让EIP移出共享带宽,提高带宽利用率.
最终最大程度地优化费用支出.
当前共享带宽 > 期望值(maxBandwidth)时,自动把高带宽的EIP移除出共享带宽
当前共享带宽 < 期望值((maxBandwidth+minBandwidth)/2)时,自动把高带宽的EIP添加入共享带宽
核心算法是动态规划
。
带宽达到均衡态之后,你就会发现这个程序一点卵用都没有,基本不会触发什么伸缩。
用到的接口:
vpc
DescribeEipMonitorData
DescribeEipAddresses
cms
DescribeCommonBandwidthPackages
AddCommonBandwidthPackageIp
RemoveCommonBandwidthPackageIp
cms
DescribeMetricList
由于需要操作VPC和共享带宽,这类都属于高危操作,RAM授权记得弄好。
如果你对授权不敏感,可以直接添加下列权限
- AliyunVPCFullAccess
- AliyunEIPFullAccess
- AliyunCloudMonitorFullAccess
- AliyunCommonBandwidthPackageFullAccess
参照 config-example.yaml
修改 config.yaml
配置文件.
cp config-example.yaml config.yaml
vi config.yaml
# docker
docker run -it \
-v /root/common-bandwidth-auto-switch/config.yaml:/app/config/config.yaml \
zeusro/common-bandwidth-auto-switch:latest
# docker-compose
docker-compose up
例子使用了 Kubernetes 的 CronJob
+ Configmap
的方式部署
kubectl create configmap cbwp-config --from-file=config.yaml=config.yaml
kubectl apply -f deploy/kubernetes/cronjob.yaml
配置的加载顺序为:先读取 config.yaml
, config.yaml
不存在再读取 config-example.yaml
文件.
kubectl delete cronjob common-bandwidth-auto-switch
kubectl delete configmap cbwp-config
- 阻塞,周期性运行,再加上健康检查
- 多实例运行