XMBSMDSJ

2026

< Back to index

分布式数据访问

在单体服务中,可以自由访问数据源实现业务功能。在分布式架构下,业务按领域拆分后会产生数据归属问题,访问数据时需要加以治理,以保证数据安全与一致性。

分布式场景下常见的数据访问模式如下。


服务间调用(Interservice Communication)

当服务 A 需要用到服务 B 的数据时,通过远程调用(如 HTTP/gRPC)向服务 B 请求,由服务 B 访问其自有数据源后返回结果。

flowchart LR
  subgraph 调用方
    A[服务 A]
  end
  subgraph 被调用方
    B[服务 B]
    DB_B[(数据源 B)]
  end
  A -->|"远程调用 (RPC/HTTP)"| B
  B --> DB_B

优势

劣势


列冗余(Column Schema Replication)

在各自归属的表中重复存储部分列,使各服务能本地查询所需字段,通过同步机制由数据归属方更新,其他方只读。

flowchart TB
  subgraph 服务 A - 数据归属方
    A[服务 A]
    T_A[(表 A<br/>含 列 X,Y,Z)]
    A --> T_A
  end
  subgraph 同步
    Sync[同步逻辑<br/>CDC / 消息队列]
  end
  subgraph 服务 B - 消费方
    B[服务 B]
    T_B[(表 B<br/>含 列 X,Y 冗余)]
    B --> T_B
  end
  T_A --> Sync --> T_B

优势

劣势


缓存复制(Replicated Cache)

与「分布式缓存」不同,复制式缓存下每个服务在本地维护一份缓存副本,由数据归属服务将变更广播到各节点。

flowchart TB
  subgraph 分布式缓存 - 共享集中式缓存
    S1[服务 1]
    S2[服务 2]
    Redis[(Redis / 分布式缓存)]
    S1 --> Redis
    S2 --> Redis
  end
flowchart TB
  subgraph 数据归属服务
    Owner[数据归属服务]
    DB[(数据源)]
    Owner --> DB
  end
  subgraph 复制
    Broadcast[广播 / 推送]
  end
  subgraph 各服务本地
    C1[服务 1<br/>本地缓存]
    C2[服务 2<br/>本地缓存]
    C3[服务 3<br/>本地缓存]
  end
  Owner --> Broadcast
  Broadcast --> C1
  Broadcast --> C2
  Broadcast --> C3

优势

劣势


数据域(Data Domain)

多个服务通过共享数据域(共享库表或共享 SQL/模型)访问共同拥有的数据,在明确边界与权限的前提下共享同一套存储。

flowchart TB
  subgraph 共享数据域
    DB[(共享数据库 / 数据域)]
  end
  subgraph 服务层
    S1[服务 1<br/>共享访问]
    S2[服务 2<br/>共享访问]
    S3[服务 3<br/>共享访问]
  end
  S1 --> DB
  S2 --> DB
  S3 --> DB

优势

劣势