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

代码收容所
2025-06-12 09:53
阅读 340

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

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

在你开始学习编程时,可能已经写过一些“单体应用”:所有的功能都写在一个项目里,比如用户管理、订单处理、支付等功能都在一个程序中完成。

但随着应用越来越大,维护和扩展会变得非常困难。这时候,我们就可以使用一种叫 微服务架构 的方式来组织我们的代码。

微服务的本质是把原本一个大系统,拆分成多个小系统,每个小系统独立运行,各自负责一部分功能,并通过网络通信协调工作。

想象一下,你正在开一家餐厅。起初你自己一个人做菜、点餐、收银。但随着客人越来越多,你请了厨师专门做菜、服务员点餐、会计负责财务——这就是“微服务”的思想。


环境准备:开始前要安装什么?

环境准备:开始前要安装什么?

为了便于操作和理解,我们将使用以下技术栈:

  • 编程语言:Java(Spring Boot)
  • 构建工具:Maven
  • 接口测试:Postman 或 curl
  • 数据库:MySQL

1. 安装 Java(JDK 17)

前往官网下载并安装 Oracle JDK 17

或者使用 OpenJDK(推荐):Adoptium

安装完成后,执行命令验证是否成功:

java -version

2. 安装 Maven

访问 Maven 官网 下载后配置环境变量。验证:

mvn -v

3. 安装数据库 MySQL(可选,用于演示)

可以使用本地安装,也可以用 Docker 快速部署一个 MySQL 容器。

如果你用的是 Mac:

brew install mysql

Windows 用户可参考 MySQL Installer

4. 下载开发工具(IDE)

推荐使用 IntelliJ IDEA(社区版免费)或者 VS Code + Java 插件。


核心概念:微服务的关键术语解释

核心概念:微服务的关键术语解释

学习微服务,我们要了解几个核心概念:

1. 服务拆分(Service Splitting)

就像前面说的“开餐厅”,微服务的核心就是把一个大型系统拆成多个小的服务模块。例如:

功能 对应服务
用户注册登录 user-service
商品信息展示 product-service
支付订单流程 order-service

2. API 接口交互(RESTful)

每个服务之间不是直接调用代码,而是通过 HTTP 协议互相通信,通常使用 RESTful 风格的接口。

示例请求:

GET /users/1

表示访问 user-service 获取 ID 为 1 的用户信息。

3. 注册中心(Eureka)

微服务数量变多后,如何找到每个服务?这就需要一个“通讯录”一样的服务,叫做注册中心,常用的是 Eureka 或 Consul。

4. 网关(Gateway)

当外部请求访问多个服务时,可以通过一个统一的入口进行路由和权限控制,这个角色由 Gateway 担任。


实战项目:从单体到微服务的第一步

实战项目:从单体到微服务的第一步

我们来做一个简单的电商系统,包含两个服务:

  • 用户服务:提供用户信息查询
  • 商品服务:提供商品信息查询

所有代码都使用 Spring Boot 编写,适合初学者。

第一步:创建父工程(Project)

先创建一个 Maven 工程作为父工程,结构如下:

ecommerce/
├── user-service/
├── product-service/
└── pom.xml

父项目的 pom.xml 内容如下(只列出关键依赖):

<modules>
    <module>user-service</module>
    <module>product-service</module>
</modules>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2022.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

第二步:编写用户服务(User Service)

进入 user-service 目录,创建主类:

// UserApplication.java
@RestController
@SpringBootApplication
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class, args);
    }

    @GetMapping("/users/{id}")
    public String getUser(@PathVariable String id) {
        return "用户ID:" + id;
    }
}

再添加配置文件 application.yml

server:
  port: 8081
spring:
  application:
    name: user-service

运行该服务后,访问:

http://localhost:8081/users/100

你应该看到返回内容:“用户ID:100”

第三步:编写商品服务(Product Service)

与用户服务类似:

// ProductApplication.java
@RestController
@SpringBootApplication
public class ProductApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProductApplication.class, args);
    }

    @GetMapping("/products/{id}")
    public String getProduct(@PathVariable String id) {
        return "商品ID:" + id;
    }
}

配置文件:

server:
  port: 8082
spring:
  application:
    name: product-service

运行后访问:

http://localhost:8082/products/200

你会看到 “商品ID:200”

到目前为止,我们有两个服务分别运行在不同端口上。


常见问题解答

Q1:为什么我运行服务的时候报错说找不到类?

A:检查你的 pom.xml 是否引入了 Spring Boot Starter Web:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Q2:我不能同时运行两个服务,端口冲突怎么办?

A:修改 application.yml 中的 server.port,给两个服务分配不同的端口。

Q3:服务多了怎么知道它们在哪里运行?

A:这时就需要一个注册中心(如 Eureka),我们会在后续文章中详细讲解。


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

完成了第一个微服务项目后,你已经迈出了重要一步!接下来你可以继续深入以下几个方向:

✅ 初级进阶路线图:

  1. 服务注册与发现:学习 Eureka、Consul、Nacos 的使用
  2. API 网关:尝试使用 Spring Cloud Gateway 统一路由
  3. 负载均衡:Ribbon + Feign 实现服务间调用
  4. 配置中心:Spring Cloud Config 动态加载配置
  5. 日志聚合:ELK 技术组合统一查看日志
  6. 分布式事务:初步了解 Seata 或 Saga 模式

总结

本教程带你从零开始认识微服务,并亲手搭建了两个简单的微服务。虽然它们还很简陋,但是你已经掌握了构建分布式系统的最基本技能!

记住一句话:微服务不是一蹴而就的技术,而是一种思维方式。只要持续练习,不断拆解问题,你就能够真正掌握它。

如果你想获得完整源码或想了解更多微服务实战案例,请继续关注后续系列课程《微服务进阶实战》。

评论 0

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