目录
[1. 服务拆分](#1. 服务拆分)
[2. 独立部署](#2. 独立部署)
[3. 独立数据管理](#3. 独立数据管理)
[4. 服务间通信](#4. 服务间通信)
[5. 去中心化治理](#5. 去中心化治理)
[七、微服务 vs 单体架构](#七、微服务 vs 单体架构)
在传统的 Java Web 开发中,我们通常会把所有功能写在一个应用里:用户模块、订单模块、支付模块、后台管理模块全部打包成一个系统,这种架构被称为单体架构。
随着业务规模的扩大,单体架构逐渐暴露出一系列问题,于是微服务架构应运而生。
一、微服务的定义
微服务(Microservices) 是一种软件架构风格,它将一个复杂的应用拆分为多个小而独立的服务。
每个服务:
- 只关注一个业务能力
- 独立开发、独立部署
- 通过网络(通常是 HTTP / RPC)进行通信
一句话定义:微服务就是将系统按业务能力拆分成多个可独立运行的服务。
二、为什么要用微服务?
单体架构的问题
在单体架构中:
- 代码量庞大,维护困难
- 一个模块出问题,整个系统不可用
- 发布一次功能,需要整体重新部署
- 团队协作成本高
随着系统变大,这些问题会被无限放大。
微服务解决了什么?
微服务通过拆分系统,带来以下优势:
- 模块解耦,职责清晰
- 可以单独部署、单独扩容
- 某个服务挂掉,不影响其他服务
- 更适合团队并行开发
三、微服务的核心特征
1. 服务拆分
每个微服务围绕单一业务能力构建,例如:
- 用户服务
- 订单服务
- 支付服务
- 商品服务
一个服务只做一件事。
2. 独立部署
- 每个服务都是一个独立应用
- 拥有自己的代码仓库、构建流程、部署流程
发布互不影响。
3. 独立数据管理
- 每个服务拥有自己的数据库
- 服务之间不直接共享数据库
通过接口通信,而不是数据库通信。
4. 服务间通信
服务之间通过网络通信,常见方式包括:
- RESTful API(HTTP + JSON)
- RPC(如 Dubbo、gRPC)
5. 去中心化治理
微服务更强调:
- 去中心化
- 自动化
- 服务自治
四、微服务架构的典型技术组成
在 Java 体系中,一个完整的微服务架构通常包含:
| 组件 | 作用 |
|---|---|
| Spring Boot | 构建微服务 |
| Spring Cloud | 微服务治理 |
| 注册中心 | 服务注册与发现 |
| 配置中心 | 集中配置管理 |
| 负载均衡 | 请求分发 |
| 熔断限流 | 系统稳定性 |
| 链路追踪 | 请求监控 |
Spring Boot 是基础,Spring Cloud 是生态。
五、微服务并不适合所有场景
虽然微服务有很多优点,但它也带来了新的复杂性:
- 服务数量激增
- 分布式事务复杂
- 运维成本提升
- 网络通信不可避免
因此:微服务不是所有系统的最佳选择。
六、什么时候适合微服务?
一般来说,微服务更适合:
- 业务复杂、持续演进的系统
- 多团队协作的大型项目
- 对系统稳定性、扩展性要求高的场景
而对于:
- 小型项目
- 业务简单、变化少的系统
单体架构往往更合适。
七、微服务 vs 单体架构
| 对比项 | 单体架构 | 微服务 |
|---|---|---|
| 部署 | 整体部署 | 独立部署 |
| 扩展 | 整体扩展 | 按需扩展 |
| 技术选型 | 统一 | 可多样 |
| 运维 | 简单 | 复杂 |
| 容错性 | 低 | 高 |
八、总结
微服务是一种以业务为中心、强调服务自治和独立部署的软件架构风格。