拓宽“主航道”的Serverless与EDA领域,亚马逊云科技不断创新开拓

3f283267d52c46ec9c584098bd60a2db.png15de08fe0d194ab5beffbb7e4d072820.pngb72ff86ccf4b4baf8cb48970980a2c2d.png在新潮如走马灯般变换的时尚界,每隔几年就会刮起一阵复古风。被誉为“时尚教父”的著名设计师安德烈·莱昂·塔利曾说:“时尚总是在寻找新的灵感和方向,而复古是其中一个重要的来源。”   

无独有偶。日新月异的高科技领域也会出现公认的“过时”技术重新回潮的现象,在业界激起的波澜不亚于新兴技术的突破。近段时间以来,关于单体应用对微服务的“反戈一击”,就格外引人注目。

最新的“爆料”颇为吸睛:知名流媒体公司某项目团队发布了一则案例研究,“他们放弃了无服务器、微服务架构,改以单体应用取而代之,此举为客户节省90%的运营成本,并改善了使用体验”。

Serverless first战略被公认为是未来方向,业界也有很多事件驱动架构(EDA)与微服务领域的实践。从基本的商业逻辑思考,我们已经很难回到单体应用为主的时代,那么背后的深意到底是什么?

不妨先还原该团队在特定场景下的方案选择过程,再来梳理从单体应用到SOA再到微服务的发展轨迹,最终才能对可进化架构的演变方向做出经得起时间考验的判断。

 

客户利益至上:“左右互搏”探索最优路径

通过还原流媒体服务案例中对分布式计算和单体应用方案的甄选过程,既能看到其对“客户利益至上”理念的坚持,又会发现亚马逊云科技适应多元需求的能力是其敢于“左右互搏”的底气。

在最初的解决方案设计中,采用无服务器组件的分布式系统,这对快速构建服务通常是不错的选择。但在实际运行中,该架构遇到了扩展瓶颈——工作流的每一秒都执行多个状态转换,很快就达到了Account的上限,且每次状态转换都要收取费用,累计下来开支不菲。

成本问题还不止于此。为了减少费用较高的视频转换作业,项目团队构建了一个微服务,将视频分割成帧,并将临时图像上传到存储系统,然后再下载且使用相关服务处理图像。不过,存储调用服务的收费依然不低,总体算下来仍难达预期。

此路不通,何妨另辟蹊径。流媒体公司做出大胆的决定,将所有的组件打包到一个流程中。这消除了对视频帧中间存储的需求,数据传输在内存中即可完成,且媒体转换、检测器、编排等组件都在单个Amazon ECS任务中运行。

值得一提的是,在新架构中检测器的数量只能纵向扩展,而项目团队需要定期向服务中添加更多检测器,对单个实例容量造成较大压力。为了解决这一问题,团队使用不同的检测器子集对每个副本进行参数优化,并以轻量级的编排层分发客户请求。

这个案例最核心的价值是打破了对微服务的“信仰崇拜”,肯定了单体架构对部分应用需求的满足,但如果因此而得出单体架构将全面“复辟”的结论,就有些矫枉过正了。

事实上,基于特定场景的路径选择并没有简单的对错,客户愿意采纳单体架构还是微服务方案,取决于其目标设定、既有资源和团队情况等多重因素,一些变量的调整就可能导致抉择的转向。例如:项目中对视频分割成帧的颗粒度倘若不是过于细化,状态转换的频度就会显著下降,存储调用的费用也将趋于合理,微服务方案的优势有望重新凸显。

 

主航道不偏离:Serverless与EDA驱动微服务持续进化

理性的判断离不开基于实验的对比分析,更源于对发展规律的深刻洞察。只有站在历史的长河中审视不同架构的演变轨迹,才能更好地认知从单体应用到面向服务架构体系(SOA)再到微服务的进化历程,不至于落入相对主义或虚无主义的陷阱。

“上古时代”的软件都是将所有功能写在一起,整个软件仿佛一体化运行的机器,单体架构由此得名。伴随软件的功能日益增加,单体架构也变得愈发复杂,很多缺点随之暴露出来。

大型单体应用的开发速度缓慢,在部署和运行时,需要服务器具有充足内存和相关资源,且必须通过在多个服务器上复制应用程序来实现横向扩展,扩展能力受限明显;同时,这些应用程序的各个功能组件采用紧耦合方式,使维护和更新颇为困难。

为了应对上述挑战,必须改变代码的紧耦合状态,将软件拆分成一个个功能单元,“面向服务的体系架构”(SOA)应运而生。在SOA架构中,每个服务独立承担各自功能,服务间借助通信协议连在一起,各项服务可使用不同的语言和工具开发,能部署在差异化的系统环境中。

在云重新定义一切的背景下,容器化潮流的迅猛来袭让更轻量化的SOA成为可能,微服务逐步占据“C位”。在容器环境中,每个服务不必再占用一台服务器,多个容器可基于一台服务器运行,甚至在Serverless架构支撑下能够实现无服务器化演进。用户不必在基础设施维护、更新等方面耗时费力,可将更多精力放到业务逻辑上。

如果说Serverless为微服务的进化按下了快行键,那么事件驱动架构(EDA)则是微服务适应不确定性环境的终极武器。

EDA能让架构中的各个模块按事件发生的顺序灵活地执行,并可把执行结果作为新的事件来驱动下一个模块的运行。Gartner发布的《十大战略技术趋势》报告显示,到2022年,已有逾50%的组织参与到事件驱动的数字化服务生态系统中,EDA会是微服务未来成长的核心动力。

显而易见,在Serverless与EDA的协同助推下,微服务业已成为数字化转型深水区里的主航道。单体应用虽然在特定场景中也具有不可或缺的价值,但从应用架构进化的底层逻辑和现实需求来看,其不可能取代微服务的主导地位。

 

架构随需应变:场景化、可进化指引未来方向

以更长远的眼光来看,应用架构的迭代升级永无止境。伴随人工智能通用化、数据生产要素化进程的提速,云计算平台需要为各种类型的企业提供随需应变、多元选择的应用架构方案,场景化、可进化是未来架构的重要演变方向。

作为全球云服务市场的翘楚,亚马逊云科技始终扮演着引领变革的角色,通过产品与服务的不断创新,为各个行业客户提供符合不同场景特征的架构选择。以Amazon S3为例:从2006年推出的几项微服务扩展到后来的300多个微服务,在存储方法、策略机制等维度持续完善,与客户共同成长。

在有助于拓宽“主航道”的Serverless与EDA领域,亚马逊云科技更是率先垂范。2014年问世的Amazon Lambda吹响了Serverless计算模型普及的号角,其后多年又为Serverless架构添加100多个新功能,进而推动Serverless从单一场景迈向全栈融合;同时,亚马逊云科技已构建起事件驱动架构的完整服务体系,包括Amazon EventBridge、Amazon Step Functions等,不仅提高开发敏捷性、节省成本,还能通过自由组合这些服务,更好地满足企业应用场景需求,将架构优势发挥到极致。

2023年,亚马逊云科技创新阐释“Serverless first”理念,擎起推进应用现代化的大旗。在一片大干快上的热潮中,亚马逊云科技倡导的“Serverless first”不等于“Serverless only”,架构路径的选择不能脱离客户的真实诉求和现实条件,拥有未来的前提是活在当下。

正如罗素所言,参差多态乃幸福本源。一家业务简单、只有几名开发人员的初创公司,与枝繁叶茂、拥有数十名工程师的大中型企业相比,选择不一样的应用架构是再自然不过的事。登高望远能知道目标所在,但也别忘了脚下的土地。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Ajax】笔记-取消请求

在进行AJAX(Asynchronous JavaScript and XML) 请求时,有时候我们需要取消正在进行的请求。取消请求可以帮助我们提高用户体验,病减少不必要的网络流量和服务器负载。 取消请求的方法 在AJAX请求中,我们可以使用以下方法来取消正在进行的请求…

【C语言】扫雷----详解(扩展版)

🍁 博客主页:江池俊的博客_CSDN博客 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 ✉️每一次努力都是一次进步,每一次尝试都是一次机会。无论遇到什么困难,…

使用Python和Scrapy实现抓取网站数据

Scrapy是一个功能强大的网络爬虫框架,允许开发者轻松地抓取和解析网站内容,这篇文章主要为大家介绍了如何使用Python的Scrapy库进行网站数据抓取,需要的可以参考一下 在本文中,我们将介绍如何使用Python的Scrapy库进行网站数据抓…

优化营商环境:构建智能营销平台,助力企业经营发展

对于企业来说,没有了客户,就像身体没有了血液,将失去生命力和活力,续存难发展更难。区域产业又是由一个个企业集聚而形成,企业的成败也就决定着区域产业的兴衰。 在当今竞争激烈的商业环境中,传统的销售手段…

【计算机视觉】DINOv2(视觉大模型)代码使用和测试(完整的源代码)

文章目录 一、环境部署二、导入原图2.1 使用vit_s14的模型 三、使用其他模型3.1 使用vit_b14的模型3.2 使用vit_l14的模型3.3 使用vit_g14的模型 一、环境部署 !git clone https://ghproxy.com/https://github.com/facebookresearch/dinov2.git输出为: Cloning in…

详解CPU的态

目录 1.CPU的工作过程 2.寄存器 3.CPU的上下文 4.系统调用 5.CPU的态 1.CPU的工作过程 CPU要执行的指令的地址存在寄存器中,指令存放在内存中,而CPU本质上就是一个去内存中根据地址取指令,然后执行指令的硬件。 举一个例子&#xff1a…

应用级监控方案Spring Boot Admin

1.简介 Spring Boot Admin为项目常用的监控方式,可以动态的监控服务是否运行和运行的参数,如类的调用情况、流量等。其中分为server与client: server: 提供展示UI与监控服务。client:加入server,被监控的…

http1.0、http1.1 http 2.0

HTTP/1.0是无状态、无连接的应用层协议。 无连接 无连接:每次请求都要建立连接,需要使用 keep-alive 参数建立长连接、HTTP1.1默认长连接keep-alive   无法复用连接,每次发送请求都要进行TCP连接,TCP的连接释放都比较费事&…

[爬虫]解决机票网站文本混淆问题-实战讲解

前言 最近有遇到很多小伙伴私信向我求助,遇到的问题基本上都是关于文本混淆或者是字体反爬的问题。今天给大家带来其中一个小伙伴的实际案例给大家讲讲解决方法 📝个人主页→数据挖掘博主ZTLJQ的主页 ​​ 个人推荐python学习系列: ☄️爬虫J…

在Windows下安装Anaconda平台

Anaconda介绍 安装Python的方法有很多,其中利用Anaconda来安装,是最为安全和便捷的方法之一。在Python中安装类库,各个类库之间可能存在相互依赖、版本冲突等问题。为了解决这个问题,Python社区提供了方便的软件包管理工具&#…

在SPringBoot生成验证码

1.引入依赖,这个依赖中包含了生成验证码的工具类 <!--引入hutool --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.3.9</version></dependency> 2.编写配置类 import cn.hu…

【NLP】国外新动态--LLM模型

一、说明 NLP走势如何?这是关于在实践中使用大型语言模型(LLM)的系列文章中的一篇文章。在这里,我将介绍LLM,并介绍使用它们的3个级别。未来的文章将探讨LLM的实际方面,例如如何使用OpenAI的公共API,Hugging Face Transformers Python库,如何微调LLM,以及如何从头开始…

Maven -- <dependencyManagement>管理子项目版本

背景&#xff1a; 一个旧项目&#xff0c;想使用mybatis-plus&#xff0c;想着这是比较基础的依赖包&#xff0c;就在父项目中添加对应依赖&#xff0c;如下: <!-- 依赖声明 --><dependencyManagement><dependencies><!-- mybatis-plus 依赖配置 -->&l…

WMTS 地图切片Web服务 协议数据解析

1. WMTS 描述 WMTS(Web Map Tiles Service):地图切片Web服务。 2. 数据示例&#xff1a; arcgis online 导出的wmts xml&#xff1a; https://sampleserver6.arcgisonline.com/arcgis/rest/services/WorldTimeZones/MapServer/WMTS 内容解析&#xff1a; contents中可能包…

云计算相关概念

文章目录 一、云计算的三种部署模式&#xff1a;公有云、私有云、混合云--区别和特性二、华为云&#xff1a;简介、主要业务、特点和优势、不同场景和行业中的应用三、华为云-三剑客&#xff1a;IaaS、PaaS、SaaS 一、云计算的三种部署模式&#xff1a;公有云、私有云、混合云–…

uni-app的H5版本下载跨域问题

前端能正常访问图片&#xff0c;但无法下载 因为路径不经过业务代码&#xff0c;所以需要在nginx配置跨域 代码&#xff1a; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET, POST, OPTIONS; add_header Access-Control-Allow-H…

WIN无法访问linux开启的SAMBA服务器

WIN无法访问linux开启的SAMBA服务器 打开搜索框“管理Windows凭据” 点击编辑

[java安全]CommonsCollections1(LazyMap)

文章目录 【java安全】CommonsCollections1(LazyMap)前言LazyMap如何创建LazyMap对象&#xff1f;如何调用LazyMap的get()方法&#xff1f;如何触发AnnotationInvocationHandler#invoke()方法&#xff1f;POC总结参考 【java安全】CommonsCollections1(LazyMap) 前言 前面我们…

【云原生】k8s之HPA,命名空间资源限制

1.HPA的相关知识 HPA&#xff08;Horizontal Pod Autoscaling&#xff09;Pod 水平自动伸缩&#xff0c;Kubernetes 有一个 HPA 的资源&#xff0c;HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod 数量。 &#xff08;1&a…

ubuntu 20.04 4090 显卡驱动安装 深度学习环境配置

1. 显卡驱动安装 准备工作&#xff1a; 换源安装输入法&#xff1a;重启的步骤先不管&#xff08;自选&#xff09;sudo apt update && sudo apt upgrade 禁用nouveau驱动&#xff08;这个驱动是ubuntu开源小组逆向破解NVIDIA的开源驱动&#xff0c;与英伟达的原有驱…