微服务架构设计实战:从单体到分布式(零基础教程)
一、开篇:微服务是什么?为什么需要它?

想象一下你正在写一篇论文。如果整篇文章都写在一个段落里,不仅阅读困难,修改也不方便。这个时候你会怎么做?可能会把文章分成“引言”、“正文”、“结论”等部分。
微服务就是程序世界的“分段法”。它是一种软件架构风格,意思是把一个大应用拆成多个小的、独立的服务模块。每个模块可以单独开发、部署、运行和维护。
微服务的优势:
- 灵活扩展:你可以单独为访问量大的模块扩容
- 技术自由:不同服务可以用不同的语言或数据库
- 故障隔离:一个服务出问题不会拖垮整个系统
在本教程中,我们将通过一个简单的实战案例,带大家从零开始体验一次“从单体到微服务”的转变过程。
二、环境准备:搭建你的开发环境

要跑微服务项目,我们需要以下工具:
1. 安装 Java / Maven
Java 是主流后端语言之一,Maven 用来管理依赖。
# 查看是否已安装Java
java -version
# 没有的话去官网下载JDK并安装:https://www.oracle.com/java/technologies/downloads/
2. 下载 Spring Boot CLI(简化版)
Spring Boot 帮我们快速创建 REST 接口。
# 使用 SDKMAN 来安装 Spring Boot CLI(Linux/macOS)
curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk install springboot
3. 安装 IntelliJ IDEA(推荐)或 VSCode + Java 插件
用于编写代码和调试。
4. 安装 Docker(后续用)
微服务部署常用 Docker。
# Linux 安装示例
sudo apt update && sudo apt install docker.io
docker --version
三、核心概念讲解:零基础也能懂的微服务术语
| 概念 | 解释 |
|---|---|
| 单体应用 | 所有功能集中在一个项目里 |
| 微服务 | 把单个应用拆成多个独立运行的小模块 |
| API 网关 | 所有请求先进入这里,由它来转发到各个微服务 |
| 注册中心 Eureka | 微服务启动后会告诉注册中心:“我在哪”,其他人来找我 |
| 配置中心 Config Server | 统一配置微服务的参数(例如数据库地址) |
小贴士:你可以把这些理解成“小区门口的保安(API网关)、物业办公室(注册中心)、公告栏(配置中心)”。
四、实战项目:从一个商城系统出发
我们要做一个最简商城系统,包含两个模块:
- 用户服务:负责用户登录注册
- 订单服务:负责下单操作
先从单体应用做起,再拆分成两个微服务。
第一步:创建单体项目(Spring Boot 项目)
使用 Spring Boot 快速生成一个项目骨架:
spring init --dependencies=web,user,thymeleaf myshop-single
进入目录,编辑 src/main/java/com/example/myshopsingle/MyshopsingleApplication.java 文件,添加控制器如下:
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
return "用户ID:" + id;
}
}
@RestController
@RequestMapping("/orders")
public class OrderController {
@GetMapping("/{orderId}")
public String getOrder(@PathVariable String orderId) {
return "订单号:" + orderId;
}
}
然后运行:
./mvnw spring-boot:run
打开浏览器访问:
- http://localhost:8080/users/1 → 输出:用户ID:1
- http://localhost:8080/orders/1001 → 输出:订单号:1001
✅ 成功!现在这是一个典型的“单体应用”。
第二步:拆分为两个微服务(User Service 和 Order Service)
创建 UserService 子项目:
mkdir myshop-microservices && cd myshop-microservices
spring init --name=user-service user-service
修改 UserServiceApplication.java 内容如下:
@SpringBootApplication
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
@RestController
@RequestMapping("/users")
class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
return "用户ID:" + id;
}
}
配置端口:修改 application.properties 文件内容为:
server.port=8081
启动后访问 http://localhost:8081/users/1 ✔️ 成功。
同样方式创建 OrderService:
spring init --name=order-service order-service
控制器内容如下:
@RestController
@RequestMapping("/orders")
class OrderController {
@GetMapping("/{orderId}")
public String getOrder(@PathVariable String orderId) {
return "订单号:" + orderId;
}
}
端口改为 8082:
server.port=8082
现在你有两个独立运行的服务了 ✅
第三步:用 Eureka 做服务注册与发现(关键)
引入 Eureka 服务注册中心:
新建第三个服务 registry-server:
spring init --dependencies=cloud-eureka-server registry-server
配置类加上 @EnableEurekaServer 开启 Eureka 功能。
编辑 application.properties:
server.port=8761
spring.application.name=eureka-server
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
然后分别在用户服务和订单服务中加入:
<!-- pom.xml 中添加 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
并在主类上加上 @EnableEurekaClient,并配置连接注册中心地址:
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
启动顺序是:先启动注册中心,再启动用户和订单服务。可以在 http://localhost:8761 查看到两个服务 ✅
五、常见问题解答 Q&A
Q1:两个服务如何互相调用?
A:比如订单服务想获取用户信息,可以通过 RestTemplate 或 Feign 调用用户服务接口。
Q2:服务多起来怎么统一配置?
A:引入 Spring Cloud Config Server,统一远程管理配置文件。
Q3:服务挂掉了怎么办?
A:可以结合 Hystrix 实现熔断机制,失败时返回默认数据。
Q4:微服务能保证事务一致性吗?
A:可用 Saga 模式、两阶段提交、消息队列等方式处理跨服务事务。
六、下一步学习建议
完成本次入门后,你可以尝试:
- 学习服务间通信:RestTemplate / Feign / OpenFeign
- 实现负载均衡:Ribbon
- 添加 API 网关:Gateway / Zuul
- 集成日志追踪:Sleuth + Zipkin
- 深入 Docker + Kubernetes 部署微服务
- 学习服务安全认证:OAuth2 / JWT + Spring Security
总结回顾
在本教程中,我们:
- 了解了什么是微服务及其优势
- 搭建了开发环境并实现了第一个单体应用
- 将其拆分为两个微服务
- 引入 Eureka 做服务注册
- 回答了初学者常见疑问
微服务不是万能的,但它确实是现代高并发系统的主流架构方向。只要掌握好基本原理和实践方法,即使是新手也可以逐步驾驭它!
如果你觉得这篇文章对你有帮助,欢迎点赞分享,有任何问题也欢迎评论交流 👇
📅 建议学习时间表:
| 天数 | 内容 | 目标 |
|---|---|---|
| 第1天 | 环境搭建 + 单体项目 | 能运行简单 Web 应用 |
| 第2天 | 拆分为多个服务 | 能运行多个独立服务 |
| 第3天 | Eureka 服务注册中心搭建 | 能让服务自动注册与发现 |
| 第4天 | 研究服务间通信、配置管理 | 能实现跨服务调用 |
| 第5天 | 查阅资料,尝试网关 + 日志追踪 | 进阶目标,掌握全栈微服务生态 |
祝你早日成为微服务高手!

评论 0