「第二部:容器和微服务架构」(5) 每个微服务的数据主权

简介: 「第二部:容器和微服务架构」(5) 每个微服务的数据主权

微服务体系结构的一个重要规则是,每个微服务必须拥有其域数据和逻辑。正如完整的应用程序拥有自己的逻辑和数据一样,每个微服务也必须在自主生命周期中拥有自己的逻辑和数据,每个微服务都有独立的部署。

这意味着域的概念模型在子系统或微服务之间会有所不同。考虑企业应用程序,其中客户关系管理(CRM)应用程序、事务性采购子系统和客户支持子系统各自调用唯一的客户实体属性和数据,并且每个应用程序使用不同的有界上下文(BC)。


这一原则在领域驱动设计(DDD)中类似每个有界上下文或自治子系统或服务都必须拥有自己的领域模型(数据加上逻辑和行为)。每个限定于DDD的上下文都与一个业务微服务(一个或多个服务)相关。关于有界上下文模式的这一点将在下一节中展开。


另一方面,在许多应用程序中使用的传统(单片数据)方法是有一个单一的集中式数据库或只有几个数据库。这通常是一个标准化的SQL数据库,用于整个应用程序及其所有内部子系统,如图4-7所示。


传统方式数据管理


微服务的数据方式


在传统方法中,所有服务共享一个数据库,通常是在分层体系结构中。在微服务方法中,每个微服务都拥有其模型/数据。集中式数据库方法最初看起来更简单,似乎可以重用不同子系统中的实体,使所有内容保持一致。但实际情况是,最终会出现大量的表,这些表服务于许多不同的子系统,其中包括在大多数情况下不需要的属性和列。这就像试图使用相同的物理地图徒步走一小段路,坐一天的汽车旅行,学习地理知识。


通常只有一个关系数据库的单片应用程序有两个重要的好处:ACID事务和SQL语言,它们都可以跨与应用程序相关的所有表和数据工作。这种方法提供了一种轻松编写查询的方法,该查询组合来自多个表的数据。


然而,当您转到微服务体系结构时,数据访问变得更加复杂。即使在微服务或有界上下文中使用ACID事务,也必须考虑每个微服务拥有的数据是该微服务的私有数据,并且只能通过其API端点(REST、gRPC、SOAP等)同步访问,或通过消息传递(AMQP或类似)异步访问。


封装这些数据可以确保微服务是松散耦合的,并且可以彼此独立地发展。如果多个服务访问同一数据,架构更新将需要对所有服务进行协调更新。这将打破微服务生命周期的自主性。但是分布式数据结构意味着您不能跨微服务进行单个ACID事务。这反过来意味着您必须在业务流程跨越多个微服务时使用最终一致性。这比简单的SQL连接更难实现,因为您不能创建完整性约束或在单独的数据库之间使用分布式事务,我们稍后将解释这一点。类似地,许多其他关系数据库特性在多个微服务中不可用。


更进一步说,不同的微服务通常使用不同类型的数据库。现代应用程序存储和处理各种类型的数据,关系数据库并不总是最佳选择。对于某些用例,NoSQL数据库(如Azure CosmosDB或MongoDB)可能比SQL数据库(如SQL Server或Azure SQL数据库)具有更方便的数据模型,并提供更好的性能和可伸缩性。在其他情况下,关系数据库仍然是最好的方法。因此,基于微服务的应用程序通常使用SQL和NoSQL数据库的混合,这有时被称为polyglot持久化方法。


用于数据存储的分区多时隙持久化体系结构有许多好处。其中包括松散耦合的服务和更好的性能、可伸缩性、成本和可管理性。但是,它可以引入一些分布式数据管理挑战,如本章后面的“确定域模型边界”中所述。


微服务与有界上下文模式的关系

微服务的概念源自域驱动设计(DDD)中的有界上下文(BC)模式。DDD通过将大型模型划分为多个bc并明确它们的边界来处理它们。每个BC都必须有自己的模型和数据库;同样,每个微服务都拥有自己的相关数据。此外,每个BC通常都有自己的通用语言来帮助软件开发人员和领域专家之间的通信。

泛在语言中的这些术语(主要是域实体)在不同的有界上下文中可以有不同的名称,即使不同的域实体共享相同的标识(即用于从存储中读取实体的唯一ID)。例如,在用户配置文件有界上下文中,用户域实体可以在顺序有界上下文中与买方域实体共享标识。


因此,微服务就像一个有界上下文,但它也指定它是一个分布式服务。它被构建为每个有界上下文的单独进程,并且必须使用前面提到的分布式协议,如HTTP/HTTP s、WebSockets或AMQP。然而,有界上下文模式并没有指定有界上下文是分布式服务还是仅仅是单片部署应用程序中的逻辑边界(如通用子系统)。


需要强调的是,为每个有界上下文定义服务是一个很好的起点。但你不必把你的设计局限于此。有时,必须设计由多个物理服务组成的有界上下文或业务微服务。但归根结底,模式限制上下文和微服务都是密切相关的。

DDD通过以分布式微服务的形式获得真正的边界而从微服务中获益。但是,在有限的上下文中,不在微服务之间共享模型等想法也是您所希望的。


额外资源

相关实践学习
使用DAS实现数据库SQL优化
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。
相关文章
|
7天前
|
存储 数据采集 人工智能
AllData数据中台架构全览:数据时代的智慧中枢
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
10天前
|
传感器 监控 安全
智慧工地云平台的技术架构解析:微服务+Spring Cloud如何支撑海量数据?
慧工地解决方案依托AI、物联网和BIM技术,实现对施工现场的全方位、立体化管理。通过规范施工、减少安全隐患、节省人力、降低运营成本,提升工地管理的安全性、效率和精益度。该方案适用于大型建筑、基础设施、房地产开发等场景,具备微服务架构、大数据与AI分析、物联网设备联网、多端协同等创新点,推动建筑行业向数字化、智能化转型。未来将融合5G、区块链等技术,助力智慧城市建设。
|
1月前
|
人工智能 安全 Java
微服务引擎 MSE:打造通用的企业级微服务架构
微服务引擎MSE致力于打造通用的企业级微服务架构,涵盖四大核心内容:微服务技术趋势与挑战、MSE应对方案、拥抱开源及最佳实践。MSE通过流量入口、内部流量管理、服务治理等模块,提供高可用、跨语言支持和性能优化。此外,MSE坚持开放,推动云原生与AI融合,助力企业实现无缝迁移和高效运维。
|
2月前
|
Kubernetes 安全 数据安全/隐私保护
云卓越架构:容器安全最佳实践
本次分享由阿里云智能集团解决方案架构师张玉峰主讲,主题为“云卓越架构:容器安全最佳实践”。内容涵盖容器安全的挑战、云原生容器安全架构及典型场景。首先分析了容器安全面临的问题,如镜像漏洞和权限管理。接着介绍了容器安全架构的五个维度:身份权限管理、配置安全检查、运行时防护、镜像安全检测及发布的安全管控。最后通过具体场景展示了容器身份与权限管理、密钥管理、运行时防入侵等最佳实践,强调了安全左移的重要性,确保从开发到运行的全生命周期安全覆盖。
|
2月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
150 24
|
2月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
202 6
|
2月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
558 36
微服务架构解析:跨越传统架构的技术革命
|
2月前
|
Cloud Native API 持续交付
云原生架构下的微服务治理策略与实践####
本文旨在探讨云原生环境下微服务架构的治理策略,通过分析当前面临的挑战,提出一系列实用的解决方案。我们将深入讨论如何利用容器化、服务网格(Service Mesh)等先进技术手段,提升微服务系统的可管理性、可扩展性和容错能力。此外,还将分享一些来自一线项目的经验教训,帮助读者更好地理解和应用这些理论到实际工作中去。 ####
71 0
|
2月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
2月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
303 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型

热门文章

最新文章