后端架构演进:从单体到云原生 —— 面向零基础新手的实践教程
一、开篇:什么是后端架构?为什么要关注它的演进?

你有没有想过,当你用手机或电脑访问一个网站(比如淘宝、微博)时,背后是怎么工作的呢?
虽然你看不到这些过程,但有一个很重要的部分在默默运行——后端服务。
简单来说,后端就是处理用户请求的地方。例如:
- 用户注册 → 后端保存用户名和密码
- 搜索商品 → 后端查找数据库并返回结果
- 发送聊天消息 → 后端接收、转发并存储消息
而“后端架构”指的就是这个系统的结构方式。它决定了系统是否高效、稳定、能否支持大量用户同时在线,以及是否容易维护和升级。
过去我们常用的是单体架构,现在更流行微服务+云原生架构,它们各有优缺点。
本篇文章就带你一步一步了解这些架构的发展历程,并动手写一个简单的项目来体验这种变化。
二、环境准备:搭建你的第一个开发环境

为了更好地理解内容,我们需要准备以下工具:
所需工具列表:
| 工具名称 | 功能说明 |
|---|---|
| Node.js | 运行JavaScript程序(用于构建后端API) |
| NPM / Yarn | 包管理器,用来安装Node模块 |
| VSCode | 编辑代码的强大免费编辑器 |
| Postman | 测试接口的可视化工具 |
| Docker | 创建容器(模拟微服务部署的基础) |
安装步骤简述:
安装 Node.js 和 NPM
- 前往 nodejs.org
- 下载 LTS 版本(适合初学者)
- 安装完成后,在命令行中输入以下命令验证是否成功:
如果输出版本号,表示安装成功!node -v npm -v
安装 VSCode
- 下载地址:code.visualstudio.com
- 安装完毕后打开即可使用。
安装 Postman
- 下载地址:postman.com/downloads
- 可以直接使用本地客户端或网页版测试 API。
安装 Docker
- Windows/Mac 用户推荐安装 Docker Desktop
- Linux 用户可以使用
apt install docker.io或其他包管理器安装
✅ 小提示:如果遇到网络问题,可以用国内镜像源安装 Node.js 和 Docker,如 npmmirror.com 和阿里云 Docker Hub 镜像。
三、核心概念详解:让你不再害怕专业术语

1. 单体架构(Monolithic Architecture)
简介
就像是一口锅里做一道菜,所有的功能都在同一个应用里完成。例如:
- 用户登录
- 商品展示
- 购物车功能
- 订单下单
这些都写在一个项目里。早期的大型网站基本都是这么做的。
优点
- 开发简单,部署方便
- 不需要复杂的分布式系统知识
缺点
- 当项目变大,代码臃肿、难以维护
- 修改一个小功能可能要重新部署整个系统
- 无法实现灵活扩展(比如突然某个功能特别热)
示例代码
我们先用 Node.js 写一个最简单的单体服务:
// 文件名:app.js
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url === '/hello') {
res.end("Hello from Monolith!");
} else {
res.end("Page not found");
}
});
server.listen(3000, () => {
console.log("Server running on port 3000");
});
在终端运行:
node app.js
然后打开浏览器访问 http://localhost:3000/hello 就能看到输出了。
🎉 成功运行了一个最简单的后端服务!
2. 微服务架构(Microservices)
简介
把原来的“一口锅”拆分成多个小锅,每个锅只负责一种功能。比如:
- 一个锅专门处理用户信息(用户服务)
- 一个锅处理订单(订单服务)
- 一个锅处理商品展示(商品服务)
这样的好处是:可以单独更新/重启某一部分,不影响其他功能。
优点
- 高度解耦,易于维护
- 可独立部署、升级某一个服务
- 更好地利用资源(某些功能需求量大可多部署几份)
缺点
- 技术复杂度高
- 需要解决服务通信、数据一致性等问题
- 对团队协作要求更高
示例代码
我们写两个微服务:用户服务(user-service)、订单服务(order-service)
user-service.js:
const http = require('http');
const PORT = 3001;
const server = http.createServer((req, res) => {
res.end("User Service: User data here");
});
server.listen(PORT, () => {
console.log(`User service listening at ${PORT}`);
});
order-service.js:
const http = require('http');
const PORT = 3002;
const server = http.createServer((req, res) => {
res.end("Order Service: Order info here");
});
server.listen(PORT, () => {
console.log(`Order service listening at ${PORT}`);
});
分别启动两个服务:
node user-service.js
node order-service.js
现在你可以通过两个不同的端口访问这两个服务啦!是不是有点“微服务”的意思了?
3. 云原生架构(Cloud Native)
简介
这是微服务的进一步发展,强调在云计算环境下工作的方式,包括:
- 使用 容器化技术(如 Docker)
- 采用 Kubernetes 来管理容器
- 支持自动扩展、持续集成/部署(CI/CD)
一句话:让系统更适合云端部署与自动管理
关键技术关键词
- Docker:容器打包工具
- Kubernetes(k8s):容器编排平台
- CI/CD:自动化部署流水线
- API网关(Gateway):统一入口
- 日志监控:观测系统状态
示例:用 Docker 启动服务
给刚刚写的用户服务添加 Dockerfile:
FROM node:16
WORKDIR /usr/src/app
COPY user-service.js .
EXPOSE 3001
CMD ["node", "user-service.js"]
构建镜像:
docker build -t user-service .
运行容器:
docker run -p 3001:3001 user-service
现在你已经用 Docker 把你的服务打包成一个“盒子”,无论在哪台机器上都可以运行它!
四、实战项目:从单体到微服务再到容器化部署
我们通过一个完整的例子,逐步展示如何将一个功能从单体迁移到微服务,并最终容器化部署。
目标功能:用户注册 + 获取用户信息
Step 1:单体实现
创建文件 single-app.js:
const http = require('http');
const users = [];
const server = http.createServer((req, res) => {
const url = req.url;
if (url === '/register' && req.method === 'POST') {
let body = '';
req.on('data', chunk => body += chunk.toString());
req.on('end', () => {
const { username, email } = JSON.parse(body);
users.push({ username, email });
res.end("Registered successfully");
});
} else if (url === '/users') {
res.end(JSON.stringify(users));
} else {
res.end("Page Not Found");
}
});
server.listen(3000, () => {
console.log("Single App Running...");
});
测试方法:
- 使用 Postman 发起 POST 请求
/register,参数为 JSON:{ "username": "tom", "email": "tom@example.com" } - 再访问 GET
/users查看注册用户列表
✅ 到这一步为止,你已经掌握了一个完整的单体服务的功能实现。
Step 2:拆分为微服务
我们将用户相关的逻辑拆出来成为一个服务。
新建目录 user-service,结构如下:
user-service/
├── index.js
└── Dockerfile
index.js:
const http = require('http');
const users = [];
const server = http.createServer((req, res) => {
if (req.url === '/register' && req.method === 'POST') {
let body = '';
req.on('data', chunk => body += chunk.toString());
req.on('end', () => {
const { username, email } = JSON.parse(body);
users.push({ username, email });
res.end("Registered successfully");
});
} else if (req.url === '/users') {
res.end(JSON.stringify(users));
} else {
res.end("Not found");
}
});
server.listen(3001, () => {
console.log("User microservice running");
});
启动服务:
cd user-service
node index.js
此时你可以像之前一样用 Postman 访问 /register 和 /users 接口。
Step 3:容器化部署
接着上面的目录结构加上 Dockerfile:
FROM node:16
WORKDIR /app
COPY . .
EXPOSE 3001
CMD ["node", "index.js"]
构建与运行:
docker build -t user-service .
docker run -d -p 3001:3001 user-service
至此,我们成功把一个单一的功能,拆成了独立的服务,并用 Docker 容器进行部署。
🎉 微服务 + 容器化的入门就完成了!
五、常见问题解答(FAQ)
Q1:为什么不用一开始就用微服务?
A:微服务确实有很多优势,但它也带来更高的复杂性。对于初期功能少、团队小的项目,建议先用单体开发,等业务增长后再拆分。
Q2:我能不能不学 Docker?
A:当然可以,但 Docker 是目前主流的部署方式。学会它可以提高你项目的部署效率和稳定性,特别是在企业环境中非常有用。
Q3:微服务之间怎么互相调用?
A:可以使用 HTTP REST 接口、gRPC、或者消息队列(如 RabbitMQ、Kafka)。后面我们会详细讲。
Q4:学习路线太长怎么办?什么时候能做出完整项目?
A:不要贪多。先从单体开始,跑通所有流程;再一步步拆出服务;最后加入容器化和部署方案。每一步都有明确目标即可。
六、学习建议:下一步该怎么走?
恭喜你完成本次《从单体到云原生》的学习旅程!
接下来建议继续深入的方向包括:
学习路径建议:
- ✅ 熟悉 RESTful API 的规范写法(GET、POST、PUT、DELETE)
- 🔁 学习 Express/Koa 框架简化 Web 服务开发
- 🗄️ 学习如何使用 MySQL / MongoDB 存储数据
- 📦 深入 Docker 技术(卷、网络、镜像优化)
- 🧬 学习 Kubernetes 基础(Pod、Deployment、Service)
- 🌐 接触服务发现 & 负载均衡(如 Consul、Nginx)
- 🛠️ 实践 CI/CD 流程(GitHub Actions / Jenkins)
- 💡 探索日志集中管理(ELK 栈)和链路追踪(OpenTelemetry)
结语
从单体架构到云原生,是我们走向现代后端工程的重要一步。即使你是零基础的新手,只要一步步跟着写、跟着练,也能快速上手。
下期我们还将继续带大家深入每一个技术细节,比如“如何用 Express 搭建真正的用户管理系统”、“Kubernetes 如何管理多个服务”。
如果你觉得这篇文章有帮助,请收藏、分享,也欢迎留言提问哦!我们一起进步 👨💻👩💻
字数统计:约 2805 字

评论 0