在新潮如走马灯般变换的时尚界,每隔几年就会刮起一阵复古风。被誉为“时尚教父”的著名设计师安德烈·莱昂·塔利曾说:“时尚总是在寻找新的灵感和方向,而复古是其中一个重要的来源。”
无独有偶。日新月异的高科技领域也会出现公认的“过时”技术重新回潮的现象,在业界激起的波澜不亚于新兴技术的突破。近段时间以来,关于单体应用对微服务的“反戈一击”,就格外引人注目。
最新的“爆料”颇为吸睛:知名流媒体公司某项目团队发布了一则案例研究,“他们放弃了无服务器、微服务架构,改以单体应用取而代之,此举为客户节省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”,架构路径的选择不能脱离客户的真实诉求和现实条件,拥有未来的前提是活在当下。
正如罗素所言,参差多态乃幸福本源。一家业务简单、只有几名开发人员的初创公司,与枝繁叶茂、拥有数十名工程师的大中型企业相比,选择不一样的应用架构是再自然不过的事。登高望远能知道目标所在,但也别忘了脚下的土地。