《后端架构演进:从单体到云原生》教程
开篇:什么是后端架构?它能做什么?

你是否想过,当你在微信上发消息、在淘宝上下单、或者在抖音上看视频时,背后的服务器是如何工作的?这些看似简单操作的背后,其实都有一整套后端系统在支撑。这套系统的结构和设计方式,就叫做后端架构。
后端架构的核心目标是:
- 高效处理用户的请求(比如登录、下单、搜索等)
- 安全地存储用户数据
- 能够应对大量并发访问(比如“双十一”期间千万人同时下单)
刚开始的时候,程序员们通常会把所有的功能都写在一个项目里,这种架构叫做单体架构。但随着互联网的发展,我们发现这种方式很难应对越来越复杂的业务需求。于是,人们开始不断地优化和演化架构。最终形成了一种更先进的方式 —— 云原生架构。
这个教程将带你了解:
- 后端架构是如何一步步演变的
- 每种架构的特点是什么
- 怎样用代码实践它们
准备好了吗?我们马上开始!
环境准备:搭建你的第一个后端开发环境

为了更好地理解后端架构的演变过程,我们需要一些基本的开发工具来配合学习。
工具清单(全部免费):
| 工具名称 | 用途说明 |
|---|---|
| Node.js | 用来运行 JavaScript 编写的后端程序 |
| Express | 快速构建 Web 服务的框架 |
| MongoDB | NoSQL 数据库,适合新手练习 |
| Docker | 容器化部署必备工具 |
| Postman | 测试 API 的好帮手 |
第一步:安装 Node.js 和 NPM
Node.js 是运行 JavaScript 的服务器端平台,NPM 是其包管理器。
Windows / Mac 下载地址:
👉 https://nodejs.org/
选择 “LTS” 版本下载并安装即可。
验证是否安装成功:
打开终端或命令行,输入以下命令:
node -v
npm -v
如果有版本号输出,则表示安装成功。
第二步:安装 MongoDB
MongoDB 是一个非常流行的 NoSQL 数据库,特别适合新手练习。
下载地址:
👉 https://www.mongodb.com/try/download/community
Mac 用户推荐使用 Homebrew 安装:
brew tap mongodb/brew && brew install mongodb-community@6.0
启动数据库:
mongod
保持这个窗口开着,别关闭它,否则数据库无法访问。
第三步:安装 Express(Web 框架)
Express 是 Node.js 最常用的 Web 框架之一。
创建一个新项目目录:
mkdir backend-evolution
cd backend-evolution
npm init -y
npm install express mongoose
这样我们就准备好了一个轻量级的后端开发环境!
核心概念讲解:单体架构 → 微服务架构 → 云原生架构


我们现在正式进入后端架构的三个主要阶段:
1️⃣ 单体架构(Monolithic Architecture)
一句话解释: 所有代码都在一个工程里面,就像一个小餐馆,一个人管进货、炒菜、收银。
优点:
- 部署简单,维护成本低
- 小团队初期容易上手
缺点:
- 功能耦合高(修改一处可能影响其他模块)
- 不易扩展,不适合复杂系统
示例项目:简单的图书管理系统
创建一个名为 app.js 的文件:
const express = require('express');
const app = express();
app.use(express.json());
// 书籍列表接口
let books = [
{ id: 1, name: "JavaScript高级编程", price: 89 },
{ id: 2, name: "Node.js实战", price: 75 }
];
app.get('/books', (req, res) => {
res.json(books);
});
app.listen(3000, () => {
console.log("服务器正在监听 http://localhost:3000");
});
运行:
node app.js
访问 http://localhost:3000/books 可以看到所有书籍信息。
✅ 这就是一个最简单的单体架构应用。
2️⃣ 微服务架构(Microservices Architecture)
一句话解释: 把整个系统拆分成多个小服务,像是一家连锁餐厅,每个店卖不同品类的食物。
优点:
- 各个模块解耦(修改订单服务不影响支付服务)
- 易于扩展,支持高并发
缺点:
- 管理多个服务比较复杂
- 需要网络通信(跨服务调用慢)
实例:拆分用户服务和订单服务
假设我们将原本放在一块的用户与订单管理分开为两个独立的服务:
- 用户服务:提供注册、登录、查询用户信息
- 订单服务:提供下单、查看订单状态
用户服务(user-service.js):
const express = require('express');
const app = express();
const users = [
{ id: 1, name: '张三' },
{ id: 2, name: '李四' }
];
app.get('/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const user = users.find(u => u.id === userId);
if (!user) return res.status(404).json({ error: "用户不存在" });
res.json(user);
});
app.listen(4000, () => {
console.log("用户服务运行在 4000 端口");
});
订单服务(order-service.js):
const express = require('express');
const axios = require('axios');
const app = express();
app.get('/orders/:userId', async (req, res) => {
const userId = req.params.userId;
// 调用用户服务获取用户信息(模拟服务间调用)
const response = await axios.get(`http://localhost:4000/users/${userId}`);
const user = response.data;
// 简化订单逻辑
res.json({
user,
orders: ['iPhone 14', 'AirPods']
});
});
app.listen(5000, () => {
console.log("订单服务运行在 5000 端口");
});
运行这两个服务:
node user-service.js
node order-service.js
访问:
http://localhost:4000/users/1http://localhost:5000/orders/1
你会发现订单服务可以自动去调用用户服务的信息。
✅ 这就是典型的微服务架构:各自独立,又能互相协作。
3️⃣ 云原生架构(Cloud Native Architecture)
一句话解释: 基于云计算平台(如阿里云、AWS),采用容器化部署和自动化运维的新一代架构。
为什么需要它?
- 支持大规模弹性扩容(高峰期自动增加服务器)
- 提升稳定性(故障自愈能力强)
- 更好的资源利用率
主要组成部分(通俗版):
| 组件名称 | 作用描述 |
|---|---|
| 容器(Docker) | 把应用打包成标准“盒子”,便于部署 |
| 编排(Kubernetes) | 自动管理容器运行,实现自动扩缩容、故障恢复 |
| DevOps | 自动化测试、构建、部署流程 |
示例:将我们的微服务打成 Docker 容器
Dockerfile 文件示例(针对用户服务):
# 使用官方 Node.js 镜像作为基础镜像
FROM node:18
# 创建工作目录
WORKDIR /app
# 复制 package.json 并安装依赖
COPY package*.json ./
RUN npm install
# 复制源码
COPY . .
# 暴露端口
EXPOSE 4000
# 启动命令
CMD ["node", "user-service.js"]
构建并运行容器:
docker build -t user-service .
docker run -p 4000:4000 user-service
同样地,你可以为订单服务也制作一个 Docker 容器,并通过 Kubernetes 进行编排,我们将在下一节继续学习这部分内容。
✅ 你现在拥有了一个可以在云平台上部署的容器化服务了。
实战项目:一步步打造属于你的图书商城后端
现在我们来动手做一个简单的项目:图书商城后端系统。
✅ 项目要求:
- 包含用户注册、登录功能
- 商品展示
- 订单提交
- 使用微服务架构 + Docker 容器化
Step 1:创建用户服务(User Service)
新建 user-service 目录,放入下面的代码:
const express = require('express');
const app = express();
app.use(express.json());
const users = [];
app.post('/register', (req, res) => {
const newUser = {
id: Date.now(),
username: req.body.username,
password: req.body.password
};
users.push(newUser);
res.json(newUser);
});
app.post('/login', (req, res) => {
const user = users.find(u => u.username === req.body.username &&
u.password === req.body.password);
if (!user) return res.status(401).json({ error: "用户名或密码错误" });
res.json({ message: "登录成功", user });
});
app.listen(3001, () => {
console.log("用户服务运行在 3001 端口");
});
Step 2:创建商品服务(Book Service)
新建 book-service 目录,放入下面的代码:
const express = require('express');
const app = express();
const books = [
{ id: 1, name: 'JavaScript入门', price: 39 },
{ id: 2, name: 'Python编程', price: 59 }
];
app.get('/books', (req, res) => {
res.json(books);
});
app.listen(3002, () => {
console.log("图书服务运行在 3002 端口");
});
Step 3:创建订单服务(Order Service)
新建 order-service 目录,代码如下:
const express = require('express');
const axios = require('axios');
const app = express();
app.post('/order', async (req, res) => {
const { userId, bookId } = req.body;
// 查询用户是否存在
try {
const userRes = await axios.get(`http://localhost:3001/users/${userId}`);
const bookRes = await axios.get(`http://localhost:3002/books`);
const book = bookRes.data.find(b => b.id === bookId);
if (!book) return res.status(400).json({ error: "书籍不存在" });
res.json({
message: "下单成功",
user: userRes.data,
book
});
} catch (e) {
res.status(500).json({ error: "服务异常" });
}
});
app.listen(3003, () => {
console.log("订单服务运行在 3003 端口");
});
Step 4:启动所有服务
分别在各自的目录中运行:
node user-service.js
node book-service.js
node order-service.js
使用 Postman 发起以下请求:
注册用户:
- POST http://localhost:3001/register
- Body:
{ "username": "test", "password": "123456" }
登录用户:
- POST http://localhost:3001/login
- Body:
{ "username": "test", "password": "123456" }
查看书籍:
下单:
- POST http://localhost:3003/order
- Body:
{ "userId": 1, "bookId": 1 }
✅ 成功完成!恭喜你完成了基于微服务架构的图书商城后端!
常见问题答疑
Q1:什么是 RESTful API?
RESTful API 是一种标准的接口设计风格,主要用于客户端(前端/APP)和后端之间的通信。
例如:
GET /books表示获取书籍列表POST /books表示新增一本书籍
它的核心思想是:通过 HTTP 方法(GET、POST、PUT、DELETE)对资源进行操作。
Q2:微服务之间如何安全通信?
常见的做法包括:
- 使用 Token 或 JWT 做身份验证
- 使用服务注册中心(如 Consul、Eureka)
- 使用 API Gateway 统一入口控制权限
初学者可以从添加 Token 认证开始练习。
Q3:Docker 容器和虚拟机有什么区别?
| 特性 | Docker 容器 | 虚拟机 VM |
|---|---|---|
| 启动速度 | 极快 | 较慢 |
| 资源占用 | 轻量 | 占用多(模拟完整系统) |
| 共享主机内核 | 是 | 否(有自己的操作系统内核) |
如果你只是想跑一个后端服务,Docker 是首选。
学习建议:下一步怎么学?
🧩 建议的学习路径如下:
| 阶段 | 推荐学习内容 |
|---|---|
| 初级 | 学习 Express、Node.js、MongoDB |
| 中级 | 学习微服务原理 + 使用 Docker |
| 高级 | 学习 Kubernetes 编排 + DevOps 流程 |
| 专家 | 掌握分布式系统设计、服务治理、监控系统 |
📘 推荐学习资料
- 《Node.js权威指南》——适合打基础
- Docker 官方文档
- Kubernetes 官方中文社区
- 《云原生应用架构》(ThoughtWorks 出品)
总结

我们从一个最简单的单体架构讲起,逐步介绍了:
- 单体架构的工作方式
- 如何拆分为微服务架构
- 如何容器化并部署为云原生架构
并通过实战项目帮助你动手实践,掌握了基础的后端架构知识。
希望你能继续深入学习下去,在未来的某一天,成为真正的架构师!
如有问题欢迎留言提问 📬,祝你学习愉快!

评论 0