阿里云降本增效

公司电商系统基本上都放在阿里云上,2022年经济情况极度恶化,公司对研发部进行了大规模裁员,剩下的十几个人确保系统可以运行即可。2023年不忙,我仔细研究了一下我们用到的阿里云产品的计费方案,对成本大的产品进行了优化,取得了一定的效果,下面会按阿里云产品来记录一下做了哪些优化。

ECS

ECS是我们成本中占比最大的一项,除了应用系统服务器和自建K8s基建服务器外,存在很多中间件服务器如Kafka/ES/Hadoop集群。在业务扩张期间,为了降低被其他业务干扰和提升系统稳定性,业务方都想独占一套集群,这也埋下了高成本的种子。

这么做主要有以下缺点:

  • 资源利用率低 有的ES里只有一两个索引,一天的绝大部分时间都不忙
  • 费用成本大 费用不光是服务器本身的费用,阿里云安全中心是按服务器数量付费的,服务器越多费用越大
  • 运维成本大 运维需要搭建更多的集群,需要更多的监控指标、报警规则和应用系统配置

以下是一些ECS配置的建议:

  • 应用服务器满足性能要求的情况下尽量选择高配服务器 减少服务器数量可以减少磁盘/备份和云安全中心等方面的费用
  • 满足性能要求的情况下尽量复用集群 业务初期代码不稳定的时候可以升级集群来提升稳定性,代码优化之后稳定了还能降配来缩减成本
  • 测试环境可以考虑使用突发性能实例 测试环境大部分都不忙,突发实例基本可以满足要求,积分一般都用不完

RDS

RDS在我们应用系统费用中占比第二,业务扩张期间因为出现过部分关键服务数据库被打爆了,所以进行了大规模拆库,将业务库分拆到多个RDS实例上。

这么做有如下缺点:

  • 资源利用率低 有的RDS上的数据只有几个GB,读写也不频繁,数据库放到高配置实例上也不会带来很大的使用率提升
  • 费用成本大 线上系统为了保证可靠性都是高可用版本,而且还配置了只读实例,为了满足审计要求还要开启14天备份和180天全量SQL审计功能
  • 大数据相关配置更多、费用更高 大数据计算不能影响业务实例,所以用DTS同步数据到数仓里,DTS一个实例只能从同步一个RDS实例,最低费用一个月850块
  • 运维成本更大 运维需要配置更多的连接字符串、数据库用户和权限

以下是一些RDS配置的建议:

  • 综合考虑性能和成本,非核心系统尽量放一个大实例上,核心系统为了保障可靠性可以单独配置实例
  • 关注RDS实例磁盘利用率,RDS使用的是SSD磁盘,费用高,一般保证可用空间比最大表大就可以了,就可以满足大表DDL操作
  • DTS实时同步成本高,可以考虑从只读实例离线抽取数据

Datahub

Datahub的成本主要在于存储成本和shard租用费用,单个shard最大写入数据5MB/s,每个shard每天租用费用0.04元,满足性能要求的情况下尽可能降低shard数量,利用率低的shard可以考虑用api合并shard来减少shard

Dataworks

Dataworks成本主要在于公共调度资源组费用,阿里云公共调度资源组和数据集成资源组只是用来做测试,不提供SLA。

阿里云公共调度资源组阶梯收费:

  • 0到10个任务免费
  • 11到500个任务每天0.99元
  • 501到5000个任务每天60元
  • 5001到20000个任务每天150元

独享资源组4核8G每个月492元,调度并发16个,完全可以调度数千个任务,如果每天任务数超过500则使用独享调度资源组更划算。

  • 任务应该尽可能的快,这样调度吞吐量更大
  • 任务应该合理错峰运行
  • 独享数据集成资源组同步任务并发应该根据表的数据量来合理配置,小表一个并发就行了,这样线程干活的时间占比才更多

Max Compute

Max Compute主要费用为数据存储费用和任务执行费用,主要有以下建议:

  • 合理设置分区表的生命周期,有些数仓数据不需要永久保存,永久存储浪费存储费用
  • 定期检查ODPS SQL中耗时的SQL并进行优化,SQL计费主要是扫描的数据量,查询要合理剪枝,减少数据扫描量
  • 独享CU最低也要50个CU,一个月7500元,所以除非任务实效性要求特别高或者平时任务就很多,否则按量计费更划算