在亚马逊云科技上实现分布式设计模式

云计算
re:Invent
0
0
## 视频 <video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/BOA309-Implementing_distributed_design_patterns_on_AWS-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video> ## 导读 传统应用程序曾经是现代化的。我们面临的挑战是如何不断改进开发原则和流程,并在开发应用程序时尽量减少技术债务。开发复杂的现代应用程序需要全面了解如何提取业务需求和目标,并选择适当的战术设计和实施模式来支持业务战略。通过领域驱动设计,学习如何根据有界上下文、子域和上下文映射来定义业务战略。还要学习如何选择分布式设计模式和适当的服务来实现设计,如何简化应用程序开发,以及如何在亚马逊云科技上进行部署。 ## 演讲精华 <font color = "grey">以下是小编为您整理的本次演讲的精华,共1200字,阅读时间大约是6分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font> 金(Kim)、德里克(Derek)和肯(Ken)——分别是解决方案架构师、独角兽零售(Unicorn Retail)公司的负责人和忠诚度计划领域专家——共同为我们在亚马逊云科技(Amazon Web Services)上实现分布式系统设计模式提供了指导。 金首先强调,在设计解决方案时,应从简单开始,并随着时间的推移采用适应性方法来演化架构。为了阐述这一观点,她以一家在线销售公司的例子进行了说明。 这家名为独角兽零售(Unicorn Retail)的公司正致力于即将到来的网络星期一促销活动,计划在该日提供全场五折的折扣。市场团队对此促销充满热情,预测网络星期一的流量和购买量将远超平常。 作为公司的负责人,德里克深知他必须审慎规划以确保系统能够应对预期的负荷。其中最大的挑战之一便是确保他们有足够的独角兽库存以满足需求。若在网络星期一有用户在尝试购买独角兽时发现已售罄,他们可能会感到失望。 为解决这一问题,德里克解释了他们如何计划实施结账流程以应对预期的高峰流量: “我们计划在用户开始结账流程时预留独角兽库存。这样做是为了确保在任何并发或竞态条件下,都不可能出现支付购买独角兽但未收到的情况。如果有足够的独角兽库存可用,我们将在您开始结账时为您的订单预留一个。” 德里克指出,由于目前他们只有5只独角兽库存,因此希望在结账开始时预留这些库存,以避免过度销售。 “接下来,我们将从用户的钱包中扣除资金。客户需要在购买前将资金存入他们的独角兽零售(Unicorn Retail)账户钱包。如果余额足以支付订单,那就太好了!” 德里克解释说,用户的钱包余额存储在他们的系统中,并与结账流程集成。用户只有在他们的钱包中足够抵扣订单总额的情况下才能购买独角兽。 “最后,在成功预留独角兽并收款后,我们将向客户的账户奖励忠诚度积分。这样他们可以累积积分,以便在未来购买时享受折扣。” 德里克表示,新引入的忠诚度积分系统将为客户在购买后的积分兑换未来折扣提供便利。 德里克注意到了这个工作流中存在的一些潜在问题。他表示,如果预留独角兽的第一步成功,但后续扣除资金的操作失败,公司需要通过释放已预留的股票来弥补,以确保其他用户能够购买。如果支付过程未能完成,股票不能被占用。 此外,他还提到了奖励忠诚度积分可能存在的风险。但他认为这并不是一个关键问题,因为他们只需要完成独角兽的交易和交付。如果需要,他们可以在稍后重新尝试并添加积分。 为了解决这些问题并管理这些多步交易及相关补偿操作,德里克解释说他们计划使用传奇编排模式。这将实现在亚马逊云科技的Step Functions上。一旦购买成功,他们将发送一个“购买已完成”的域事件,由处理奖励忠诚度积分的独立忠诚度有界上下文进行处理。这样可以将忠诚度领域与主要零售业务隔离开来,避免使其过于复杂。 肯深入研究了忠诚度领域的需求,以及他们将如何利用事件源和CQRS模式来实现积分系统。他表示,忠诚度领域需要捕捉来自其他领域的重大事件,如零售业购买的完成。然后,它将验证此事件是否满足触发奖励积分的营销规则。例如,他们可能会针对任何超过100美元的购买奖励100个积分。因此,在一个120美元的购买中,将会为客户奖励100个积分。 在奖励积分后,他们需要计算客户的总积分余额。这是一个具有挑战性的问题,因为他们不能简单地存储客户的“当前积分余额”,因为不同的交易可能在不同时间到期。使用传统的CRUD方法会导致计算余额的昂贵聚合问题。 我们将使用事件源来记录每个状态的变化,将其作为不可变的事件。这样,我们可以存储每笔奖励或扣除积分的交易。这些交易记录可以提供用于重新构建积分余额的审计日志。接下来,我们可以使用投影功能来生成针对不同查询需求的优化物化视图。这使我们能够灵活地根据想要的过期规则查询积分,例如只显示过去一周内未过期的积分的“当前每周余额”视图。投影处理器负责处理应用复杂的过期逻辑。此外,我们还使用CQRS模式分离写入和读取操作。命令处理程序负责存储事件,而查询则从可读模型中选取数据。这种分离提高了性能和灵活性。在实际应用中,我们使用了Lambda、DynamoDB、EventBridge等亚马逊云科技服务来构建系统。这为我们提供了一个实际示例,展示了在构建云原生应用程序时如何应用分布式系统模式。核心收获是,从简单的基本功能开始,使用可组合的构建模块(如事件、协调和分区阅读模型)逐步发展,可以帮助创建具有适应性的可伸缩系统。采用领域驱动设计方法有助于将需求分解成更小的部分,并为每个子系统选择合适的分布式模式。尽管这些架构模式会增加复杂性,但它们使得系统能够随着商业环境的变化而轻松扩展和调整。借助像亚马逊云科技这样的托管服务,可以将许多底层基础设施细节隐藏起来。这使得开发者可以专注于实现与现实业务领域相对应的分布式设计方案,从而创造更大的价值。 **下面是一些演讲现场的精彩瞬间:** 领导者向观众表示感激,并认可在场的所有产品和项目的拥有者及负责人。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA309-Implementing_distributed_design_patterns_on_AWS/images/rebranded/BOA309-Implementing_distributed_design_patterns_on_AWS_0.png) 演讲者强调了从基础模型开始的重要性,以便更好地应对现实生活中的挑战。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA309-Implementing_distributed_design_patterns_on_AWS/images/rebranded/BOA309-Implementing_distributed_design_patterns_on_AWS_1.png) 领导者特别指出,应从简单的自适应系统设计入手,在引入新技术时,以最低的努力扩展建模和架构。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA309-Implementing_distributed_design_patterns_on_AWS/images/rebranded/BOA309-Implementing_distributed_design_patterns_on_AWS_2.png) 营销团队建议充分利用网络星期一,以支持不可预测的流量并提供给客户奖励。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA309-Implementing_distributed_design_patterns_on_AWS/images/rebranded/BOA309-Implementing_distributed_design_patterns_on_AWS_3.png) 演讲者谈到了通过跨团队合作和目标、术语、流程和语言的统一来实现明智决策的方法。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA309-Implementing_distributed_design_patterns_on_AWS/images/rebranded/BOA309-Implementing_distributed_design_patterns_on_AWS_4.png) 作为独角兽零售负责人的德里克·陈预计,在他们的热门网络星期一活动(50%折扣的独角兽销售)开始时,流量将大幅度上升。 ![](https://d1trpeugzwbig5.cloudfront.net/BOA309-Implementing_distributed_design_patterns_on_AWS/images/rebranded/BOA309-Implementing_distributed_design_patterns_on_AWS_5.png) ## 总结 演讲者首先强调了在亚马逊云科技平台上构建分布式系统时,从简单的自适应设计开始的重要性。他们建议采用领域驱动设计,将系统拆分为与业务领域一致的有限上下文。 为了进行演示,他们通过一个独角兽零售店的电子商务系统进行讲解。该系统的核心零售上下文采用了亚马逊云科技的 Step Functions 实现的 Saga 编排模式来处理结账交易,从而管理多步结账工作流所需的本地交易和补偿逻辑。 成功结账后,系统将域事件发送到一个独立的忠诚度有限上下文。在此处,演讲者应用了事件源,使用 DynamoDB 将状态更改作为一系列不可变的事件进行持久化。他们还采用了 CQRS 模式,将写入与读取分开 - 命令持久化事件,而查询维护优化读取性能的物质化视图。 这些模式共同使系统能够在跨领域高效地管理分布式状态并扩展。演讲者强调,要实现这些模式,应通过简单开始,适当应用增量模式,并利用亚马逊云科技的服务来简化实现。他们提供了一个代码示例,展示了如何在亚马逊云科技上使用基础设施即代码来实现这些模式。 ## 演讲原文 ## 想了解更多精彩完整内容吗?立即访问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
目录
关闭