使用 Amazon DynamoDB 和域驱动设计的可组合体系结构

云计算
re:Invent
0
0
## 视频 <video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video> ## 导读 由于领域复杂、应用界限不清以及业务需求与实施的软件之间脱节,构建软件的企业经常会在软件生命周期中面临多重挫折。遵循领域驱动设计(DDD)实践可以帮助您驾驭复杂的业务领域,避免常见的陷阱。在本讲座中,您将了解学习普适语言、聚合和有界上下文等核心 DDD 概念,以及 [Amazon DynamoDB](https://aws.amazon.com/cn/dynamodb/?trk=cndc-detail) 单表设计过程如何适应聚合的建议。 ## 演讲精华 <font color = "grey">以下是小编为您整理的本次演讲的精华,共1300字,阅读时间大约是6分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font> 演讲者首先介绍了三个核心主题:运用领域驱动设计原则、构建可组合架构以及将领域驱动设计应用于定义DynamoDB单表设计的有效访问模式。为了让听众了解背景情况,他询问了在大型企业工作的听众,并将这类企业定义为通过软件强化核心服务的公司,而非将软件作为主要产品。例如,Wholestar Cars这家电动汽车制造商就运用了软件来提高车辆性能和整体客户体验,尽管汽车仍然是其主要产品。 在初创企业、中型企业和大型企业的专业活动中,演讲者发现业务用户对软件的期望与技术团队提供的实际软件之间普遍存在脱节。具体表现在用户可接受性测试中,业务利益相关者常常抱怨软件不能满足他们的需求,或者质疑投入大量时间和金钱来开发现成产品的价值。然而,对于已使用亚马逊DynamoDB等托管数据库服务的团队来说,他们也表示模糊的需求阻碍了他们在充分利用DynamoDB功能方面取得进展。 为解决这些问题,演讲者评估了诸如可扩展敏捷框架(SAFe)等其他方法,但他意识到问题的根源在于软件设计阶段的重视程度不足,以及业务和技术团队之间的合作不足。因此,他深入研究领域驱动设计(DDD)的概念,并通过广泛阅读DDD相关的书籍和文献,投入了六个月的时间。 子域可分为核心、通用和支持三大类。核心子域体现了企业的主要竞争优势和差异化特点。通用子域虽然复杂,但普遍存在于各企业之间。支持子域则为企业的非差异化运营提供辅助。 - 通用语言是一组用于描述软件的术语,业务用户在使用时会提到它们。这有助于确保企业和IT部门在词汇上保持一致。 - 有界上下文由一组相关的通用语言术语和业务过程组成,反映了特定背景下的内容。例如,"账户"这个词汇在不同的上下文中,如在银行和在图书馆中,其含义是不同的。 - 上下文图描述了有界上下文之间的关系,如合作伙伴关系、共享内核、客户供应商、保守主义等。 实体:它们是软件中的对象,拥有自己的生命周期。 - 值对象:这些对象为实体提供属性,但不具有独立的生命周期。 - 聚合:它们代表一组实体和价值对象,封装了相关的业务过程或交易边界。 为了展示这些领域驱动设计(DDD)概念的实际应用,演讲者将通过一个假设的例子来阐述,即为一个仅有单个会议室可供用户预订的共享办公空间创建一个房间预订系统。 初步功能需求包括: - 允许用户预订30-60分钟的时间段 - 支持取消现有预订 - 提供房间使用情况的分析和报告 此外,非功能需求包括关于审计和对仅向付费会员开放预订的限制。 通过与各种业务利益相关者合作,演讲者整理出了一份通用语言词汇表,其中包含一些关键动作的术语,如“预订房间时间段”、“登记”、“注销”,这些代表了用户在预订房间时试图执行的关键操作。此外,合规需求导致了诸如“审计”和“事件记录”等术语的出现。 通过对这种普遍语言的分析,我们发现像“预订”、“取消”这样的术语代表了特定的动作,而“房间时间段”是一个名词,代表了关键域对象。 此外,被识别出的相关动作,如预订、登记和注销,代表了围绕房间预订工作流程的一个单一业务交易。因此,它们可以被逻辑地分组到一个“预订”的有界上下文。相比之下,审计和安全问题作为一个单独的有界上下文出现。 将子域分类后,我们发现预订是核心子域,分析是通用子域,安全是支持子域。 构建一个上下文图有助于解释预订与显示之间的关系是一种客户供应商依赖关系,预订与分析之间的关系是一种遵从性依赖关系,安全与预订之间的关系是一种基于发布语言的基础集成。 这种战略DDD分析帮助我们确定了预订作为需要定制软件开发的核心子域。将战术DDD应用于预订揭示了“预订槽”聚合,它由“槽”实体和“时间槽”价值对象组成。 预留槽位聚合封装了预订业务过程和系统交易边界,有助于定义高效的访问模式以映射到DynamoDB单表模式。演讲者特别展示了如何自然地出现作为可以共享单个DynamoDB表的项集合的ReserveSlot和Slot实体。 演讲者提供的其他客户示例包括: - Wholestar Cars,一家使用软件来提高车辆和客户体验的电动汽车制造商,同时将汽车作为核心产品 - 一个利用软件实现售票、停车续订、发票、退款、折扣、支付和会话管理等功能的车场系统 - 一个处理票务购买、发票、退款、取消和相关金融交易等领域的票务销售业务 通过专注于房间预订系统的这些示例,演讲者展示了如何将软件系统分解为有界上下文和聚合,从而实现可组合的架构。而不是构建一个单一的大型应用程序,DDD促进了设计多个解耦和独立可部署的组件——特别是Reservation、Analytics、Display和Security。 这样的可组合架构允许每个组件单独优化。例如,可以根据特定有界上下文的访问模式和性能需求来调整DynamoDB表。 关键的是,演讲者澄清了单表设计并不意味着整个系统只有一个巨大的表。相反,它涉及选择性反规范化,以专门针对给定有界上下文的访问模式进行优化。 总之,演讲者强调了领域驱动设计如何在创建优化且与业务对齐的软件系统的同时,实现松散耦合的组件。在战略和战术DDD期间开发的模型提供了捕捉关键领域知识的鲜活文档。将DDD与DynamoDB单表设计结合使用,可以实现针对业务需求的定制可组合架构。 **下面是一些演讲现场的精彩瞬间:** 领导者探讨了企业在软件开发过程中为何选择从头开发软件而非采用现有解决方案的原因。 ![](https://d1trpeugzwbig5.cloudfront.net/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design/images/rebranded/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design_0.png) 图表详细展示了分区键和排序键如何表示一对多的关系,以及如何在DynamoDB表中查询数据。 ![](https://d1trpeugzwbig5.cloudfront.net/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design/images/rebranded/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design_1.png) 领导者解释了在DynamoDB中创建一个名为预留槽的聚合方法,以实现用户对ACID合规性的预订功能。 ![](https://d1trpeugzwbig5.cloudfront.net/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design/images/rebranded/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design_2.png) 引用乔治·博克斯的名言“所有模型都是错误的,但一些是有用的”,强调虽然领域模型会随着时间推移不断演变,但其价值仍然存在。 ![](https://d1trpeugzwbig5.cloudfront.net/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design/images/rebranded/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design_3.png) 领域驱动设计原则通过识别子域并进行投资调整及聚合,以设计出更符合业务需求的数据库模式。 ![](https://d1trpeugzwbig5.cloudfront.net/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design/images/rebranded/COM304-Composable_architecture_using_Amazon_DynamoDB_and_domain_driven_design_4.png) ## 总结 该演讲主要探讨了如何使用领域驱动设计原则构建可组合架构,并以亚马逊DynamoDB的单表设计为例。演讲者首先简要介绍了领域驱动设计的基本概念,并通过解释如何对领域进行建模和定义通用语言,使得软件设计与业务需求保持一致。期间涉及的关键概念包括子域、有界上下文和聚合等。接着,演讲者通过一个虚构的例子展示了战略性领域驱动设计和战术性领域驱动设计的应用过程。将这些概念应用于一个房间预订系统的建模过程中,识别出了核心预订功能作为核心领域。聚合被定义为用于捕捉预订行为和实体的概念。随后,演讲者详细阐述了DynamoDB单表设计的原则,强调通过选择性非规范化来提高性能。利用预订领域的模型,聚合被映射到访问模式以及一个单一的DynamoDB表中。总的来说,采用领域驱动设计可以将业务能力有系统地划分为有界上下文和聚合。这些可以进一步映射到去中心化的可组合架构中,每个上下文都有自己的专用数据库,例如DynamoDB表。这种聚合驱动的数据建模和访问模式有助于实现高效且易于维护的单表设计。 ## 演讲原文 ## 想了解更多精彩完整内容吗?立即访问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
目录
关闭