微服务架构设计实战:从单体到分布式
开篇:什么是微服务?为什么要用它?

想象一下,你正在开一家小饭馆。一开始,你一个人做菜、洗菜、端盘子、收钱……这就像“单体应用”,所有功能都集中在一个地方。
但随着生意越来越好,你发现越来越忙不过来。于是你开始请人帮忙:有人专门切菜(订单模块),有人负责炒菜(支付模块),还有人专门收银(用户管理模块)。每个人只专注于一件事,并且可以通过对讲机互相协作 —— 这就是“微服务架构”。
微服务是一种将一个大型应用程序拆分成多个小型、独立的服务的架构方式,每个服务运行在自己的进程中,通过网络进行通信。
为什么使用微服务?
- ✅ 每个服务可以独立开发、部署和扩展
- ✅ 技术栈灵活(可以混用不同语言/框架)
- ✅ 系统更稳定,一个服务挂了不会牵连整个系统
- ✅ 更适合大规模团队协作开发
环境准备:搭建你的第一台“厨房”


第一步:安装 Java 和 Spring Boot
我们使用 Spring Boot 来构建微服务,因为它简单好用,而且生态强大。
下载并安装 JDK(建议使用 JDK 8 或 17)
官网地址:https://www.oracle.com/java/technologies/javase-downloads.html安装 Maven
Maven 是用来管理依赖的工具,官网下载:https://maven.apache.org/安装 IDEA(IntelliJ IDEA 社区版即可)
下载地址:https://www.jetbrains.com/idea/download/创建第一个 Spring Boot 项目:
打开 start.spring.io,填写如下信息:
- Project: Maven
- Language: Java
- Spring Boot Version: 最新稳定版(如 3.0.x)
- Dependencies: Spring Web, Spring Boot DevTools(用于热启动)
然后点击 Generate 下载项目压缩包,解压后用 IDEA 打开。
核心概念:让你听懂“厨师之间的对话”
1. 服务拆分:把大锅饭分成小炒
🧠 小贴士:按业务逻辑划分,而不是按技术层。
比如电商系统的单体结构可能是这样:
ECommerceApp/
├── UserController.java
├── OrderController.java
├── ProductController.java
└── DatabaseConfig.java
而拆成微服务后,会变成三个独立的小程序:
UserService/
├── UserController.java
└── application.yml
OrderService/
├── OrderController.java
└── application.yml
ProductService/
├── ProductController.java
└── application.yml
2. 服务通信:如何让“服务员”之间不打架?
服务之间需要沟通,比如下单时要检查库存,这时订单服务要问产品服务:“有没有货?”
有两种常见方式:
| 方式 | 描述 | 场景 |
|---|---|---|
| REST 调用 | 使用 HTTP 接口通信,最简单直接 | 单向同步调用 |
| 消息队列 | 异步处理,消息由中间件传递 | 高并发、异步通知 |
3. 注册中心:你知道谁在厨房里吗?
如果每个服务都不知道别的服务在哪怎么办?我们需要一个“厨师名单簿”来记录大家的位置。
这就是注册中心的作用。常用工具有:
- Eureka(Netflix 出品)
- Nacos(阿里出品)
- Consul(HashiCorp)
我们会用 Eureka 做例子。
4. API 网关:所有请求的总入口
API 网关就像餐厅门口的迎宾员,负责把客人带到不同的区域(服务),还负责鉴权、限流等任务。
我们将使用 Zuul 来实现 API 网关。
实战项目:一步步创建一个简易微服务系统
目标:构建一个简单的电商平台,包含以下服务:
- 用户服务(User Service)
- 产品服务(Product Service)
- 注册中心(Eureka Server)
- 网关服务(Zuul)
步骤一:创建 Eureka Server
- 在 start.spring.io 创建新项目,添加
Eureka Server依赖。 - 修改
application.yml:
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
- 在主类加上注解:
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
启动成功后,访问 http://localhost:8761 就能看到注册中心界面。
步骤二:创建 Product 服务
- 添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 修改
application.yml:
server:
port: 8081
spring:
application:
name: product-service
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
- 编写 Controller:
@RestController
@RequestMapping("/products")
public class ProductController {
@GetMapping
public String listProducts() {
return "牛奶 x1, 面包 x2";
}
}
启动后,刷新 Eureka 页面可以看到 product-service 已注册。
步骤三:创建 User 服务
步骤同上,只是端口号改用 8082,spring.application.name = user-service
控制器示例:
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping
public String listUsers() {
return "Alice, Bob";
}
}
步骤四:创建 Zuul 网关
- 新建项目,添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
- 修改
application.yml:
server:
port: 8080
spring:
application:
name: api-gateway
zuul:
routes:
product-service: /products/**
user-service: /users/**
- 主类添加注解:
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
现在访问:
- http://localhost:8080/products → 自动转发给 product-service
- http://localhost:8080/users → 自动转发给 user-service
🎉 成功实现了一个简单的微服务架构!
常见问题解答
❓ Q1:我找不到某个服务怎么办?
A:查看 Eureka 控制台是否注册成功,确认服务名和地址是否一致,检查网络连接。
❓ Q2:服务调用失败怎么办?
A:尝试直接访问目标服务接口,看是否能返回数据;如果没问题再检查 Zuul 的路由规则是否正确配置。
❓ Q3:能不能用 Python 写一个微服务?
A:当然可以!微服务本质是 HTTP 接口,可以用任意语言实现。例如 Python + Flask 就行。
❓ Q4:一个服务应该有多大?
A:没有固定大小,建议按照业务边界来切分,原则是:“高内聚、低耦合”。
学习建议:下一步你要学什么?

恭喜你完成了第一个微服务实战项目!接下来你可以深入学习这些方向:
| 学习方向 | 推荐内容 | 工具/框架 |
|---|---|---|
| 服务治理 | 负载均衡、断路器、限流熔断 | Ribbon, Hystrix |
| 分布式事务 | 多个服务之间保持数据一致性 | Seata, Saga 模式 |
| 消息队列 | 异步通信与解耦 | RabbitMQ, Kafka |
| 日志追踪 | 查找问题更方便 | Sleuth, Zipkin |
| 安全认证 | 统一登录和权限控制 | Spring Security, OAuth2 |
| 容器化部署 | 让服务更容易管理和发布 | Docker, Kubernetes |
结语:微服务不是万能药,但很有效
微服务不是银弹,也不是每个项目都需要用它。但在面对复杂系统、团队扩张、快速迭代时,它确实是个强大的利器。
希望这篇教程让你迈出了第一步。继续加油,未来你会成为真正的“后厨大厨”!
💡 提示:本项目完整代码可在 GitHub 上搜索关键词组合:Spring Cloud 微服务实战 获取参考。

评论 0