微服务架构设计实战:从单体到分布式(零基础友好版)
开篇:微服务是啥?它能干嘛?

你可能已经听说过“微服务”这个词,但第一次看到的时候是不是有点懵?其实它并不可怕。我们先用一个生活中的例子来理解:
想象一下,你去一家大超市买东西,所有的商品都放在一起。水果、饮料、日用品都在同一个地方摆着,找东西很不方便。这就是单体应用——所有功能都堆在一起。
而“微服务”就像是把这家超市分成多个小商店,每家只卖一种类型的商品(比如水果店、饮品店、日用品店)。这样顾客就很容易找到自己需要的东西,而且某一家出问题也不会影响其他店的正常营业。
简单来说,微服务架构就是把一个大系统拆分成多个小型、独立的服务,每个服务负责一部分业务功能,并通过网络通信协作工作。
这种结构有很多优点,比如更容易扩展、便于维护、团队可以分工合作等。现在大型互联网公司,如京东、淘宝、Netflix、亚马逊这些企业,大部分系统都是采用微服务架构开发的。
环境准备:搭建属于你的“微服务开发基地”


学习微服务的第一步是准备好开发环境。虽然听起来复杂,但其实只要按照步骤来,一切都会变得很简单。
1. 安装 Java(JDK)
微服务常用的语言之一是 Java,所以我们需要安装 Java 开发工具包(JDK)。
- 推荐版本:JDK 17
- 下载地址:https://www.oracle.com/java/technologies/downloads/
- Windows 用户请下载
.msi文件安装,Mac 用户选择.pkg文件。 - 安装完成后在命令行输入:
java -version
如果出现类似下面的内容,说明安装成功了:
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment ...
OpenJDK 64-Bit Server VM ...
2. 安装 IDE
IDE 是集成开发环境,就像编程用的“写字板”,推荐使用 IntelliJ IDEA 或 VS Code。
- 下载地址:
3. 安装 Spring Boot CLI(可选)
Spring Boot 是目前最流行的微服务开发框架。
你可以访问官网 https://spring.io/projects/spring-boot#overview 学习更多内容。
如果你使用的是 IDE,可以直接新建 Spring Boot 项目;否则也可以下载 CLI 工具。
4. 安装 Docker(用于部署服务)
Docker 可以帮助我们将服务“打包”运行,不需要每次都手动配置服务器。
- 下载地址:https://www.docker.com/products/docker-desktop/
- 安装后输入:
如果有输出,代表安装完成。docker --version
核心概念:什么是“服务”,它们之间怎么沟通?

在正式动手写代码前,我们要了解几个关键的概念。
1. 服务(Service)
每一个“服务”就是一个小程序,专注于做一件事,比如:
- 用户管理服务:处理用户注册、登录;
- 订单服务:处理下单、支付;
- 商品服务:显示商品信息和库存。
这些服务之间是独立运行的,互不干扰。
2. REST API
服务之间通常通过 HTTP 协议交流,也就是网页浏览的那种方式。最常见的交流方式是 REST 风格的接口。
举个例子:
当你在浏览器输入 https://www.baidu.com 按下回车后,就会向百度的服务器发送一个请求。服务器收到后,返回网页内容给你看。
在微服务里,A 服务要调用 B 服务的数据,也是一样的流程。
3. 注册中心(Service Registry)
微服务多了之后,服务之间不知道对方在哪里怎么办?这就需要一个“地图”一样的东西记录谁是谁。
常见的注册中心有 Eureka(Netflix)、Consul、Nacos 等。
比如,A服务启动时会告诉注册中心:“我是订单服务,运行在IP 192.168.1.5:8080。”
B服务想调用A服务时,只需要问问注册中心“A服务在哪?”就可以拿到地址。
4. 负载均衡(Load Balancer)
假如A服务部署了三个实例在不同机器上,怎么决定该访问哪一个?这时就需要负载均衡器来帮忙。
常见方案:Ribbon、Spring Cloud LoadBalancer。
5. 网关(API Gateway)
所有服务的外部访问请求都必须经过网关,它可以实现权限控制、路由转发等功能。
常见网关框架:Zuul、Spring Cloud Gateway、Kong。
实战项目:做一个简单的微服务系统
让我们来实战一个非常简单的微服务系统吧!目标是做一个:
图书借阅系统
包含两个服务:
- 图书服务(Book Service):提供书籍列表
- 借阅服务(Borrow Service):查询某本书是否被借出
我们将使用 Spring Boot 来编写这两个服务,并让它们进行通信。
第一步:创建 Book Service
1. 使用 Spring Initializr 创建项目
填写以下内容:
- Project: Maven
- Language: Java
- Spring Boot Version: 3.x
- Group: com.example
- Artifact: book-service
- Dependencies: Spring Web, Spring Data JPA
点击 “Generate” 下载项目压缩包。
解压后导入 IDE(IntelliJ 或 VS Code)
2. 编写主程序 BookServiceApplication.java
package com.example.bookservice;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BookServiceApplication {
public static void main(String[] args) {
SpringApplication.run(BookServiceApplication.class, args);
}
}
3. 创建控制器 BookController.java
package com.example.bookservice.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Arrays;
import java.util.List;
@RestController
@RequestMapping("/books")
public class BookController {
@GetMapping
public List<String> getAllBooks() {
return Arrays.asList("Java编程思想", "算法导论", "Effective Java");
}
}
4. 启动服务并测试
运行 BookServiceApplication.java,然后打开浏览器输入:
http://localhost:8080/books
你应该能看到返回的书籍列表!
第二步:创建 Borrow Service
重复上面第1步,修改 artifact 为 borrow-service
1. 修改 application.properties 设置端口
server.port=8081
2. 创建 BorrowController.java
package com.example.borrow.controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@RestController
@RequestMapping("/borrow")
public class BorrowController {
private final RestTemplate restTemplate = new RestTemplate();
@GetMapping("/{book}")
public String checkBorrowStatus(@PathVariable String book) {
// 请求图书服务获取书籍列表
String url = "http://localhost:8080/books";
List<String> books = restTemplate.getForObject(url, List.class);
if (books != null && books.contains(book)) {
return book + " 存在于库中。";
} else {
return book + " 不在库中。";
}
}
}
3. 运行 Borrow Service 并测试
先启动 Book Service(确保在 8080 端口),再运行 BorrowServiceApplication.java
访问:
http://localhost:8081/borrow/Java编程思想
你会看到返回结果:
Java编程思想 存在于库中。
✅ 到这一步,我们的第一个微型微服务系统就已经完成啦!
常见问题解答(FAQ)

Q1:为什么我访问不了另一个服务?
A:检查对方服务是否运行,IP 和端口是否正确。可以在本机 ping 或使用 telnet 测试连接性。
Q2:REST 是什么?和 WebService 有什么区别?
A:REST 是基于 HTTP 的轻量级通信方式,WebService 通常是 SOAP 协议,更重一些。现在基本都用 REST 了。
Q3:服务越来越多,怎么避免混乱?
A:可以用注册中心统一管理服务地址,再加上 API 网关统一入口管理。
Q4:为什么每个服务要独立运行?
A:这是为了降低耦合。比如图书服务挂掉,不影响用户登录服务继续运行。
Q5:我要学哪个语言更适合做微服务?
A:Java、Go、Node.js 都很适合。Java 企业级生态完善,Go 性能好,Node.js 快速易上手。
学习建议:下一步该怎么进阶?
恭喜你完成了第一个微服务实战!以下是进阶路线图:
🟢 入门阶段完成 ✅
你现在掌握了:
- 微服务的基本概念
- 如何创建两个服务并让它们通信
- 用到了 Spring Boot + REST 调用
🔵 第一步:引入服务注册中心(Eureka/Nacos)
尝试将服务注册到 Eureka 或 Nacos 中,实现服务自动发现。
🟠 第二步:添加 API 网关
学习使用 Zuul 或 Spring Cloud Gateway 给系统加一个统一入口。
🟡 第三步:服务间通信优化
尝试使用 OpenFeign、Ribbon 替代硬编码调用,提升可维护性和性能。
🔴 高级阶段:熔断限流 & 分布式事务
- 熔断限流工具:Hystrix / Resilience4j
- 分布式事务:Seata、Saga 模式、TCC 模式
写在最后:你已经在路上了!
微服务是一个很大的话题,但别怕,它其实是由一个个小知识组合起来的。你现在已经迈出了第一步,有了方向感和实践能力。接下来要做的就是一点点往上爬。
如果你喜欢这个教程,请收藏起来慢慢看,有问题随时欢迎留言提问。愿你在后端开发的道路上越走越远!
🔚 教程结束,期待你在微服务世界里闯出一片天!🚀

评论 0