分布式、Spring Boot微服务、垂直拆分、水平拆分、分库分表详解及关系梳理

分布式、Spring Boot微服务、垂直拆分、水平拆分、分库分表详解及关系梳理

  • 一、概念解析
    • [1️⃣ 分布式(Distributed System)](#1️⃣ 分布式(Distributed System))
      • [📌 定义](#📌 定义)
      • [🔧 核心特征](#🔧 核心特征)
      • [🌰 典型实现](#🌰 典型实现)
    • [2️⃣ Spring Boot 微服务(Microservices)](#2️⃣ Spring Boot 微服务(Microservices))
      • [📌 定义](#📌 定义)
      • [🔧 技术特点](#🔧 技术特点)
      • [🌰 典型场景](#🌰 典型场景)
    • [3️⃣ 垂直拆分(Vertical Splitting)](#3️⃣ 垂直拆分(Vertical Splitting))
      • [📌 定义](#📌 定义)
      • [🔧 两种形式](#🔧 两种形式)
      • [🌰 典型场景](#🌰 典型场景)
    • [4️⃣ 水平拆分(Horizontal Splitting)](#4️⃣ 水平拆分(Horizontal Splitting))
      • [📌 定义](#📌 定义)
      • [🔧 两种形式](#🔧 两种形式)
      • [🌰 典型场景](#🌰 典型场景)
    • [5️⃣ 分库分表(Database Sharding)](#5️⃣ 分库分表(Database Sharding))
      • [📌 定义](#📌 定义)
      • [🔧 技术实现](#🔧 技术实现)
      • [🌰 典型配置(ShardingSphere)](#🌰 典型配置(ShardingSphere))
  • 二、五者之间的关系梳理
    • [🔄 整体关系图](#🔄 整体关系图)
    • [🔗 详细关系说明](#🔗 详细关系说明)
      • [1. Spring Boot微服务 vs 分布式](#1. Spring Boot微服务 vs 分布式)
      • [2. 垂直拆分 vs 微服务](#2. 垂直拆分 vs 微服务)
      • [3. 水平拆分 vs 分库分表](#3. 水平拆分 vs 分库分表)
      • [4. 垂直拆分 vs 水平拆分](#4. 垂直拆分 vs 水平拆分)
      • [5. **分布式 vs 所有概念**](#5. 分布式 vs 所有概念)
  • 三、实际案例--电商系统演进路径
  • 四、对比表
  • 五、结论

下面我将从概念定义、技术原理、应用场景、相互关系四个维度,系统性地为您解析这五个核心概念,并用清晰的逻辑图展示它们之间的联系。


一、概念解析

1️⃣ 分布式(Distributed System)

📌 定义

分布式系统是由多个独立节点(计算机/服务)通过网络连接,协同完成任务的系统。这些节点共享资源、交换信息,对用户呈现为一个【统一的整体】。

🔧 核心特征

  • 数据分散存储:数据分布在多个物理节点上(实际项目上,很多情况下会用一台物理机,多台虚拟机)。
  • 计算并行处理:任务可并行执行,提高吞吐量。
  • 高可用性:部分节点故障不影响整体服务。
  • 透明性:用户无需感知底层分布式细节。

🌰 典型实现

  • 分布式数据库(如TiDB)
  • 分布式文件系统(如HDFS)
  • 分布式缓存(如Redis Cluster)
  • 微服务架构本身就是分布式系统

💡 关键点 :分布式是 【部署方式】 的概念,解决的是 系统规模和可靠性 问题。


2️⃣ Spring Boot 微服务(Microservices)

📌 定义

Spring Boot 微服务是一种 【架构风格】 ,将单体应用拆分为一组小型、独立部署的服务,每个服务运行在自己的进程(对于Java来说就是一个jvm进程)中,通过轻量级通信机制(如HTTP/REST)进行协作。

🔧 技术特点

  • 独立性:每个微服务可独立开发、测试、部署、扩展。
  • 技术异构性:不同服务可用不同技术栈(如Java + Python)。
  • 去中心化治理:每个服务管理自己的数据库和业务逻辑。
  • 弹性设计:支持容错、熔断、限流等机制。

🌰 典型场景

  • 电商系统拆分为:用户服务、商品服务、订单服务、支付服务等。
  • 每个服务有自己的数据库,通过API网关统一对外提供服务。

💡 关键点 :微服务是 【架构层面】 的概念,解决的是 应用复杂度 问题。


3️⃣ 垂直拆分(Vertical Splitting)

📌 定义

垂直拆分是 按业务功能 将系统或数据库进行划分,不同模块处理不同业务领域。

🔧 两种形式

类型 说明 示例
应用层垂直拆分 将单体应用按业务功能拆分为多个微服务 用户模块 → 用户服务 订单模块 → 订单服务
数据库垂直拆分 将单个数据库按业务表拆分为多个数据库 用户表 → user_db 订单表 → order_db

🌰 典型场景

  • 单体电商应用 → 拆分为用户服务(user_db)、商品服务(product_db)、订单服务(order_db)。
  • 每个服务只访问自己的数据库,实现 业务解耦

💡 关键点 :垂直拆分解决的是 业务复杂度团队协作 问题。


4️⃣ 水平拆分(Horizontal Splitting)

📌 定义

水平拆分是 按数据维度(如ID范围、哈希值)将同一业务的数据分散到多个存储节点。

🔧 两种形式

类型 说明 示例
应用层水平拆分 同一服务部署多个实例,处理不同数据分片 订单服务实例1处理ID 1-1000 订单服务实例2处理ID 1001-2000
数据库水平拆分 同一业务表的数据按规则分散到多个数据库 订单表按用户ID哈希 ID%2=0 → order_db_0 ID%2=1 → order_db_1

🌰 典型场景

  • 用户表有1亿条记录 → 按用户ID哈希分散到10个数据库。
  • 每个数据库只存储1000万条记录,解决 单表性能瓶颈

💡 关键点 :水平拆分解决的是 数据量过大性能瓶颈 问题。


5️⃣ 分库分表(Database Sharding)

📌 定义

分库分表是 【数据库水平拆分的具体实现技术】,通过中间件将数据分散到多个数据库(分库)和多个表(分表)中。

🔧 技术实现

  • 分库:将数据分散到多个物理数据库实例。
  • 分表:将单表数据分散到同一数据库的多个表中。
  • 常用中间件:ShardingSphere、MyCat。

🌰 典型配置(ShardingSphere)

yaml 复制代码
# 按用户ID分片
rules:
- !SHARDING
  tables:
    t_order:
      actualDataNodes: ds_${0..1}.t_order_${0..3}
      tableStrategy:
        standard:
          shardingColumn: user_id
          shardingAlgorithmName: table_inline

💡 关键点 :分库分表是 技术手段 ,专门解决 数据库单点性能瓶颈 问题。


二、五者之间的关系梳理

🔄 整体关系图

复制代码
分布式系统(顶层概念)
│
├── 应用层分布式
│   └── Spring Boot微服务架构
│       ├── 垂直拆分(按业务功能拆分服务)
│       └── 水平拆分(同一服务多实例部署)
│
└── 数据层分布式
    ├── 垂直拆分(按业务表拆分数据库)
    └── 水平拆分(分库分表)
        └── 分库分表(具体技术实现)

🔗 详细关系说明

1. Spring Boot微服务 vs 分布式

  • 包含关系 :Spring Boot微服务架构是 分布式系统的一种实现形式
  • 微服务必然是分布式的,但分布式系统不一定是微服务(如Hadoop集群)。

2. 垂直拆分 vs 微服务

  • 实现关系 :垂直拆分是 实现微服务架构的核心手段
  • 微服务 = 应用层垂直拆分 + 数据库垂直拆分
  • 每个微服务对应一个业务领域的垂直切分。

3. 水平拆分 vs 分库分表

  • 包含关系 :分库分表是 数据库水平拆分的具体技术实现
  • 水平拆分是 概念 ,分库分表是 工具

4. 垂直拆分 vs 水平拆分

  • 互补关系

    • 垂直拆分 解决 业务复杂度(不同业务用不同服务/数据库)。
    • 水平拆分 解决 数据量问题(同一业务数据量太大时拆分)。
  • 典型演进路径

    复制代码
    单体应用 
      → 垂直拆分(微服务化) 
      → 某个微服务数据量过大 
      → 对该微服务进行水平拆分(分库分表)

5. 分布式 vs 所有概念

  • 顶层概念 :分布式是所有这些技术的 共同目标
  • 分布式 = 应用分布式 + 数据分布式
    • 应用分布式 → 微服务 + 水平扩展
    • 数据分布式 → 垂直拆分 + 水平拆分

三、实际案例--电商系统演进路径

阶段1:单体架构

复制代码
单体应用(所有业务代码)
└── 单一数据库(user_table, product_table, order_table...)

阶段2:垂直拆分(微服务化)

复制代码
用户服务(Spring Boot) → user_db
商品服务(Spring Boot) → product_db  
订单服务(Spring Boot) → order_db
支付服务(Spring Boot) → payment_db

这是微服务架构,也是分布式系统的第一步

阶段3:水平拆分(分库分表)

复制代码
订单服务(Spring Boot)
├── order_db_0(存储用户ID % 2 = 0 的订单)
├── order_db_1(存储用户ID % 2 = 1 的订单)
└── 使用ShardingSphere(sharding-jdbc)作为分库分表中间件。

这是数据库水平拆分,解决订单数据量过大的问题

🌰 最终架构

复制代码
分布式系统
├── 应用层:4个Spring Boot微服务(垂直拆分)
└── 数据层:
    ├── user_db, product_db(垂直拆分)
    └── order_db_0, order_db_1(水平拆分 + 分库分表)

四、对比表

概念 层面 解决问题 关系定位
分布式 系统架构 系统规模、可靠性、性能 顶层概念,包含其他所有
Spring Boot微服务 应用架构 业务复杂度、团队协作 分布式的一种实现
垂直拆分 设计方法 业务解耦、模块化 微服务的核心实现手段
水平拆分 设计方法 数据量过大、性能瓶颈 分库分表的理论基础
分库分表 技术实现 数据库单点性能瓶颈 水平拆分的具体工具

五、结论

  1. 分布式是目标,其他都是实现手段。
  2. 微服务 = 垂直拆分的应用层实现
  3. 分库分表 = 水平拆分的数据层实现
  4. 完整的分布式系统通常同时包含垂直拆分和水平拆分
  5. 演进顺序:单体 → 垂直拆分(微服务) → 水平拆分(分库分表)。

🎯 最佳实践:先做垂直拆分(微服务化),再对数据量大的服务做水平拆分(分库分表),这样既能解决业务复杂度,又能解决性能瓶颈。

相关推荐
jinxinyuuuus3 小时前
局域网文件传输:连接逻辑的回归——基于“广播域”而非“身份认证”的P2P架构
网络协议·架构·p2p
Blossom.1183 小时前
RLHF的“炼狱“突围:从PPO到DPO的工业级对齐实战
大数据·人工智能·分布式·python·算法·机器学习·边缘计算
打工人你好4 小时前
Android 应用逆向分析与架构研究笔记
android·笔记·架构
麻辣兔变形记6 小时前
基于 Go‑Zero 的用户 CRUD Demo:如何一步步从 MySQL + sqlx 演进为 PostgreSQL + GORM + 微服务架构
mysql·微服务·postgresql·架构·golang
绝无仅有7 小时前
面试日志elk之ES数据查询与数据同步
后端·面试·架构
绝无仅有7 小时前
大场面试之最终一致性与分布式锁
后端·面试·架构
小坏讲微服务10 小时前
Spring Cloud Alibaba整合 Kafka 的完整实现
分布式·spring cloud·kafka·消息队列·springboot·linq
欧阳的棉花糖10 小时前
纯Monorepo vs 混合式Monorepo
前端·架构
zl97989910 小时前
RabbitMQ-延迟队列
分布式·rabbitmq