标签 S3 下的文章

这两天技术圈里热议的一件事就是Amazon的流媒体平台Prime Video在2023年3月22日发布了一篇技术博客《规模化Prime Video的音视频监控服务,成本降低90%》,副标题:“从分布式微服务架构到单体应用程序的转变有助于实现更高的规模、弹性和降低成本”,有人把这篇文章在五一期间转到了reddithacker news 上,在Reddit上热议。这种话题与业内推崇的微服务架构形成了鲜明的对比。从“微服务架构”转“单体架构”,还是Amazon干的,这个话题足够劲爆。然后DHH在刚喷完Typescript后继续发文《即便是亚马逊也无法理解Servless或微服务》,继续抨击微服务架构,于是,瞬间引爆技术圈,登上技术圈热搜。

今天上午有好几个朋友在微信里转了三篇文章给我,如下所示:

看看这些标题就知道这些文章要的是流量而不是好好写篇文章。看到第二篇,你还真当 Prime Video 就是 Amazon 的全部么?然后,再看看这些文章后面的跟风评论,我觉得有 80%的人只看标题,而且是连原文都不看的。所以,我想我得写篇文章了……

原文解读

要认清这个问题首先是要认认真真读一读原文,Amazon Prime Video 技术团队的这篇文章并不难读,也没有太多的技术细节,但核心意思如下:

1)这个系统是一个监控系统,用于监控数据千条用户的点播视频流。主要是监控整个视频流运作的质量和效果(比如:视频损坏或是音频不同步等问题),这个监控主要是处理视频帧,所以,他们有一个微服务主要是用来把视频拆分成帧,并临时存在 S3 上,就是下图中的 Media Conversion 服务。

2)为了快速搭建系统,Prime Video团队使用了Serverless 架构,也就是著名的 AWS Lambda 和 AWS Step Functions。前置 Lambda 用来做用户请求的网关,Step Function 用来做监控(探测器),有问题后,就发 SNS 上,Step Function 从 S3 获取 Media Conversion 的数据,然后把运行结果再汇总给一个后置的 Lambda ,并存在 S3 上。

整个架构看上去非常简单 ,一点也不复杂,而且使用了 Serverless 的架构,一点服务器的影子都看不见。实话实说,这样的开发不香吗?我觉得很香啊,方便快捷,完全不理那些无聊的基础设施,直接把代码转成服务,然后用 AWS 的 Lamda + Step Function + SNS + S3 分分钟就搭出一个有模有样的监控系统了,哪里不好了?!

但是他们遇到了一个比较大的问题,就是 AWS Step Function 的伸缩问题,从文章中我看到了两个问题(注意前方高能):

  1. 需要很多很多的并发的 AWS Step Function ,于是达到了帐户的 hard limit。
  2. AWS Step Function 按状态转换收费,所以,贵得受不了了。

注意,这里有两个关键点:1)帐户对 Step Function 有限制,2)Step Function 太贵了用不起

然后,Prime Video 的团队开始解决问题,下面是解决的手段:

1) 把 Media Conversion  和 Step Function 全部写在一个程序里,Media Conversion 跟 Step Function 里的东西通过内存通信,不再走S3了。结果汇总到一个线程中,然后写到 S3.

2)把上面这个单体架构进行分布式部署,还是用之前的 AWS Lambda 来做入门调度。

EC2 的水平扩展没有限制,而且你想买多少 CPU/MEM 的机器由你说了算,而这些视频转码,监控分析的功能感觉就不复杂,本来就应该写在一起,这么做不更香吗?当然更香,比前面的 Serverless 的确更香,因为如下的几个原因:

  1. 不再受 Step Function 的限制了,技术在自己手里,有更大的自由度。
  2. 没有昂贵的 Step Function 云成本的确变得更低了,如果你把 Lambda 换成 Nginx 或 Spring Gateway 或是我司的 Easegress,你把 S3 换成 MinIO,你把 SNS 换成 Kafka,你的成本 还能再低。

独立思考

好了,原文解读完了,你有自己的独立思考了吗?下面是我的独立思考,供你参考:

1)AWS 的 Serverless 也好, 微服务也好,单体也好,在合适的场景也都很香。这就跟汽车一样,跑车,货车,越野车各有各的场景,你用跑车拉货,还是用货车泡妞都不是一个很好的决定。

2)这篇文章中的这个例子中的业务太过简单了,本来就是一两个服务就可以干完的事。就是一个转码加分析的事,要分开的话,就两个微服务就好了(一个转码一个分析),做成流式的。如果不想分,合在一起也没问题了,这个粒度是微服务没毛病。微服务的划分有好些原则,我这里只罗列几个比较重要的原则:

  • 边界上下文。微服务的粒度不能大于领域驱动里的 Bounded Context(具体是什么 大家自行 Google),也就是一个业务域。
  • 单一职责,高内聚,低耦合。把因为相同原因变化的合在一起(内聚),把不同原因变化的分开(解耦)
  • 事务和一致性。对于两个重度依赖的功能,需要完成一个事务和要保证强一致性的,最好不要拆开,要放在一起。
  • 跟组织架构匹配。把同一个团队的东西放在一起,不同团队的分开。

3)Prime Video 遇到的问题不是技术问题,而是 AWS  Step Function 处理能力不足,而且收费还很贵的问题。这个是 AWS 的产品问题,不是技术问题。或者说,这个是Prime Video滥用了Step Function的问题(本来这种大量的数据分析处理就不适合Step Function)。所以,大家不要用一个产品问题来得到微服务架构有问题的结论,这个没有因果关系。试问,如果 Step Funciton 可以无限扩展,性能也很好,而且白菜价,那么 Prime Video 团队还会有动力改成单体吗?他们不会反过来吹爆 Serverless 吗?

4)Prime Video 跟 AWS 是两个独立核算的公司,就像 Amazon 的电商和 AWS 一样,也是两个公司。Amazon 的电商和 AWS 对服务化或是微服务架构的理解和运维,我个人认为这个世界上再也找不到另外一家公司了,包括 Google 或 Microsoft。你有空可以看看本站以前的这篇文章《Steve Yegg对Amazon和Google平台的吐槽》你会了解的更多。

5)Prime Video 这个案例本质上是“下云”,下了 AWS Serverless 的云。云上的成本就是高,一个是费用问题,另一个是被锁定的问题。Prime Video 团队应该很庆幸这个监控系统并不复杂,重写起来也很快,所以,可以很快使用一个更传统的“服务化”+“云计算”的分布式架构,不然,就得像 DHH 那样咬牙下云——《Why We’re Leaving the Cloud》(他们的 SRE 的这篇博文 Our Cloud Spend in 2022说明了下云的困难和节约了多少成本)

后记

最后让我做个我自己的广告。我在过去几年的创业中,帮助了很多公司解决了这些 分布式,微服务,云原生以及云计算成本的问题,如果你也有类似问题。欢迎,跟我联系:[email protected]

另外,我们今年发布了一个平台 MegaEase Cloud,就是想让用户在不失去云计算体验的同时,通过自建高可用基础架构的方式来获得更低的成本(至少降 50%的云计算成本)。目前可以降低成本的方式:

  1. 基础软件:通过开源软件自建,
  2. 内容分发:MinIO + Cloudflare 的免费 CDN,
  3. 马上准备发布的直接与底层IDC合作的廉价GPU计算资源…

欢迎大家试用。

如何访问

注:这两个区完全独立,帐号不互通。因为网络的不可抗力,千万不要跨区使用。

产品演示

介绍文章

 

一个朋友分享一下他的大作,我觉得这个 Agent+Serverless 架构在工程层面是一个很棒的实现,希望各位佬友能够指教.

省流

一种远程部署 Agent 的方法:
基于 FileSystem 持久化的无状态容器 Agent 部署架构.
实现 Serverless 部署有状态 Agent,基本无单点故障,成本 500-1000 刀 / 月降到 30 刀 / 月
让 Agent 无痛上云而不必要单点部署!

项目源码

项目简介

为了解决部署 AI Agent 的两难问题:

  • 单机部署有状态但 “不容易负载均衡”“成本高”“各个功能耦合” 问题.
  • Serverless 便宜,很多即开即用的组件,不需要管理底层架构,但每次调用丢失状态 (对话历史等)。

本项目实现 Lambda + S3 + DynamoDB 来部署 Claude Agent,实现成本 30 刀 / 月的有状态 Agent,彻底解决以上问题。

这个架构打破了 "Serverless = 无状态" 的固有观念。通过在 S3 中维持会话历史,Lambda 获得了有状态 Agent 的能力,同时保持按需计费的成本优势。

状态管理不需要绑定在容器上,可以与计算完全分离。结合 DynamoDB 的映射、S3 的持久化、Lambda 的弹性计算,用更少的钱,更耦合的组件实现了更好的可靠性。

适用场景

  • Telegram / 微信 / Slack Bot (本项目用 TelegramBot 做示例的,Client 还可以实现其他)
  • SaaS 应用中的 AI 助手 (需要重新写 Client)
  • 多租户平台

Agent 为什么难以 Serverless 化

Claude Agent SDK 需要维护对话状态,与无状态 API 完全不同:

  • 每个 Agent 需要持久 shell、工作目录、完整对话树
  • Lambda 环境是无状态的:每次调用都是干净环境,/tmp 会被清空
  • 官方推荐四种部署模式中,Hybrid Sessions(临时容器 + 状态恢复)成本最优

项目框架 (这个只是当前我需要集成到 TG, 各位大佬如果有需要可以把 Client 改为其他客户端。欢迎 Fork 或者提 PR 来兼容更多客户端!)

Telegram User → Bot API → API Gateway → Producer Lambda → SQS Queue → Consumer Lambda
                                              ↓                            ↓
                                        Return 200              agent-server Lambda
                                        immediately                        ↓
                                              DynamoDB (Session mapping) + S3 (Session files) + Bedrock (Claude)

参考

本文永久链接

https://forum.beginner.center/t/topic/2575


📌 转载信息
转载时间:
2026/1/6 17:05:44

没有 VPS?教你零成本在 ClawCloud 上部署 CLIProxyAPI 继续讨论~

近期需要部署 CLIProxyApi 反代 反重力,但苦于最近服务器都遭受 CC 攻击,所以选择容器平台
原教程已经很详细啦,但现在(指发帖日 2025/12/30)Clawcloud 的容器额外储存已经无法写入了,按照原教程会导致容器一直重启呢

所以!需要使用 Clawcloud 提供的免费 Object Storage Service 作为储存啦
进入 Object Storage 之后,随便建立一个 Private 储存桶


之后保存以下信息:存储桶全名、Access Key、Secret Key 以及 External 地址(注意不要使用内网地址!目前是不可达的!)



这 4 个参数将分别用于设置环境变量。此外,我们还需额外设定一个 MANAGEMENT_PASSWORD (用于登录 WebUI 的密码)。请将这些信息整理为以下格式并妥善保存:

OBJECTSTORE_ENDPOINT=External值
OBJECTSTORE_ACCESS_KEY=Access Key值
OBJECTSTORE_SECRET_KEY=Secret Key值
OBJECTSTORE_BUCKET=存储桶全称
MANAGEMENT_PASSWORD=访问WebUI的密码

然后转到 App Launchpad 创建容器,与原教程一致
如果只需要一个服务,可以适当拉高内存哦

页面向下拉动,在高级设置中,需要填写 和原教程不一致哦
环境变量 (Environment Variables)

OBJECTSTORE_ENDPOINT=External值
OBJECTSTORE_ACCESS_KEY=Access Key值
OBJECTSTORE_SECRET_KEY=Secret Key值
OBJECTSTORE_BUCKET=存储桶全称
MANAGEMENT_PASSWORD=访问WebUI的密码

启动命令 (Command): /CLIProxyAPI/CLIProxyAPI
Local Storage: 已经,不需要了
环境变量的填写方法参看下图

最后点击部署,访问你的 https://PublicAddress/management.html 就可以使用啦


📌 转载信息
原作者:
asaki
转载时间:
2025/12/30 18:05:21