是微服务架构不香还是云不香?
这两天技术圈里热议的一件事就是Amazon的流媒体平台Prime Video在2023年3月22日发布了一篇技术博客《规模化Prime Video的音视频监控服务,成本降低90%》,副标题:“从分布式微服务架构到单体应用程序的转变有助于实现更高的规模、弹性和降低成本”,有人把这篇文章在五一期间转到了reddit 和 hacker 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 的伸缩问题,从文章中我看到了两个问题(注意前方高能):
- 需要很多很多的并发的 AWS Step Function ,于是达到了帐户的 hard limit。
- 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 的确更香,因为如下的几个原因:
- 不再受 Step Function 的限制了,技术在自己手里,有更大的自由度。
- 没有昂贵的 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%的云计算成本)。目前可以降低成本的方式:
- 基础软件:通过开源软件自建,
- 内容分发:MinIO + Cloudflare 的免费 CDN,
- 马上准备发布的直接与底层IDC合作的廉价GPU计算资源…
欢迎大家试用。
如何访问
注:这两个区完全独立,帐号不互通。因为网络的不可抗力,千万不要跨区使用。
产品演示
介绍文章
(全文完)
(转载本站文章请注明作者和出处 宝酷 – sou-ip ,请勿用于任何商业用途)
《是微服务架构不香还是云不香?》的相关评论
今天找资料,又意外走进耗子叔的博客,有一些恍惚。耗子叔一路走好,希望大家都照顾好自己的身体
R.I.P
真的不舍
查lua教程,google进来了,唏嘘不已,对着屏幕发呆半天
耗子哥,今天过来串串门
耗子哥,今天过来串串门。2023-10-17
耗子叔,谢谢你的“多方案拒绝”策略,我成功谈判了一项重要需求
有思想,有深度,学习了
今年,走的好人有点多啊,祝好
过来看看
耗子叔,很感谢你带我走进这扇门
学东西时听别人谈到这个网站的,老前辈,走好
RIP
一路走好!
突然想到过来看看看
您的博客还停留在我的书签栏,今天偶然又打开,才反应过来您已离开有一段时间了。
RIP
R.I.P
感谢带我入门
过来看看,时空是个轮回,我们还会再见的!
R.I.P
缅怀,领路人
耗子叔,我原来以为你比我大好多,原来你也只比我大了15 岁而已。
18 年在极客时间遇到你,买了你的专栏,很值得看。
从那时候开始了解到你,然后追到了这里。
今年得知您的噩耗,那时候我在家休产假,特别的唏嘘,不明白怎么会这么突然。
更有惋惜在里面,极客时间您的专栏像一个智慧老人在引导着我,而现在这个老人他走了,特别的难过
昨天找东西,看到别人的回答链接到了耗子叔这里,于是过来看看。
2024 年要开始了,耗子叔,你在另一个世界要好好的。
aa
不知道服务器什么时候到期,到期了是不是就看不到耗子哥的博客了…RIP
确实,我担心的也是这个。能不能给个赞赏二维码,希望这个网站继续运行下去。
在网上查资料,突然想起你了,过来看一下,希望大家身体健康,吃嘛嘛香
发现sou-ip的证书更新了,愿这个网站能一直运行下去。
如果现在的管理者需要任何义务劳动或者捐赠,我愿意尽一份绵薄之力。
过来纪念一下大佬!
R.I.P.
过来纪念一下大佬!
缅怀前辈 RIP
过来纪念一下大佬
RIP
RIP
很难过,在博客前发呆好长时间!各位身体健康!
好死喵,好死喵
买了耗子叔的左耳听风 过来在看下他
过来看看,发会呆
耗子叔,今天过来看看您,R.I.P
coding your ambition,我还没有做到,如果您做到了100%,我希望我可以做到50%
今天找资料,又意外走进耗子叔的博客,有一些恍惚。宝贵的知识。不断引领者前赴后继的人们, 希望能够一直运行下去
整理积累的RSS feeds,翻到你的博客。然而人走如灯灭,恍惚间才发现这么久没有更新过。
RIP
这个博客会永远保留吗?
缅怀前辈,为我打开了编程的大门
1周年了,时光飞逝!
不管哪个 熟练后很难换其他
耗子叔,来看你了
缅怀耗子叔
感谢留下的网络遗产
转移成本最终决定一切
缅怀耗子叔
您的博客帮助了很多人
收益匪浅
再见
感谢皓叔 希望sou-ip可以一直保留下去
R.I.P
最近状态很差,来看看耗叔
R.I.P
R.I.P
真正传播技术的人
我收着呢
R.I.P