微服务架构设计实战:从单体到分布式(面向零基础新手)

朱娜_云计算
2025-06-29 03:08
阅读 545

一、开篇:什么是微服务?它能用来做什么?

一、开篇:什么是微服务?它能用来做什么?

在开始之前,我们先来了解下“微服务”这个词到底是什么意思。

📌 简单一句话解释:

微服务就是把一个大系统拆成多个小系统,每个小系统各司其职。

比如说你去点外卖,这个流程背后其实有很多个小功能在同时运作:

  • 用户注册登录
  • 菜品展示
  • 下订单
  • 支付处理
  • 配送管理

以前的做法是把这些都写在一个系统里,叫做“单体应用”。
但一旦用户多了,某个模块出了问题(比如支付卡顿),整个系统就可能崩了。

而如果采用微服务架构,就可以把这些功能独立开来,每个小系统可以自己更新、维护、扩展,互不干扰。这就是微服务的优势!


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

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

要学习微服务,你需要安装以下工具:

🔧 必备软件清单:

工具名称 用途说明
Java JDK 17+ 编写和运行后端代码的基础
Maven 管理Java项目依赖的工具
Spring Boot 构建微服务的框架
Postman 测试接口调用
IntelliJ IDEA 或 VS Code 写代码的编辑器
Docker(可选) 后期打包微服务容器化部署

✅ 安装步骤简要说明:

  1. JDK安装

    • Windows:下载 JDK 17+ 官网
    • Mac/Linux:使用包管理器安装
    • 检查是否成功:终端输入 java -version
  2. Maven

    • 官网下载解压配置环境变量即可
    • 检查是否成功:终端输入 mvn --version
  3. Spring Boot

    • 使用 Spring Initializr 创建项目 spring.io/starter
    • 选择 Java 17+, Maven, Web, Lombok 等依赖
  4. Postman

  5. IDEA / VSCode

    • 推荐使用 IntelliJ IDEA 社区版,免费且功能强大

三、核心概念讲解:微服务到底有几个部分?

三、核心概念讲解:微服务到底有几个部分?

1️⃣ 单体应用 vs 微服务

比较维度 单体架构 微服务架构
代码结构 所有功能写在一起 每个功能独立为服务
部署方式 整体打包上线 每个服务单独部署
技术栈限制 统一技术 可以不同语言/框架
出现故障 一点出错整体瘫痪 某个服务崩溃不影响其他

2️⃣ 微服务的三大要素

A. 服务拆分

  • 把不同功能模块分开,例如:
    • 订单服务 OrderService
    • 用户服务 UserService
    • 商品服务 ProductService

B. 服务通信

  • 服务之间如何打招呼?最常见的是通过 HTTP 请求或消息队列。
  • 示例:订单服务向商品服务查询库存 → 发起一次 REST 请求

C. 服务治理

  • 包括:注册中心、负载均衡、熔断限流等功能
  • 常见工具有:Eureka(注册)、Zuul(网关)、Ribbon(负载均衡)、Feign(通信)、Sentinel(限流)

四、实战项目:一步步实现两个微服务交互

我们现在要完成一个小项目:
创建两个简单的微服务——用户服务订单服务,它们之间可以通过网络互相通信。

第一步:创建项目

✅ 使用 Spring Initializr 创建两个项目:

  1. UserService

    • 名称:user-service
    • 依赖项:Web, Lombok, Eureka Discovery Client
  2. 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

  1. 项目名:eureka-server
  2. 依赖项:Eureka Server
  3. 启动类加注解 @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

数据库设计模型-1

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 管理集群

总结

微服务不是魔法,也不是特别复杂的技术,它的本质是“分工合作”的思想在软件工程上的体现。只要你理解了基本概念,并动手实践了几个例子,就能慢慢体会到它的强大之处。

记住一句话:从简单开始,不断实践,你也能成为微服务高手!

🔚 如果你喜欢这篇文章,请记得收藏并分享给需要的朋友~

评论 0

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