微服务架构设计实战:从单体到分布式(新手友好版)

卓越之导师
2025-06-28 04:58
阅读 723

开篇:什么是微服务?它能做什么?

开篇:什么是微服务?它能做什么?

你是不是经常听到“微服务”这个词,却搞不懂它是干什么的?别担心,我们这就用最简单的方式来说清楚。

什么叫微服务?

微服务(Microservices)是一种软件开发方法。和传统的“一个大程序包打天下”的方式不同,它把一个大系统拆成多个小而独立的功能模块,每个模块都可以单独运行、部署和维护。

举个生活中的例子:

想象你在做一碗西红柿炒蛋。如果这个菜由一个人一口气完成,那就是传统“单体架构”。
而如果你让一个人切番茄、另一个人打鸡蛋、再一个人来炒,每个人的任务分开进行、互相配合,这就是微服务架构

为什么要学微服务?

  • 易于维护:一个小功能出问题,不影响整体
  • 扩展性强:某个功能访问量大,只扩它就行了
  • 技术灵活:不同模块可以用不同的编程语言或数据库

好了,接下来我们就动手实践,一步步从零开始,做一个简单的微服务项目。


环境准备:你需要安装哪些工具?

系统架构设计图-1

环境准备:你需要安装哪些工具?

为了更好地练习微服务开发,我们需要先准备好基础环境:

必备工具清单:

  1. Java JDK 8 或以上
  2. Maven(项目管理工具)
  3. IntelliJ IDEA 或 Eclipse(代码编辑器)
  4. Postman(测试 API 接口)
  5. Docker(可选,用于部署服务)
  6. MySQL 或 H2 数据库(用于持久化数据)

📌 新手建议使用 Spring Boot + Maven 组合,简单易上手。

安装步骤简要说明:

  1. 前往官网下载并安装 Java 和 Maven(百度搜索“Java 安装 Windows/Mac”即可找到教程)
  2. 下载 IntelliJ IDEA 社区版(免费)
  3. Postman 直接下载安装包,安装后打开即可使用
  4. Docker 初学者可以暂时不安装,后面进阶时再补充

核心概念:几个关键词帮你快速入门

核心概念:几个关键词帮你快速入门

为了让初学者更容易理解,这里我用日常生活的类比方式,解释几个微服务的核心术语:

1. 服务(Service)

就是一个个小程序块,比如“用户服务”、“订单服务”等。它们各自负责一个独立的功能。

就像一家餐厅里的洗碗组、切菜组、炒菜组。

2. 注册中心(Registry)

服务多了以后,谁也不知道“用户服务”在哪。注册中心的作用就像通讯录——所有服务启动后都要先去登记一下。

像是公司员工名册,新员工入职必须先登记在案。

常见实现工具:Eureka、Consul、Nacos

3. 网关(Gateway)

用户请求不是直接发给某一个服务的,而是先通过“网关”,由网关根据请求内容决定转发给哪个服务处理。

类似公司的前台,客户来了先问前台找谁。

常用网关框架:Spring Cloud Gateway / Zuul

4. 配置中心(Config Server)

微服务多的时候,配置文件也很多。配置中心可以把这些配置统一管理,避免重复修改。

类似公司人事部统一管理员工信息。

常用组件:Spring Cloud Config、Apollo


实战项目:一步一步构建两个微服务 + 网关

实战项目:一步一步构建两个微服务 + 网关

我们要做一个简单的在线商城的微服务系统:

  • 用户服务(UserService) → 处理用户注册登录
  • 订单服务(OrderService) → 创建和查询订单
  • 使用 Eureka 做服务注册与发现
  • 使用 Gateway 做请求路由分发

✅ 整个项目结构如下:

demo-project/
├── eureka-server      # 服务注册中心
├── user-service       # 用户服务
├── order-service      # 订单服务
├── gateway            # 网关服务

Step 1:创建 Eureka 注册中心

新建 Spring Boot 项目,选择依赖:

  • Spring Web
  • Eureka Server

application.yml 中配置:

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

主启动类加上注解开启 Eureka 服务:

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

✅ 启动后访问 http://localhost:8761 可以看到服务注册页面。


Step 2:创建 UserService 用户服务

添加依赖:

  • Spring Web
  • Eureka Client
  • Spring Data JPA
  • H2 Database(适合学习)

application.yml 配置注册到 Eureka:

spring:
  application:
    name: user-service

server:
  port: 8081

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

写一个简单的 REST 控制器:

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public String getUserById(@PathVariable Long id) {
        return "User with ID " + id;
    }
}

✅ 启动后,刷新 Eureka 页面会看到 user-service 已注册。


Step 3:创建 OrderService 订单服务

结构类似 UserService,只是换个名字和端口:

spring:
  application:
    name: order-service

server:
  port: 8082

接口示例:

@RestController
@RequestMapping("/orders")
public class OrderController {

    @GetMapping("/{id}")
    public String getOrderById(@PathVariable Long id) {
        return "Order with ID " + id;
    }
}

✅ 启动后也能在 Eureka 看到注册成功。


Step 4:搭建 Gateway 网关

依赖包括:

  • Spring Web
  • Eureka Client
  • Spring Cloud Gateway

application.yml 配置路由:

spring:
  application:
    name: gateway
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/api/users/**
        - id: order-service
          uri: lb://order-service
          predicates:
            - Path=/api/orders/**

server:
  port: 8080

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

✅ 网关启动后,可以通过以下方式访问:

地址 对应服务
http://localhost:8080/api/users/1 用户服务
http://localhost:8080/api/orders/2 订单服务

常见问题答疑

Q1:为什么服务注册不上 Eureka?

  • 确保服务中 spring.application.name 正确
  • 查看服务是否报错,有没有连不上 Eureka 的提示
  • 等待1~2分钟再刷新页面(有些服务需要几秒才注册)

Q2:请求返回 404?

  • 检查路径是否正确(注意 /api/users/**/users/** 的区别)
  • 检查网关路由规则是否拼写错误
  • Postman 使用 GET 请求,并确保 URL 正确

Q3:能不能不用 Eureka 改成 Nacos?

当然可以!不过那是进阶内容。本教程先掌握基础思想,后续再换别的注册中心。


学习建议:下一步该学什么?

恭喜你完成了你的第一个微服务项目!但这只是起点。下面是一些后续推荐的学习方向:

1. 更高级的微服务组件

  • Feign:声明式远程调用
  • Ribbon:负载均衡
  • Sleuth/Zipkin:链路追踪
  • Config:集中管理配置

2. 分布式事务

  • 了解 CAP 原理
  • 学习两阶段提交、TCC、Saga 等分布式事务方案

3. 微服务部署

  • 学习 Docker、Kubernetes(简称 K8s)
  • 自动化部署流程:CI/CD(持续集成和交付)

4. 服务监控

  • Prometheus + Grafana 做监控大盘
  • Logback + ELK 做日志分析

总结回顾

本文带你从零开始体验了一个完整的微服务项目实战:

  • 理解了什么是微服务及其优势
  • 搭建了微服务的基础开发环境
  • 动手实现了两个服务 + 网关 + 注册中心
  • 回答了一些新手常见问题
  • 给出了进一步学习的方向建议

💡 如果你是刚接触微服务的新手,建议先把上面的例子自己跟着敲一遍,然后试着加一些功能,例如数据库操作、跨服务调用等。

学习是一个过程,不要急着一下子学会所有东西,慢慢来,你会发现微服务的世界其实很有趣!


🎉 加油!下一个优秀的架构师,可能就是你!

评论 0

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