打开网易新闻 查看精彩图片

去年Q4,一位AWS社区工程师的缓存账单从每月247美元跌到74美元。他没换云厂商,没砍功能,只是把ElastiCache换成了自己搭在Fargate上的Valkey。

这个操作在AWS官方文档里找不到,但代码已经跑在生产环境18个月。

1. 为什么ElastiCache"降不下来"

1. 为什么ElastiCache"降不下来"

ElastiCache是个体面的托管服务。自动故障转移、定时备份、CloudWatch指标开箱即用——如果你需要Redis又不想自己运维,它确实省脑子。

但价格曲线是僵硬的。cache.t4g.small(2核1.37G)在eu-west-1月租25美元,cache.r7g.large(2核13G)跳到175美元。开多可用区直接翻倍。

对月入几千美元的副业项目来说,这笔钱够买一台完整的应用服务器,却只换来一个队列加会话缓存。

更隐蔽的成本是"规格焦虑"。ElastiCache的实例梯度粗糙,你常常被迫为峰值预留50%的空闲容量,因为升配是分钟级,降配却是小时级的人工决策。

托管服务的溢价逻辑在这里显形:你不是为使用的资源付费,是为"不用操心"付费。

2. Valkey是什么来头

2. Valkey是什么来头

2024年3月,Redis Labs把Redis从BSD协议改成SSPL,云厂商集体皱眉。AWS、Google、Oracle反手 fork 了Redis 7.2.4,在Linux基金会旗下搞了个新项目叫Valkey。

协议兼容是硬指标。ioredis、node-redis、BullMQ、Sidekiq、Celery——所有Redis客户端零改动直连Valkey。协议层面,它就是个Redis 7.2.4的孪生兄弟。

AWS是Valkey的铂金赞助商,但态度微妙。ElastiCache至今没有官方Valkey引擎,文档里提都不提。这位工程师的解法是把Valkey当成普通容器跑在ECS Fargate上,自建"穷人的托管缓存"。

架构草图很直白:应用和Valkey各是一个ECS Service,共享VPC,Valkey躲在私有子网,安全组只放行应用服务的IP段。没有负载均衡,没有公网暴露,流量走AWS内部网络。

持久化用EFS挂卷。Fargate容器是临时的,重启即丢数据,EFS在这里充当低成本的外置硬盘。整个设计没有EC2,没有需要ssh的机器,运维界面只剩Terraform和AWS Console。

3. 踩坑:EFS Access Point的隐藏条款

3. 踩坑:EFS Access Point的隐藏条款

第一次部署时,任务启动即崩溃,报错信息云山雾罩:ResourceInitializationError: failed to invoke EFS utils... directory does not exist。

问题出在EFS的挂载逻辑。如果你直接在Task Definition里写rootDirectory指向某个路径,而那个路径在全新的EFS文件系统里不存在,Fargate不会自动创建。它只会反复失败,仿佛在说"你自己没建好房子,凭什么让我住进去"。

正确的姿势是用EFS Access Point。它在挂载时自动创建目录并设置UNIX权限,相当于一个带初始化逻辑的"智能门牌号"。Terraform配置里多写几行,省掉 hours 的调试时间:

resource "aws_efs_access_point" "valkey" {
file_system_id = aws_efs_file_system.valkey.id
posix_user { gid = 999; uid = 999 }
root_directory {
path = "/valkey-data"
creation_info { owner_gid = 999; owner_uid = 999; permissions = "755" }
}
}

另一个细节是内存策略。Valkey默认的maxmemory-policy是noeviction,跑满后新写入直接报错。生产环境建议显式设为allkeys-lru,让冷数据自动退场。

4. 账单拆解:70%从哪来

4. 账单拆解:70%从哪来

原配置:ElastiCache cache.r6g.large(2核13G),多可用区,月租约247美元。

新配置:Fargate 2 vCPU / 4GB 内存(单可用区),EFS标准存储10GB,月租约74美元。

成本结构变了。ElastiCache的定价包含隐含的"高可用税"和"托管税",而Fargate按秒计费,EFS按实际存储计费。你可以精确控制每个参数,而不是在AWS预设的实例阶梯里选边站。

牺牲了什么?多可用区故障转移。EFS本身是区域级服务,但Valkey容器跑在单可用区,AZ故障时服务中断。对于可容忍分钟级RPO的缓存场景,这是可接受的权衡;对于支付会话这类关键数据,你需要自己搭主从复制。

另一个隐性成本是时间。第一次配置花了工程师大约6小时,包括读Valkey源码确认持久化行为、调试EFS挂载、写Terraform模块。这笔"设置税"在第一个月就摊平,之后是纯节省。

5. 谁该抄这个作业

5. 谁该抄这个作业

这个方案不适合所有人。你的团队需要熟悉ECS和Terraform,需要接受"没有AWS Support工单可开"的现实,需要在监控里自己搭Redis指标采集。

但它戳中了一个真实痛点:云服务的中间地带。太大不想自管,太小付不起托管溢价,这类 workload 长期被忽视。

AWS官方的态度值得玩味。Valkey是自家赞助的项目,ElastiCache却迟迟不接入,仿佛在保护既有产品的定价权。工程师的自建方案,某种程度上是对这种产品策略的投票。

「我们跑了一年半,重启过几十次,丢过两次数据(都是测试环境配置错误),生产环境零事故。」这位工程师在文末写道。他没有用"颠覆"或"革命"这样的词,只是贴出了Terraform模块的GitHub链接。

你会为了每月省170美元,接手这部分运维责任吗?