分布式与数据层

返回 Spring Cloud

微服务拆分后,数据库不能共享一张大表,会话与缓存常上 Redis,跨服务写操作需要 分布式事务或最终一致。本章把 Spring Cloud / Alibaba 常见落地方式,映射到架构与数据库知识库。


数据层在微服务中的位置

API Gateway
  ▼
订单服务 ──Feign──► 库存服务
  │                    │
  ▼                    ▼
order_db            stock_db        ← 每服务独立库(推荐)
  │                    │
  └──── Seata AT / 本地消息表 ────┘   ← 需要跨库一致性时
  ▼
Redis(缓存、锁、Session、限流计数)

设计原则见 数据库架构:服务边界 = 数据边界,跨服务优先 异步事件 而非分布式事务。

专题文档(推荐直接跳转)

主题文档
分库分表 / 分布式库ShardingSphere · 分布式数据库(TiDB/Vitess)
分布式事务SeataSeata
数据同步 CDC数据同步与 CDCCanalCDC
KafkaKafka 集成Kafka
NacosNacos 集成

Redis(Spring 集成 + 分布式场景)

依赖与配置

Redis 集成spring-boot-starter-data-redis、Lettuce 连接池、序列化方式。

典型用途对照

场景Spring 文档Redis / 架构
声明式缓存缓存缓存架构多级缓冲
分布式锁分布式锁Redis 命令与 Redisson
幂等键接口幂等性SET NX、支付回调
Gateway 限流API 网关RequestRateLimiter + Redis
共享 SessionSession 管理Spring Session Redis
秒杀库存秒杀、Lua 原子扣减

集群与可靠性

生产需明确:主从、哨兵还是 Cluster — 见 Redis(持久化、热 key、缓存穿透/击穿/雪崩)。高并发专题:高并发

spring:
  data:
    redis:
      host: redis.cluster.internal
      port: 6379
      lettuce:
        pool:
          max-active: 32
          max-idle: 16

数据库访问(单服务内)

能力文档
分层与对象分层模型
JPAJPA 与 Hibernate
MyBatisMyBatisMyBatis-Plus
事务事务管理
多数据源多数据源
读写分离读写分离MySQL 主从
连接池连接池配置
分页分页查询

SQL 优化、索引、锁见 MySQL


分库分表与分布式事务

实现细节、配置示例见专文:

跨服务写默认优先:本地事务 + Kafka 最终一致;库存类见 秒杀


分布式 ID

订单号、消息 ID 需全局唯一:分布式 ID(雪花、号段、Redis INCR)。


数据同步与 CDC

Canal → Kafka → Spring 消费、幂等与 CQRS:数据同步与 CDC


与消息队列配合(推荐解耦)

订单服务 ──发布 order.created──► Kafka
                                    ▼
                              库存服务消费(幂等扣库存)

消息驱动消息队列Kafka


检查清单

检查项参考
是否每服务独立库数据库架构
缓存与 DB 一致性策略缓存架构
Redis 是否集群、是否防热 keyRedis
跨服务写是否可改为 MQ消息队列
分库分片键是否合理ShardingSphere
全局事务是否必要Seata

相关链接

Spring Cloud / Boot

架构

数据库

中间件