微服务架构设计实战:从单体到分布式(面向零基础新手)
朱娜_云计算
2025-06-29 03:08
阅读 545
一、开篇:什么是微服务?它能用来做什么?

在开始之前,我们先来了解下“微服务”这个词到底是什么意思。
📌 简单一句话解释:
微服务就是把一个大系统拆成多个小系统,每个小系统各司其职。
比如说你去点外卖,这个流程背后其实有很多个小功能在同时运作:
- 用户注册登录
- 菜品展示
- 下订单
- 支付处理
- 配送管理
以前的做法是把这些都写在一个系统里,叫做“单体应用”。
但一旦用户多了,某个模块出了问题(比如支付卡顿),整个系统就可能崩了。
而如果采用微服务架构,就可以把这些功能独立开来,每个小系统可以自己更新、维护、扩展,互不干扰。这就是微服务的优势!
二、环境准备:搭建你的开发环境

要学习微服务,你需要安装以下工具:
🔧 必备软件清单:
| 工具名称 | 用途说明 |
|---|---|
| Java JDK 17+ | 编写和运行后端代码的基础 |
| Maven | 管理Java项目依赖的工具 |
| Spring Boot | 构建微服务的框架 |
| Postman | 测试接口调用 |
| IntelliJ IDEA 或 VS Code | 写代码的编辑器 |
| Docker(可选) | 后期打包微服务容器化部署 |
✅ 安装步骤简要说明:
JDK安装
- Windows:下载 JDK 17+ 官网
- Mac/Linux:使用包管理器安装
- 检查是否成功:终端输入
java -version
Maven
- 官网下载解压配置环境变量即可
- 检查是否成功:终端输入
mvn --version
Spring Boot
- 使用 Spring Initializr 创建项目 spring.io/starter
- 选择 Java 17+, Maven, Web, Lombok 等依赖
Postman
- 官网下载安装:postman.com
IDEA / VSCode
- 推荐使用 IntelliJ IDEA 社区版,免费且功能强大
三、核心概念讲解:微服务到底有几个部分?

1️⃣ 单体应用 vs 微服务
| 比较维度 | 单体架构 | 微服务架构 |
|---|---|---|
| 代码结构 | 所有功能写在一起 | 每个功能独立为服务 |
| 部署方式 | 整体打包上线 | 每个服务单独部署 |
| 技术栈限制 | 统一技术 | 可以不同语言/框架 |
| 出现故障 | 一点出错整体瘫痪 | 某个服务崩溃不影响其他 |
2️⃣ 微服务的三大要素
A. 服务拆分
- 把不同功能模块分开,例如:
- 订单服务 OrderService
- 用户服务 UserService
- 商品服务 ProductService
B. 服务通信
- 服务之间如何打招呼?最常见的是通过 HTTP 请求或消息队列。
- 示例:订单服务向商品服务查询库存 → 发起一次 REST 请求
C. 服务治理
- 包括:注册中心、负载均衡、熔断限流等功能
- 常见工具有:Eureka(注册)、Zuul(网关)、Ribbon(负载均衡)、Feign(通信)、Sentinel(限流)
四、实战项目:一步步实现两个微服务交互
我们现在要完成一个小项目:
创建两个简单的微服务——用户服务和订单服务,它们之间可以通过网络互相通信。
第一步:创建项目
✅ 使用 Spring Initializr 创建两个项目:
UserService
- 名称:
user-service - 依赖项:Web, Lombok, Eureka Discovery Client
- 名称:
OrderService
- 名称:
order-service - 依赖项:同样添加 Eureka Client 和 Feign
- 名称:
第二步:编写 UserService
✅ UserController.java
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return new User(id, "小李", "男");
}
}
✅ User.java 实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
private String gender;
}
✅ application.yml
server:
port: 8081
spring:
application:
name: user-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
启动后访问地址:http://localhost:8081/users/1 应该能返回用户信息。
第三步:创建 OrderService 并请求用户服务
✅ 添加 FeignClient 来远程调用用户服务
@FeignClient(name = "user-service")
public interface UserClient {
@GetMapping("/users/{id}")
User getUserById(@PathVariable("id") Long id);
}
✅ OrderController.java
@RestController
@RequestMapping("/orders")
public class OrderController {
@Autowired
private UserClient userClient;
@GetMapping("/{userId}")
public ResponseEntity<String> getOrderWithUser(@PathVariable Long userId) {
User user = userClient.getUserById(userId);
return ResponseEntity.ok("订单属于用户:" + user.getName());
}
}
✅ application.yml
server:
port: 8082
spring:
application:
name: order-service
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka
现在你可以访问 http://localhost:8082/orders/1 查看效果!
第四步:引入注册中心 Eureka Server(让服务自动发现彼此)
创建 Eureka Server
- 项目名:
eureka-server - 依赖项:Eureka Server
- 启动类加注解
@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}

application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
现在访问 http://localhost:8761 就能看到注册中心页面啦!
五、常见问题解答(FAQ)
❓1. 我运行报错提示找不到 Eureka 注册中心怎么办?
- 检查注册中心是否正常运行(8761端口)
- 检查
application.yml中的 eureka 配置是否正确 - 确保服务名一致(如 user-service 是否拼写错误)
❓2. 为什么我不能直接访问服务 IP 地址?
- 因为你用了 Eureka + Feign 自动解析服务名,不需要知道 IP 地址
- 如果你想手动指定 IP,可以在 yml 里配置实例 host
❓3. 微服务太多,怎么管理配置?
- 后续可以学习 Spring Cloud Config 进行统一配置管理
六、学习建议:下一步我该怎么继续学?
✅ 建议学习路径如下:
👇 阶段一:巩固基础
- 复习 Spring Boot 的基本用法
- 学习 Restful API 设计规范
- 熟悉 Tomcat 和 HTTP 协议原理
👇 阶段二:进阶技能
- 学习服务容错处理:Hystrix / Sentinel
- 使用 Ribbon 实现负载均衡
- 引入 API 网关 Zuul 或 Gateway
👇 阶段三:运维与部署
- 学习 Docker 容器化部署微服务
- 使用 Nacos / Consul 替代 Eureka
- 学习 Kubernetes 管理集群
总结
微服务不是魔法,也不是特别复杂的技术,它的本质是“分工合作”的思想在软件工程上的体现。只要你理解了基本概念,并动手实践了几个例子,就能慢慢体会到它的强大之处。
记住一句话:从简单开始,不断实践,你也能成为微服务高手!
🔚 如果你喜欢这篇文章,请记得收藏并分享给需要的朋友~
标签:Java代码人生
为你推荐
暂无相关推荐

评论 0