基础概念 - AWS 规范性指导

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

基础概念

微前端架构在很大程度上受到前面三个架构概念的启发:

  • 领域驱动的设计是将复杂的应用程序结构化为连贯域的心理模型。

  • 分布式系统是一种将应用程序构建为松散耦合子系统的方法,这些子系统是独立开发并在自己的专用基础设施上运行的。

  • 云计算是一种通过 pay-as-you-go 模型将 IT 基础设施作为服务运行的方法。

以领域为导向的设计

领域驱动设计 (DDD) 是埃里克·埃文斯开发的一种范式。埃文斯在2003年的著作《领域驱动的设计:解决软件核心的复杂性》中假设软件开发应该由业务问题而不是技术问题驱动。埃文斯提出,IT项目首先开发一种无处不在的语言,以帮助技术和领域专家找到共同的理解。基于这种语言,他们可以制定一个相互理解的商业现实模型。

尽管这种方法可能显而易见,但许多软件项目都存在业务与IT脱节的困扰。这些脱节往往会导致严重的误解,从而导致预算超支、质量下降或项目失败。

埃文斯引入了其他多个重要术语,其中一个是有限上下文。有限的上下文是大型 IT 应用程序中独立的部分,其中包含仅针对一个业务问题的解决方案或实施。大型应用程序将由多个有界上下文组成,这些上下文通过集成模式松散耦合。这些有限的上下文甚至可以有自己的无处不在的语言的方言。例如,应用程序付款环境中的用户可能与交付环境中的用户有不同的方面,因为在付款过程中,运费的概念无关紧要。

Evans 没有定义有界上下文应该有多小或多大。大小由软件项目决定,并且可能会随着时间的推移而演变。衡量上下文边界的良好指标是实体(域对象)和业务逻辑之间的凝聚程度。

在微前端的背景下,可以用复杂的网页(例如航班预订页面)来说明域驱动的设计。

示例航班搜索 Web 应用程序,其中包含出发和到达输入以及结果列表。

在此页面上,主要的构建块是搜索表单、筛选器面板和结果列表。要确定边界,必须确定独立的功能上下文。此外,还要考虑非功能方面,例如可重用性、性能和安全性。“属于同一事物” 的最重要指标是它们的沟通模式。如果架构中的某些元素必须频繁通信并交换复杂的信息,则它们可能共享相同的边界上下文。

单个用户界面元素(例如按钮)不是受限上下文,因为它们在功能上并不独立。此外,整个页面不适合有限的上下文,因为它可以分解为较小的独立上下文。合理的方法是将搜索表单视为一个有界上下文,将结果列表视为第二个有界上下文。现在,这两个有界上下文中的每一个都可以作为单独的微前端来实现。

分布式系统

为了简化维护和支持发展能力,大多数非平凡的 IT 解决方案都是模块化的。在这种情况下,模块化意味着 IT 系统由可识别的构建块组成,这些构建块通过接口解耦以实现关注点分离。

除了模块化之外,分布式系统本身还应该是独立的系统。在单纯的模块化系统中,每个模块都经过理想的封装,并通过接口公开其功能,但它不能独立部署,甚至无法单独运行。此外,模块通常与属于同一系统的其他模块遵循相同的生命周期。另一方面,分布式系统的各个组成部分都有自己的生命周期。应用领域驱动的设计范式,每个构建块都针对一个业务领域或子领域,并生活在自己的有限环境中。

当分布式系统在构建期间进行交互时,常见的方法是开发用于快速识别问题的机制。例如,你可以采用类型化语言,并在单元测试上投入大量资金。多个团队可以协作开发和维护模块,这些模块通常作为库分发,供系统使用 npm、Apache Maven 和 pip 等工具。 NuGet

在运行期间,交互式分布式系统通常由各个团队拥有。由于错误处理、性能平衡和安全性,使用依赖关系会导致操作复杂性。对集成测试和可观察性的投资是降低风险的基础。

当今最受欢迎的分布式系统示例是微服务。在微服务架构中,后端服务由域驱动(而不是由用户界面或身份验证等技术问题驱动),由自治团队拥有。微前端具有相同的原理,将解决方案范围扩展到前端。

云计算

云计算是一种通过 pay-as-you-go 模型购买 IT 基础设施作为服务的方式,而不是自己建造数据中心并购买硬件在内部运行这些中心。云计算具有以下几个优点:

  • 您的组织能够尝试新技术,而无需预先做出大量的长期财务承诺,从而获得显著的业务灵活性。

  • 通过使用诸如之类的云提供商 AWS,您的组织可以访问一系列维护成本低且高度集成的服务(例如 API 网关、数据库、容器编排和云功能)。访问这些服务可以让您的员工腾出时间专注于让您的组织在竞争中脱颖而出的工作。

  • 当您的组织准备好在全球范围内推出解决方案时,您可以将该解决方案部署到世界各地的云基础架构。

云计算通过提供高度托管的基础架构来支持微前端。这使得跨职能团队更容易 end-to-end 拥有所有权。虽然团队应具备丰富的运营知识,但基础设施配置、操作系统更新和联网等手动任务会分散注意力。

由于微前端存在于有限的环境中,因此团队可以选择最合适的服务来运行它们。例如,团队可以在云函数和容器之间进行选择,也可以在不同类型的 SQL 和 NoSQL 数据库或内存缓存之间进行选择。团队甚至可以在高度集成的工具包上构建自己的微前端 AWS Amplify,例如,该工具包带有用于无服务器基础架构的预配置构建块。