利用事件驱动的架构构建下一代应用程序

云计算
re:Invent
0
0
## 视频 <video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/API302-Building_next_generation_applications_with_event_driven_architecture-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video> ## 导读 事件驱动架构可帮助企业构建高度可扩展的分布式应用程序。当应用程序集成解耦后,应用程序就会变得更加持久和易于管理。在本讲座中,您将了解在实际应用中常见的集成模式以及如何将它们解耦。了解如何使用亚马逊云科技消息传递服务连接微服务,并使用最少的自定义代码协调数据流。最后,了解如何通过理解和规划幂等性,减少重复事件和内置弹性,为应用程序问题做好准备。 ## 演讲精华 <font color = "grey">以下是小编为您整理的本次演讲的精华,共1100字,阅读时间大约是6分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font> 依赖单一技术的解决方案,受限于特定的IP地址或地理位置,并且仅限于特定数据格式。这种一定程度的耦合程度取决于您能对涉及的终端掌握多少控制权。 接着,埃里克开始探讨一些常见的集成模式,首先关注的是同步请求-响应交互。这种方案的优点在于低延迟、简单性和在遇到问题时的快速失败。然而,缺点是如果接收方崩溃,系统将变得脆弱,同时在规模上可能面临扩展瓶颈。 这种方法的改进之处在于异步排队,这有助于减少时间上的耦合。此外,它还能适应接收器故障并允许接收器控制消费速率。埃里克提供了一个使用SQS队列和Lambda函数的实例——这些队列可以处理大量的事件,而Lambda函数可以扩展以处理它们。然而,排队的缺点包括响应相关性挑战、积压恢复时间和多租户系统中的公平性。与这些排队方法相关的亚马逊云科技服务有SQS和[Amazon MQ](https://aws.amazon.com/cn/amazon-mq/?trk=cndc-detail),前者可以处理多达“基本上无限”的事件,后者用于运行管理的ActiveMQ或RabbitMQ集群。 另一方面,广播模型涉及到一个主题多个订阅者,这也能够减少时间上的耦合。每个订阅者独立地决定如何处理通知的方式,订阅者可以是电子邮件、短信、HTTP端点或Lambda函数。亚马逊云科技为这些交互模式提供了完全管理的SNS Pub/Sub服务,每个SNS主题支持最多1250万个订阅。埃里克提供了一个使用SNS在系统中添加新视频频道时通知多个服务的示例。通道服务可以轻松地将事件发布到SNS,而无需直接与每个下游服务集成。 过渡到异步点对点通信,发送者必须维护路由逻辑以发送到正确的目标通道,这增加了位置耦合。一种改进方法是使用集中式事件总线并通过规则来路由事件,从而从发送者中删除那种逻辑。亚马逊EventBridge被强调为一个支持这种路由的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)事件总线。规则匹配传入的事件并调用适当的目标,例如Lambda函数。EventBridge支持超过30个可能的目标,包括Lambda、ECS和API目的地。埃里克强调了如何通过应用规则来过滤事件,EventBridge可以从应用程序中删除数百行的路由代码。他演示了一个EventBridge中的示例事件和规则。 埃里克解释道,事件是表示系统状态已改变的信号。事件本身是不变的,发生在过去。它们通过将信息限制为关键数据来减少耦合。在使用事件时,需要考虑权衡,如稀疏事件与完整状态事件之间的权衡。 在掌握了相关活动的基本知识之后,埃里克继续探讨了事件驱动的架构模式。这种模式旨在协调各个领域之间的事件,而非实现紧密耦合。他通过展示几个服务领域之间如何通过事件进行沟通,而非每个服务独立处理自己的通知,来说明这一概念。 在这个模式下,每个领域都会产生一个或多个事件。要在一个领域内进行编排,亚马逊云科技的Step Functions是一个非常适合的选择,因为它允许与超过200个服务直接集成。埃里克强调了真正服务于视频的架构是如何利用领域间的事件以及它们内部的Step Functions的。 埃里克强调了Step Functions如何帮助构建可以根据视频长度在Lambda或EC2上运行的视频处理工作流。工作流还直接与DynamoDB集成,并在步骤完成时生成事件。 在讨论最后一个主要主题——幂等性时,埃里克用一段个人经历强调了幂等系统的重要性。当他在土耳其旅行时,由于他们的系统中的重复记录问题,他的护照问题差点导致他被拘留。这表明应用程序应能优雅地处理重复的事件和请求。幂等性意味着操作可以多次应用而不改变结果。这避免了网络错误和重试等问题导致的重复。埃里克提供了一些确保使用SQS FIFO队列、Step Functions和EventBridge实现幂等性的示例。 埃里克还建议在跨服务命名消息参数时要小心,以避免关联问题。例如,一个服务中的“messageId”可能不会与另一个服务中的“correlationId”匹配。 总的来说,埃里克重申了如何在分布式架构中使用事件实现松耦合的方法。结合领域间的事件编排和如Step Functions在内的编排是一个强大的模式。他为观众提供了一些有用的资源,以便继续学习关于构建事件驱动系统的知识。 在整个演讲过程中,埃里克对[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术的热情和解决复杂架构挑战的激情是显而易见的。他将技术解释和个人故事相结合的方式使得关键概念易于理解。无疑,观众们带着实际应用模式的感觉离开了演讲,这些模式将应用于他们自己的系统中。 **下面是一些演讲现场的精彩瞬间:** 专业人士对[Amazon SQS](https://aws.amazon.com/cn/sqs/?trk=cndc-detail)和[Amazon MQ](https://aws.amazon.com/cn/amazon-mq/?trk=cndc-detail)作为可扩展且可靠的消息队列服务的价值进行了强调。 ![](https://d1trpeugzwbig5.cloudfront.net/API302-Building_next_generation_applications_with_event_driven_architecture/images/rebranded/API302-Building_next_generation_applications_with_event_driven_architecture_0.png) 他们探讨了如何利用这些服务来简化代码中的复杂路由逻辑。 ![](https://d1trpeugzwbig5.cloudfront.net/API302-Building_next_generation_applications_with_event_driven_architecture/images/rebranded/API302-Building_next_generation_applications_with_event_driven_architecture_1.png) 一位演讲者通过实例说明,使用了不同命名约定(如蛇状和驼峰)的相同事件字段可能会导致向后兼容性问题,从而强调了维护事件模式向后兼容性的重要性。 ![](https://d1trpeugzwbig5.cloudfront.net/API302-Building_next_generation_applications_with_event_driven_architecture/images/rebranded/API302-Building_next_generation_applications_with_event_driven_architecture_2.png) 在分布式系统中对参数进行命名时需要谨慎,以防止出现相关问题。 ![](https://d1trpeugzwbig5.cloudfront.net/API302-Building_next_generation_applications_with_event_driven_architecture/images/rebranded/API302-Building_next_generation_applications_with_event_driven_architecture_3.png) 演讲者分享了一些有用的亚马逊云科技资源,以帮助人们开始构建[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序。 ![](https://d1trpeugzwbig5.cloudfront.net/API302-Building_next_generation_applications_with_event_driven_architecture/images/rebranded/API302-Building_next_generation_applications_with_event_driven_architecture_4.png) ## 总结 埃里克·约翰逊在re:Invent的亚马逊云科技技术主题演讲中探讨了如何运用事件驱动架构来构建新一代应用程序。他首先阐释了一些核心概念,例如松散耦合和事件驱动架构。事件驱动架构主要是响应系统状态的变化而非通过直接API调用来实现。一些紧密耦合的例子包括对某一技术的依赖、受地理位置或IP地址限制以及与特定数据格式的绑定。 接着,约翰逊谈到了一些常见的集成模式及其可能的优化途径。虽然同步请求-响应模式简单易用,但如果接收方出现故障,其稳定性就难以保证。使用像SQS这样的异步队列系统可以在降低时间消耗的同时提高弹性。利用SNS的广播模式可以让一个主题通知多个订阅者。而使用像EventBridge这样的消息总线可以减少地理位置上的耦合,提供一个统一的接口并处理路由逻辑。 事件驱动架构的核心组成部分包括创建事件和响应事件。各个服务可以通过将事件发布到像EventBridge这样的消息总线来实现相互沟通。Step Functions在工作流协调方面具有很好的协同作用。在领域间进行编排同时在领域内部进行整合有助于构建分布式的应用程序。 为了避免重复事件,需要解决传输问题、接收方问题以及因服务故障而导致的重复问题。项目有效性令牌就是一种解决方案——它们唯一标识每条消息以防止重复。亚马逊云科技提供的服务,如SQS、Step Functions和EventBridge都支持项目有效性。对于Lambda函数,亚马逊云科技的PowerTools库可以帮助添加项目有效性功能。 总的来说,约翰逊强调了像EventBridge和Step Functions这样的亚马逊云科技服务所支持的理念,如松散耦合和事件驱动架构,这些理念能够帮助开发者构建具有弹性的分布式应用程序。 ## 演讲原文 ## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站! [2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站") [点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯! [点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯! ## 即刻注册亚马逊云科技账户,开启云端之旅! [【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“") [【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭