Serverless和EDA是绝配,亚马逊云科技CTO Werner表示需要用开放心态来重新审视架构

news2024/10/6 6:50:28

前一段有个很火的博客,讲的是一家全球流媒体企业的监测系统从Serverless+微服务改成了单体,成本居然降低了90%!这一下子可在网上炸锅了,特别是一些看不惯微服务的、单体应用的拥趸,更是坐不住了。但这并不像吃瓜群众看到的那样,仅仅是“回归”单体应用,或者说大家的关注点都盯着那个成本降低了90%。

大部分人忽略了两件事情:

(1)架构的演进

(2)Serverless First

 

架构的演进

视频监控系统最早版本确实选择了分布式的架构,主要包含三个组件:

1. 媒体转换服务:把视频转换成“帧”,保存在Amazon S3中。

2. 缺陷检测服务:分析Amazon S3中的视频“帧”,检查是否有缺陷。

3. 通知服务:发现了视频缺陷,发送实时通知。

9914dc8da64e45abb20f4a3c26a858ff.png

 

这个架构的好处是:充分利用了亚马逊云科技的基础设施。Amazon S3帮助进行数据在多个服务之间进行中转,Amazon Step Functions帮助对多个服务进行组合和协调。在Serverless的加持下,每个组件都可以根据流量独立地、自动地扩展。

这个架构非常简单,但简单的架构不一定是单体架构,也可能是Serverless架构,因为亚马逊云科技把复杂的细节都给封装起来了,程序员可以专注业务的开发,可以快速实现,快速进入市场。

但是当流量大了以后,这个架构暴露出了两个问题:

(1) 服务粒度拆分得太细,使用Amazon Step Functions组合起来以后,导致状态迁移次数过多,收费自然就高了。

(2) 使用Amazon S3来暂存视频帧,对数据的存取需要一定的费用,当视频流数量很大时,费用也就相应上升了。

很明显,原有的微服务架构已经不满足需求了,必须进行演进。团队的选择是:把所有的服务都放到一个进程中,部署到一个Amazon ECS中,数据的通信不再使用Amazon S3,而是直接用Amazon ECS的内存。既然在一个进程中,Amazon Step Functions也就不需要了,状态转换带来的费用也就没有了。

当一个Amazon ECS不够用,需要扩展的时候,可以部署多个Amazon ECS。用这种方式,成本降低了90%。

但是很多人没意识到的是,这里只是运行成本降低了90%,开发成本并没有算进去。原来系统用的是Amazon Step Functions,在把微服务架构转换成单体的过程中,自然是不用了,但是Amazon Step Functions承担的协调功能怎么办呢?它内置的重试功能、异常捕获功能怎么办呢?如果出现未处理的异常、运行超时、Socket超时等问题该怎么办呢?

这些问题都需要程序员手工来重新编码实现!

此外使用单体架构,失去了原来Serverless自然拥有的横向扩展的能力,想根据流量对特定微服务进行扩展是不可能了,现在扩展的最小单位变成了AmazonECS,并且团队不得不自己去估算流量,编程实现请求在多个Amazon ECS之间的转发。

架构设计本质上是一种权衡(Trade-Off),不可能存在一种面面俱到的完美架构,一劳永逸地解决问题,架构师的工作就是不断地取舍,根据需求不断演进架构,找到最适合自己的。

这个监控系统的架构就是一个演进的过程,从微服务+Serverless开始,最后由于基于成本的考虑,转换为单体,自己实现扩展,自己管理基础设施,自己开发部分代码。亚马逊的CTO Werner说:构建可演进的软件系统是一种策略,必须用开放的心态来重新审视你的架构。

 

Serverless First

综上所述,Prime Video监控系统这个案例,实际上就是架构演进的自然结果。现在如果你要构建一个新的应用,不要做某种架构的狂热信徒,不能说这个就好,那个就不好,一切都视情况而定,先保持简单,然后再慢慢演进。但是建议大家:一定要有Serverless First的心态。

原因非常简单,使用Serverless,可以抛弃基础设施维护的负担,把注意力集中在业务实现上,在几天或者几周内快速构建一个系统,推向市场并且获得收益。Serverless是真正地按价值付费,用户使用了你开发的产品,才会产生费用,如果没有流量,根本不会产生费用。

当业务取得成功,有持续稳定的流量,对云上成本很敏感,愿意自己维护基础设施,可以接受增加部分开发工作,这个时候可以考虑进行一些架构调整,比如将工作负载转向容器。这是一种市场导向,业务导向的方法,也是一种更加敏捷的方法。如果在设置虚拟机,容器,软件等方面花费太多的金钱和精力,最后发现产品不是市场所需要的,那将是一种巨大的浪费。

Serverless和EDA(事件驱动架构)是绝配,当你采用它们的时候,会迫使你不断思考,把整个系统变成松耦合的状态,让系统中每个组件都更加独立,互不影响。这也是良好的设计要达到的目标之一。

即使将来要“回归”到单体,或者整个系统一部分用微服务,一部分用单体,之前绝大部分组件代码都可以重用,就像视频监控系统那样,你要做的只是把这些组件放入到一个进程,一个Container中,然后手工编码补充完善那些本来由Serverless内置提供的能力。如果反过来,一开始系统不是松耦合的,再想变成微服务和Serverless,那拆分的代价将会非常之高。

 

总结

视频监控系统这个案例的讨论是很有价值的,它给我们敲响了警钟,并不是微服务不行,Serverless不行,而是要在合适的时间点,选择合适的架构。

现代应用的架构设计要有Serverless First的心态,不要过多考虑基础设施,而是把注意力集中在业务实现上,迅速推出产品和服务,然后再根据实际需求进行调整,从而实现业务价值的最大化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/751968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ret2syscall-执行系统调用

题目 checksec一下: 32位程序,没有canary、PIE,开了NX,放入IDA看一下: 有gets,可以溢出,不过没有system函数,也不能执行shellcode,查看字符发现有/bin/sh,那就…

消息中间件系列 - RocketMQ

前言 本内容仅用于个人学习笔记,如有侵扰,联系删除 【尚硅谷】RocketMQ教程丨深度掌握MQ消息中间件_哔哩哔哩_bilibili 第一章 RocketMQ概述 一、MQ概述 1 、MQ简介 MQ,Message Queue,是一种提供消息队列服务的中间件&#…

SpringBoot(七)Filter的使用

思考一个问题,服务端对于客户端的请求,真的应该照单全收吗?不是的。比如拿我们之前实现的用户注册功能来看,如果用户的昵称带了一些不友好的字母或汉字,你是给他过滤掉呢还是让他注册呢?毫无疑问&#xff0…

Zint-条码生成软件-命令行调用-一维条码和二维条码

文章目录 1.Zint简介2.术语3.命令行3.1.输入数据3.2.直接输出3.3.选择条码类型3.4.调整高度3.5.调整空白3.6.添加边界条和框3.7.颜色设置3.8.旋转3.9.调整图像尺寸 4.界面5.总结 1.Zint简介 Zint项目旨在提供一个完整的跨平台开源条形码生成解决方案。该软件包目前包括一个基于…

零拷贝是如何实现的

零拷贝是如何实现的 零拷贝(Zero-copy)是一种优化技术,用于在数据传输过程中减少数据的拷贝次数,从而提高数据传输的效率和性能。传统的数据传输涉及多次内存拷贝操作,而零拷贝通过减少或避免这些拷贝操作来实现性能优…

HDC.Cloud 2023|邂逅AI,华为云CodeArts铸就研发效能10倍提升

2023年7月7日-9日,华为开发者大会2023(Cloud)在东莞松山湖隆重举行。期间,华为云主办了以“AI‘邂逅’一站式软件开发,CodeArts以10倍效能“绘”企业应用远景”为主题的分论坛。 华为云PaaS服务产品部副部长汪维敏携一…

用户注册倒计时案例

代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </hea…

ORA-00845: MEMORY_TARGET not supported on this system

memory_target的值需要比tmpfs的小。 解决&#xff1a; vim /usr/local/oracle/admin/orcl/pfile/init.ora.6132023154657 强制加载init.ora.6132023154657文件启动数据库 SQL> startup force pfile/usr/local/oracle/admin/orcl/pfile/init.ora.6132023154657;

【原生基础篇】JavaScript中常用的数据输出方式解析

​ 在 JavaScript 中&#xff0c;一般使用如下几种方式进行数据的输出&#xff1a; JavaScript 基础到高级 Canvas游戏开发 原生JavaScipt案例合集 JavaScript DOM基础 1. 在浏览器的控制台输出 浏览器F12打开浏览器控制台(一般前端开发人员必备浏览器为谷歌浏览器&#xff0…

ArcGIS一张图的制作过程

来源&#xff1a;GIS荟 数据 首先&#xff0c;第一步是数据的准备和处理&#xff0c;这里没什么好说的。 使用的所有数据都是在网上下载的 OSM 数据。 第一步 主视觉 为了更好的说明该地图的完整操作过程&#xff0c;同时又要有条理、比较好理解&#xff0c;所以我采用拆分…

matlab处理数据

Matlab异常值处理https://blog.csdn.net/weixin_57345774/article/details/126965835?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22126965835%22%2C%22source%22%3A%22qq_53011270%22%7D&fromshareblogdetail 异常值识别和…

SAP从放弃到入门系列之WIP Batch(Work-in-Process)-Part2

文章目录 一、前言二、系统操作2.1 数据设置2.2 业务数据2.3 相关的NOTE&#xff1a;1473025 - FAQ: WIP 批次 三、其他 一、前言 这个测试验证的过程真的是很难受&#xff0c;由于资料太少&#xff0c;查到的SAP官方的文档也描述的非常粗略。因为我从一开始就是有目的的去验证…

性能测试工具 jmeter 录制脚本,传递 cookie,循环执行接口

目录 前言&#xff1a; 代理录制脚本 循环重复添加接口 登录并传递 cookie 给新建产品接口 循环执行脚本 前言&#xff1a; 在使用JMeter进行性能测试时&#xff0c;录制脚本是一种常用的方法。录制脚本可以帮助你捕获和重放用户与应用程序之间的交互&#xff0c;以模拟真…

【深度学习笔记】训练 / 验证 / 测试集

本专栏是网易云课堂人工智能课程《神经网络与深度学习》的学习笔记&#xff0c;视频由网易云课堂与 deeplearning.ai 联合出品&#xff0c;主讲人是吴恩达 Andrew Ng 教授。感兴趣的网友可以观看网易云课堂的视频进行深入学习&#xff0c;视频的链接如下&#xff1a; 神经网络和…

基于CBAM-CNN卷积神经网络预测研究(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Linux SSH访问虚拟机失败 Restarting network (via systemctl)

访问SSH访问服务器连接失败,重启network 失败 Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See “systemctl status network.service” and “journalctl -xe” for details.关闭 NetworkManage…

mayavi 远程可视化

似乎最近总是在处理远程可视化的问题 首先应该像配置open3d一样完成x服务器的配置&#xff0c;这里给出我自己的链接。 这时候我们进行安装&#xff0c;给出官网链接 pip install mayavi pip install PyQt5不出意外的话&#xff0c;将会出意外。 会提示如下报错qt.qpa.plugi…

关于海外的应用商店优化策略

关于应用商店优化&#xff0c;我们可以通过投放应用广告&#xff0c;或者是遵循ASO的实践&#xff0c;来优化应用程序从而获得自然流量。 如果开始进行应用商店优化&#xff0c;我们需要准备一份可用于日常的ASO清单。 建立清晰的应用商店优化策略&#xff0c;研究并了解市场…

适用于电脑的 9 款最佳视频压缩器 | 压缩而不损失质量

如果您是视频编辑者或经常处理视频的人&#xff0c;您就会知道一个简单的 1 分钟高清视频会占用您的硬盘多大的空间。无论是在抖音、快手上上传视频&#xff0c;还是只是想在硬盘中保留视频文件的备份&#xff0c;您都需要一个具体的解决方案来压缩视频&#xff0c;而不会大幅降…

解决MAC IDEA终端每次都要source ~/.zshrc

安装nvm之后&#xff0c;发现每隔一段时间&#xff08;不清楚是新打开一个终端还是会定时刷新&#xff09;就要重新执行source ~/zshrc&#xff0c;才能执行nvm命令。找了一圈发现idea默认使用的shell是bash&#xff0c;将默认的shell改成zsh就可以&#xff0c;更改位置&#x…