微服务架构设计实战:从单体到分布式(零基础教程)

南城开发者
2025-06-12 21:08
阅读 622

一、开篇:微服务是什么?为什么需要它?

一、开篇:微服务是什么?为什么需要它?

想象一下你正在写一篇论文。如果整篇文章都写在一个段落里,不仅阅读困难,修改也不方便。这个时候你会怎么做?可能会把文章分成“引言”、“正文”、“结论”等部分。

微服务就是程序世界的“分段法”。它是一种软件架构风格,意思是把一个大应用拆成多个小的、独立的服务模块。每个模块可以单独开发、部署、运行和维护。

微服务的优势:

  • 灵活扩展:你可以单独为访问量大的模块扩容
  • 技术自由:不同服务可以用不同的语言或数据库
  • 故障隔离:一个服务出问题不会拖垮整个系统

在本教程中,我们将通过一个简单的实战案例,带大家从零开始体验一次“从单体到微服务”的转变过程。


二、环境准备:搭建你的开发环境

二、环境准备:搭建你的开发环境

要跑微服务项目,我们需要以下工具:

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

打开浏览器访问:

✅ 成功!现在这是一个典型的“单体应用”。


第二步:拆分为两个微服务(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 模式、两阶段提交、消息队列等方式处理跨服务事务。


六、下一步学习建议

完成本次入门后,你可以尝试:

  1. 学习服务间通信:RestTemplate / Feign / OpenFeign
  2. 实现负载均衡:Ribbon
  3. 添加 API 网关:Gateway / Zuul
  4. 集成日志追踪:Sleuth + Zipkin
  5. 深入 Docker + Kubernetes 部署微服务
  6. 学习服务安全认证:OAuth2 / JWT + Spring Security

总结回顾

在本教程中,我们:

  • 了解了什么是微服务及其优势
  • 搭建了开发环境并实现了第一个单体应用
  • 将其拆分为两个微服务
  • 引入 Eureka 做服务注册
  • 回答了初学者常见疑问

微服务不是万能的,但它确实是现代高并发系统的主流架构方向。只要掌握好基本原理和实践方法,即使是新手也可以逐步驾驭它!

如果你觉得这篇文章对你有帮助,欢迎点赞分享,有任何问题也欢迎评论交流 👇


📅 建议学习时间表:

天数 内容 目标
第1天 环境搭建 + 单体项目 能运行简单 Web 应用
第2天 拆分为多个服务 能运行多个独立服务
第3天 Eureka 服务注册中心搭建 能让服务自动注册与发现
第4天 研究服务间通信、配置管理 能实现跨服务调用
第5天 查阅资料,尝试网关 + 日志追踪 进阶目标,掌握全栈微服务生态

祝你早日成为微服务高手!

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝