先讲这次踩过的隔壁的坑,哦不对,是帮他们踩出的坑:他们有个2C的问答社区应用,之前的运维(好像也是个刚毕业半年的实习生走的)为了“稳妥”,给三台应用服务器全上了阿里云通用型g8i 4核16G,两台MySQL主从用了通用型r8i 8核32G,Redis用了阿里云自带的集群版2主2从8G,OSS存储开了低频访问加归档存储自动分层但从来没调过期参数。更绝的是,我翻他们的监控历史,应用服务器的CPU平均负载才12%,峰值也就偶尔冲个35%,MySQL的CPU峰值才40%左右,连接数常年维持在主库80多、从库20多——这不纯纯的资源闲置在烧钱嘛?实习生走的时候还留了个文档,写着“核心业务需高配应对突发流量”,但他们社区去年最火的那次双11答题活动,加起来峰值并发也才3000左右,根本用不上这么夸张的配置。
首先说下怎么精准降应用服务器的配置?这里一定要敲黑板,绝对不能凭感觉降配置,必须拿至少7天、最好14天的完整监控数据说话,而且要重点看CPU、内存、磁盘IO、网络带宽这四个核心指标的“负载+峰值持续时间”,不能只看平均负载。比如隔壁的应用服务器,CPU平均12%、峰值35%但每次持续不超过5分钟,内存平均用了4.2G、峰值也就7G左右,磁盘IO更是低得可怜,带宽常年10Mbps以内——这种情况,通用型g8i完全没必要,换成更便宜的算力型c7a或者突发性能型t7都可以?不过突发性能型有CPU积分的限制,不太适合偶尔有5分钟以上低峰值但连续的场景,我给他们选的是阿里云突发性能型t7-l 2核8G带无上限积分模式,两台主的一台备的就够?不对不对,之前留的三台是两台主负载均衡,一台冷备——冷备其实中小团队很多都用不上,改成暖备就行,配置可以再降一档,换成突发性能型t7-l 2核4G带基础积分模式就行,只有主备切换的时候才会激活无上限积分,这样冷备(哦不对是暖备)的费用又能省一大块。
接下来是闲置资源的彻底清理,这个是很多新手甚至老运维都会忽略的点,上个月帮隔壁清理的时候,我发现了一堆乱七八糟的东西:比如之前测试用的12台按量付费ECS,用完忘了释放,一台一天大概10块钱,放了21天,光这一项就亏了2520;还有OSS里存了2019年到2023年的用户头像压缩包和历史日志文件,从来没人动过,加起来大概有1.2T,全部放在标准存储里,标准存储1T一年大概240块,归档存储才12块——这个差距太大了,我给他们写了个脚本,把OSS里超过180天的非活跃文件(头像压缩包、非核心业务的历史访问日志)全部自动转移到归档存储,超过360天的直接删除(删除前让他们运营部确认过);还有Redis里存了一堆临时数据,没有设置过期时间,比如用户上次登录的临时token、搜索的临时缓存记录,加起来大概占了5.2G的空间,之前的Redis集群版是2主2从8G,刚好差不多,清理完之后换成1主1从4G就绰绰有余了,主从切换的问题可以用Redis Sentinel或者云厂商自带的高可用服务来解决,中小团队很多都直接用云厂商自带的,省得自己维护Sentinel。

最后说下合理服务商选型调整,这个也是很多新手不太懂的,觉得“大厂商肯定稳,不能换小厂商”,其实不是的,大厂商虽然稳,但价格确实贵,中小团队如果业务不是那种对延迟要求特别高(比如低于5ms)、对可用性要求特别高(比如99.999%)的金融、医疗类业务,完全可以考虑一些靠谱的二线云厂商,比如腾讯云的轻量应用服务器其实也挺适合中小团队的2C应用,还有华为云的弹性云服务器有时候会有很大的折扣,甚至可以考虑混合云,把核心业务(比如MySQL主从)放在大厂商,把非核心业务(比如应用服务器、Redis缓存)放在二线云厂商——隔壁的问答社区业务,对延迟要求不是特别高(用户能接受10-20ms的延迟),对可用性要求是99.9%,完全可以混合云,我给他们把MySQL主从换成了阿里云通用型r7a 4核16G(因为峰值连接数还是80多,不能降太多),应用服务器和Redis缓存换成了腾讯云轻量应用服务器的2核8G和腾讯云自带的Redis标准版1主1从4G,这样又省了一笔钱——腾讯云轻量应用服务器2核8G一个月才199,阿里云突发性能型t7-l 2核8G带无上限积分模式一个月要399,差了一倍呢。
踩过这个坑才明白,中小团队的服务器运维成本优化,不是一味地降配置、换小厂商,而是要在保证核心业务稳定的前提下,把每一分预算都花在刀刃上——比如刚才说的监控数据,一定要至少看7天的完整数据,不能凭感觉降配置;比如闲置资源,一定要定期清理,按量付费的资源用完一定要记得释放;比如服务商选型,一定要根据自己的业务场景来选,不要盲目追求大厂商的“稳妥”。还有一个新手容易忽略的避坑提醒:不要随便开云厂商的增值服务,很多增值服务其实自己用脚本或者开源工具就能实现,而且费用要低很多——比如云厂商的备份服务,MySQL的备份其实自己用mysqldump或者xtrabackup就能实现,而且可以自动上传到OSS归档存储,费用要比云厂商的MySQL备份服务便宜一半以上;比如云厂商的监控告警服务,其实自己用Prometheus+Grafana就能实现,而且功能更强大,可以自定义很多监控指标和告警规则。
哦对了,刚才提到的清理OSS非活跃文件的脚本,我可以简单给你们分享一下,是用Python写的,调用的阿里云OSS SDK:首先要安装aliyun-oss2库,然后配置好AccessKey ID和AccessKey Secret(这里一定要注意,AccessKey ID和AccessKey Secret绝对不能直接写在脚本里,最好放在环境变量里或者配置文件里,配置文件的权限要设置成600,只有root用户能读写),然后指定要清理的OSS Bucket名称、非活跃文件的天数阈值,最后运行脚本就行。还有一个新手避坑提醒:删除或者转移文件之前,一定要先做备份,或者至少先做一个“模拟删除/转移”的操作,看看有没有误删误转的文件,确认无误之后再正式执行——比如刚才提到的清理OSS里的历史文件,我先让脚本生成了一个Excel表格,里面列了所有要删除/转移的文件的名称、大小、最后修改时间,然后让运营部和开发部的同事都确认了一遍,确认无误之后才正式执行的。
其实这次帮隔壁砍成本的经历,也让我自己学到了很多东西,以前我也觉得中小团队的服务器运维成本优化很难,怕动了配置影响业务,但现在看来,只要有足够的监控数据分析,只要操作足够谨慎,中小团队的服务器运维成本优化其实并不难——你们在运维工作中有没有遇到过类似的砍成本的经历?或者有没有踩过什么闲置资源烧钱的坑?欢迎在评论区分享你的经验,我们一起交流学习,一起帮老板把每一分预算都花在刀刃上。

评论列表 (0条):
加载更多评论 Loading...