Serverless时代,如何开发出能持续进化的应用系统?

HelloKitty 2023-01-04 16:34

扫一扫 在手机阅读、分享本文

2213

本文由 云数科技圈 ,作者邹大斌 撰写/授权提供,转载请注明原出处。

一些从事软件开发工作的人经常自嘲自己为“码农”,意指自己只是一个写代码的人。虽然自称“码农”是自嘲但也并非毫无道理,传统软件开发需要用编程语言一行一行编写代码,然后把这些代码组装成程序,最后部署到各种设备上运行。不过,在云计算时代,随着 Serverless 技术的日益成熟和相关开发工具的不断进步,原本由开发人员完成的大量编码工作正在逐步由系统自动生成,越来越多的应用系统变得通过点击、拖拽来完成,开发人员与“码农”正渐行渐远。另一方面,应用系统越来越重视可进化、可迭代、可持续成长能力,事件驱动架构、异步、松耦合系统变得越来越流行。

1.jpg

在不久前举办的 2022 亚马逊云科技 re:Invent 大会上,亚马逊云科技向外界充分展示了这样的变化是如何发生的。在大会上亚马逊云科技发布了多个能帮助开发人员简化开发工作、提升开发效率的服务,包括 Amazon Step Functions Distributed Map、Amazon EventBridge Pipes、Amazon Application Composer、Amazon CodeCatalyst 等。一次同时推出如此多面向开发人员的服务是亚马逊云科技近些年很少见的动作,不仅说明了亚马逊云科技对提升开发效率的高度重视,同时也标志着云应用的开发方式正迎来大变局,云应用开发进入了 Serverless 新时代。

Forrester 副总裁兼研究总监戴鲲评论说:“在持续动荡的全球宏观经济环境下,广大企业客户亟需构建兼具韧性、自适应性和创造性、适应未来的技术战略。亚马逊云科技在今年 re:Invent 大会上的产品与服务发布不仅一如既往地贯彻自身以客户为中心的长期主义,而且持续彰显其作为全球公有云基础设施与开发平台市场领导者的前瞻性技术视野与快速产品创新能力。”

01  面向未来的应用什么样?

什么样的应用才是面向未来的应用?如何构建这样的应用?这是开发者们非常关注的问题。这也正是亚马逊副总裁兼 CTO Werner Vogels 博士在今年的 re:Invent 大会压轴演讲中向观众阐述的核心内容。

Werner Vogels 的演讲以一部视频短片开始。在短片里,Werner Vogels 来到一家餐厅,他是唯一的顾客。餐厅里唯一的员工是服务员兼厨师,她一次只能做一件事,甚至将 Werner Vogels 的炸薯条一根一根下锅炸熟。这种工作方式看起来很滑稽,其实正是我们今天很多系统的设计逻辑,这就是同步(Synchrony)系统设计。

“我们这个世界是异步的。同步只是我们对世界进行的抽象,是一种简化。虽然它看起来很有序,但很低效。”Werner Vogels 在演讲时表示。

Werner Vogels 说,同步必然导致一个紧耦合的系统,而异步则带来松耦合的系统。只有在松耦合的系统中各组件之间才能降低依赖关系,更容易地进行错误隔离,架构才能持续进化。如果某个组件有了错被隔离或者修改,也不会影响整体的功能。

2.jpg

这样的系统才是一个真正面向未来的系统。“我们不可能一下子建成一个复杂的系统,而是从一个小系统开始,然后不断往前迭代,最后才会进化成为一个我们设想的复杂系统。”Werner Vogels 表示。

这正是亚马逊云科技 16 年前开始设计第一款云服务 Amazon S3 的核心原则之一。Werner Vogels 说:“我们希望该系统能持续进化,无论负载是什么,无论发生什么故障,无论我们在系统中引入什么新功能,它都应该始终继续运行,并继续往前演进。”

Amazon S3 的另一个设计原则是将系统尽量分解成小的、容易理解的模块,把它们作为构建异步的、事件驱动的、松耦合系统的基本单元。Amazon S3 也正是一个由事件驱动的微服务所组成的松耦合系统。2006 年 Amazon S3 推出的时候只有 8 个独立的微服务,现在已经超过 235 个分布式微服务,并且一直在不断迭代进化。

3.jpg

“今天,Amazon S3 可以在不关闭系统的情况下添加微服务,有了新的存储方法、新的存储策略、添加了新的策略机制和不同的存储分层,可以随时做出调整。”Werner Vogels 说。

实际上,不仅亚马逊云科技云服务遵循这些设计原则,亚马逊的零售系统也是如此。Werner Vogels 介绍,当初亚马逊零售也是一个单体系统,但很快就遇到了扩展问题,后来亚马逊重构了整个系统,实现了微服务化,把它变成了一个基于微服务架构的松耦合系统。

如今,Amazon S3 的这些设计原则已经贯穿亚马逊云科技所有系统的设计中,并已经成为亚马逊云科技设计云服务的出发点。亚马逊云科技致力于通过这些服务来帮助开发人员克服挑战,更高效地构建出异步的、事件驱动的、松耦合系统。今年新推出的 Amazon Step Functions Distributed Map、Amazon EventBridge Pipes、Amazon Application Composer、Amazon  CodeCatalyst 等云服务用意也正是在此。

02  减少“胶水”代码,快速交付应用

在软件开发过程中,为了实现不同模块之间的集成和整合(实现接口的兼容),需要编写一些代码,这类代码对业务不会产生价值,但不可不写,为开发人员深恶痛绝。Werner  Vogels 称之为“胶水”代码(glue  code),亚马逊云科技致力于通过新的云服务和更高效的工具来减少这类代码的编写,实现应用的组合式开发,以加速应用的交付。

1. Amazon Step Functions Distributed Map

Amazon Step Functions Distributed Map 是 Amazon Step Functions 中的一项新功能,可以实现大规模并行数据处理和无服务器应用的工作流调度。Amazon Step Functions 是一项可视化的工作流服务,可帮助开发人员使用云服务来构建分布式应用程序、自动化流程、编排微服务以及创建数据和机器学习(ML)管道。Amazon Step Functions 中有一个称为 Map 的状态(和 MapReduce 中的 Map 含义类似),开发人员可以在其中为一组对象中的每一个执行Amazon Step Functions 中定义的各个步骤,简单且超级高效。不过,它对处理对象的数量和大小有限制。

4.jpg

Amazon Step Functions Distributed Map 突破了这个限制,可以实现大规模并行数据处理的工作流调度。该功能允许一次扫描 Amazon S3 桶中的数千个文件并调用自定义逻辑来处理图像、日志文件等。尽管你可以通过调用 Amazon S3 和 Amazon Lambda API 完成此操作,但  Amazon Step Function 已经集成了 220 项服务,还可以管理并发错误和提供可见性,其开发效率显然更高。

2. Amazon EventBridge Pipes

Amazon EventBridge Pipes 是今年新推出的另一项工作流服务。它提供一种高效的方式来创建事件生产者和事件消费者之间的集成,从而帮助实现事件驱动架构的落地。

5.jpg

Amazon  EventBridge 服务是一种无服务器事件总线,用于管理无服务器应用的大量事件,供开发人员接收、筛选、转换、路由和交付事件。Amazon EventBridge Pipes 是 Amazon  EventBridge 的新功能,能实现事件生产者和消费者之间创建点对点集成,类似Unix中的Pipe,简单且经济高效的方法。Amazon EventBridge Pipes 能支持 15 种服务和 HTTP 端点,包括 SQS、DynamoDB 和 Kinesis  。这项新服务让开发者无需编写胶水代码就可以调用其他服务,从而可以用更少的代码快速地构建异步事件驱动系统。

3. Amazon CodeCatalyst

Amazon CodeCatalyst 是一体化的软件开发服务,汇集了在亚马逊云科技之上规划、编码、构建、测试和部署应用程序所需的工具,为软件开发团队提供集成化的项目体验,加快在亚马逊云科技之上构建和交付软件,而不用多花时间进行项目基础性工作。基于它甚至可以几分钟之内就创建出一个你需要的事件驱动的应用程序。Amazon CodeCatalyst 还有一大特色是,它集成了GitHub 和 Jira 等第三方工具,开发团队可以根据自己的习惯选择是否用第三方开发工具。

6.png

03  推动普惠,降低 Serverless 的应用门槛

Serverless Computing(无服务器计算)是在当下最受开发人员关注的热门技术之一。作为云计算的新一代技术,Serverless 让开发者可以更多地关注构建应用本身,而不需要管理和维护底层基础设施,从而简化开发工作,加快应用交付速度。

亚马逊云科技是 Serverless 技术的先驱。亚马逊云科技从 2014 年发布了业界第一个 Serverless 计算服务 Amazon Lambda 之后,每年都不断在数据库、数据分析、人工智能领域扩展Serverless 版图。而 Amazon Lambda 在采用率方面也一直保持领先地位,至今已累计发布了超过 100 款新的功能,活跃用户超过 100 万,每月的调用请求量超过 100 万亿次。

虽然在行业内占据绝对领先优势,但亚马逊云科技一直在持续提升 Amazon Lambda 的表现。其中,冷启动就是 Serverless 一直面临的挑战,今年新发布的 Amazon Lambda SnapStart 就专门解决了 Java 函数冷启动引起的延迟问题,可将 Java 函数延迟率降低 90%,而且无需更改用户的功能代码。

除了丰富 Serverless 服务种类和改善性能之外,这些年亚马逊云科技还一直致力于降低Serverless技术的门槛,让更多的企业能享受 Serverless 技术的红利。前面提到的 Amazon Step Functions Distributed Map 和 Amazon EventBridge Pipes,其核心正是 Serverless 云服务 Amazon Lambda。而今年新发布的 Amazon Application Composer 则进一步降低了Serverless 的应用门槛。

微信图片_20230104175528.jpg

扫一扫 在手机阅读、分享本文

扫码关注公众号

获取更多技术资讯

客服微信
享受1V1专属服务
免费领取技术福利
发送名片申请入群
与CTO聊合作
(备注姓名、公司及职位)
热门文章