14-63 剑和诗人37 - 分布式系统中的数据访问设计

​​

14-63 剑和诗人37 - 分布式系统中的数据访问设计

在分布式系统中,跨服务和数据库提供统一、可靠的数据访问至关重要,但又极具挑战性。微服务和数据库的拓扑结构为分布、缓存、复制和同步带来了复杂性。

让我们探索有助于解决这些复杂性并简化构建强大、高性能分布式系统的常见数据访问模式。

14-63 剑和诗人37 - 分布式系统中的数据访问设计

概述

我们将通过示例介绍以下分布式数据访问模式:

  • 每个服务都有数据库
  • 共享数据库
  • 每个区域的数据库
  • CQRS 和事件源
  • Saga 模式
  • API 组成
  • 缓存
  • 物化视图
  • 复制
  • 联邦
  • 多语言持久性
  • 多数据中心复制

这些模式有助于构建数据库拓扑、有效缓存、同步更改、处理故障和扩展数据访问。

让我们更详细地了解每种模式。

每个服务都有数据库

每个服务数据库模式为每个微服务提供其自己的私有数据库。

例如,订单服务有自己的订单数据库。客户服务有自己的客户数据库。

好处:

  • 解耦——服务不依赖于共享模式或数据库
  • 所有权——明确所有权,因为每个服务都管理其数据库
  • 规模——数据库可以根据服务需求独立扩展
  • 简单性——避免数据库共享,使协调更简单

缺点:

  • 数据隔离——跨服务交易和查询执行起来更加困难
  • 一致性——如果同步不正确,服务之间的数据就会不一致
  • 开销——管理多个数据库的运营开销更高

用例:

  • 微服务采用的早期阶段
  • 不共享数据的简单 CRUD 服务
  • 服务团队希望完全控制数据

这种模式提供了一条解耦服务的快速途径,但通常会随着时间的推移而发展,以允许更好的数据共享。

共享数据库

通过共享数据库模式,服务可以共享对单个逻辑数据库的访问权限。

例如,多个服务通过不同的模式访问 Oracle 数据库中的同一个客户表。

好处:

  • 简单——避免数据库之间复杂的数据同步和访问
  • 一致性——与数据库事务的强一致性
  • 已建立— 利用经过验证的 RDBMS 特性,如事务、索引、授权

缺点:

  • 紧密耦合

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 08:18:02       7 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 08:18:02       7 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 08:18:02       6 阅读
  4. Python语言-面向对象

    2024-07-11 08:18:02       9 阅读

热门阅读

  1. Mybatis study

    2024-07-11 08:18:02       6 阅读
  2. HAL_DMA_ERROR_BUSY

    2024-07-11 08:18:02       11 阅读
  3. SQL_VIEW视图错位的处理方式和注意

    2024-07-11 08:18:02       8 阅读
  4. openssl等库降级到系统原生安装镜像版本

    2024-07-11 08:18:02       10 阅读
  5. C#面:简述什么是中间件(Middleware)?

    2024-07-11 08:18:02       11 阅读
  6. lvs集群

    lvs集群

    2024-07-11 08:18:02      16 阅读
  7. 【第18章】MyBatis-Plus主键生成策略

    2024-07-11 08:18:02       11 阅读
  8. C++ 判断语句的深入解析

    2024-07-11 08:18:02       9 阅读
  9. spring事务详解

    2024-07-11 08:18:02       10 阅读
  10. 1657. 确定两个字符串是否接近

    2024-07-11 08:18:02       10 阅读