近年来,云计算和微服务架构的流行使得许多公司开始将应用程序部署到云上。在这个过程中,一些新的技术和概念也随之而来,比如MAD(现代化应用)架构。MAD架构的主要目的是让企业能够更好地利用云计算和微服务架构来构建灵活、高效、可扩展的应用程序。
在介绍MAD架构之前,我们先回顾一下最近十年应用部署架构的演进。
现在我司有一个任务需求,需要将用户上传到mp4文件转换为WMV格式再存储到数据中。
01 单体架构
我们使用最早的单体架构部署,作为最传统的应用部署模式,是将整个应用程序作为一个单一的、紧密耦合的单元进行开发和部署。
在这种情况下,MP4文件转换为WMV格式的功能将作为应用程序的一部分实现。整个应用程序在一个部署单元中运行,会包括处理用户界面、业务逻辑和数据访问等功能。
1.1
遇到问题
使用这种模式,问题非常明显,虽然部署简单,但会导致代码和功能之间的紧密耦合,遇到局部bug会影响整个应用功能运行,可伸缩性受限,整个应用程序需要按照最高负载需求进行伸缩,而不仅仅是转换文件的功能。这可能导致资源浪费和低效的资源利用,另外也会存在单点故障问题,如果应用程序的某个组件出现故障,整个应用程序都会受到影响。
在单体架构中,所有的功能模块都被打包在一起,共享同一个数据库和用户界面。单体架构在早期的软件开发中非常常见,因为它简单、易于理解和实现,但受限于可扩展、可维护性、高可用性等问题,单体架构逐渐被时代淘汰。
02 容器技术/微服务
为了解决单体架构存在问题,容器技术孕育而生,直至docker容器技术出现,行业改变了以往的架构模式。
从过去以物理机和虚拟机为主体的开发运维环境,向以容器为核心的基础设施的转变过程,但这也并不是一次温和的改革,而是涵盖了对网络、存储、调度、操作系统、分布式原理等各个方面的容器化理解和改造。
容器技术发展彻底释放了微服务天性,在单体架构部署存在的问题,在微服务架构中,应用程序被拆分为多个小型、独立部署的服务,每个服务专注于一个特定的功能。对于MP4文件转换为WMV格式的过程,可以将其作为一个单独的转换服务实现,甚至可以根据转换过程进一步拆分,实现更精细化管理,每个服务可以独立部署和伸缩,提供更好的灵活性和可扩展性,服务之间都是独立的,可以独立开发、测试、扩展和部署。
2.1 遇到问题
随之而来系统复杂性增加,微服务架构引入了分布式系统的复杂性,包括服务之间的通信、数据一致性和故障处理等方面。
部署和管理成本增加,管理多个服务的部署和运维需要更多的工作和资源。
03 企业需求
对于企业,如果希望既要实现高效、可伸缩、高可用等功能,同时提高团队人员效率,开发者可以专注于编写业务逻辑,而无需担心服务器的配置、扩展或管理。
还是之前“MP4文件转换为WMV格式存储到数据”中例子,如何实现开发者可以专注于编写业务逻辑,而无需担心服务器的配置、扩展或管理问题?
我们通过两个步骤来了解:
1、Serverless服务
2、事件驱动架构(EDA)
Serverless 在基础设施端解决运维困扰
在Serverless计算服务中,开发人员只需关注应用程序的业务逻辑,云服务提供商将负责管理和调配计算资源,平台根据需求自动扩展计算资源,以适应变化的工作负载,同时按使用付费,根据实际使用的计算资源付费,避免了长期维护和不必要的成本。
EDA让开发者可以专注于编写业务逻辑使用事件驱动架构
使用EDA架构来实现将MP4文件转换为WMV格式的过程可以提供一种高度可扩展和灵活的方式。
1、事件源:
事件源是用户上传的MP4文件,上传成功后存储在云存储服务(如Amazon S3)中。当有新的MP4文件上传时,Amazon S3会发送一个事件通知。
2、事件触发器:
创建一个事件触发器,以捕获Amazon S3的事件通知,并将其转化为事件。这可以通过使用Amazon S3的事件通知功能,或者使用专门的触发器服务来实现。
3、事件总线:
搭建一个事件总线(如消息队列或事件流服务),用于接收和传递事件。事件总线可以作为中心枢纽,接收来自不同事件触发器的事件。
4、事件处理程序:
编写事件处理程序,可以使用云函数(如Amazon Lambda)或自己搭建的应用程序来处理事件。事件处理程序将接收到的事件作为触发器,执行MP4文件转换为WMV格式的操作。
5、MP4转换为WMV:
在事件处理程序中,使用适当的工具或服务(如FFmpeg)来执行MP4文件转换为WMV格式的任务。通过编写代码来提取上传的MP4文件,使用合适的转换命令和参数将其转换为WMV格式。
6、结果处理:
一旦MP4转换为WMV完成,将转换后的文件存储云存储服务(如Amazon S3)中。根据需求,还可以将转换结果通知相关方(如用户、运维管理员),还可以将其集成到其他应用程序中。
通过以上的架构,当用户上传MP4文件到指定的存储桶时,Amazon S3会发送事件通知到事件触发器。事件触发器将通知转换为事件并发送到事件总线。事件总线将事件分发给相应的事件处理程序,触发MP4到WMV格式转换的任务。事件处理程序处理完任务后,将转换后的文件存储在适当的位置,并可以通过适当的方式通知相关方。
通过EDA架构,每个事件模块有自己处理条件和界限,同时提供可扩展性和弹性,并且允许在需要时添加更多的事件处理程序来处理多个转换任务。我们还可以与其他服务和组件进行集成(例如:日志监控等),以实现更复杂的工作流程和自定义逻辑。
04 Amazon Lambda
Serverless和事件驱动架构(EDA)是现代应用开发中的两个重要概念,在所有厂商中,亚马逊云科技算是排在行业前茅,它们的Amazon Lambda结合了Serverless和EDA,是一项Serverless事件驱动型计算服务,可以从 200 多个 Amazon服务和软件即服务 (SaaS) 应用程序中触发 Amazon Lambda,且只需按精确到毫秒级别的使用量付费。
例如
01/文件处理
使用 Amazon Simple Storage Service (Amazon S3) 在上传后实时触发 Amazon Lambda 数据处理,或连接到现有的 Amazon EFS 文件系统,从而为大规模文件处理启用大规模并行共享访问。
根据需要,设置合适的Amazon Lambda内存执行代码,Amazon Lambda实例数自动扩展以匹配请求量,并启用自定义事件触发器。
02/流处理
通过Serverless流处理的工作原理。社交媒体流加载到 Amazon Kinesis 中,然后触发 Amazon Lambda。Amazon Lambda 运行代码生成主题标签趋势数据,并将数据存储在 DynamoDB 中方便查询。
03/Web应用程序
通过 Amazon S3、API 网关、Amazon Lambda 和 DynamoDB 如何协同工作以检索 Web 或移动应用程序的天气数据。
04/IoT后端
使用 Amazon Lambda 构建无服务器后端,以处理 Web、移动、物联网 (IoT) 和第三方 API 请求。
对于开发者而言,Amazon Lambda 允许开发人员在云中运行代码,无需管理服务器,能以更简单、更灵活的方式构建和运行应用程序,提供了自动扩展、事件驱动、事件日志和监控、可定制性、多语言支持等功能,与其他 Amazon 服务集成紧密,可帮助开发人员构建高效、可靠的云应用。