后端架构演进:从单体到云原生(面向零基础初学者)
开篇:什么是后端架构?为什么要学它?

在互联网世界中,你每天使用的应用(比如微信、淘宝、抖音)背后都有一个强大的“大脑”——后端系统。这个系统负责处理数据、接收请求、执行逻辑并返回结果。
而后端架构,就是我们搭建这个“大脑”的方式。随着互联网的飞速发展,后端架构也经历了多个阶段的演变:从最简单的“一个程序搞定一切”,到现在可以自动伸缩、高可用、分布式的“云原生架构”。
这篇文章会带你从零开始,了解:
- 什么是后端架构
- 它经历了哪些变化
- 每种架构怎么工作
- 动手写代码体验每一种架构
即使你是完全没有编程经验的小白,也能轻松入门!
环境准备:我们需要装什么?

为了能动手实践,我们要先准备好开发环境。我们主要使用以下工具和技术栈:
| 工具 | 作用 |
|---|---|
| Node.js + Express.js | 构建后端服务(轻量、适合新手) |
| Docker | 模拟容器化部署 |
| Minikube / Kubernetes | 演示云原生架构 |
| VS Code | 编写代码 |
步骤 1:安装 Node.js
去官网下载安装包:https://nodejs.org/
选择 LTS 版本,按照提示一步步安装即可。
安装完成后,在命令行输入:
node -v
npm -v
如果能看到版本号,说明安装成功。
步骤 2:安装 Express 脚手架(可选)
Express 是一个用于构建 Web 应用的框架,非常适合学习后端。
npm install express-generator -g
express --version
步骤 3:安装 Docker 和 Minikube
- Docker官网:https://www.docker.com/
- Minikube官网:https://minikube.sigs.k8s.io/docs/start/
这两个工具在后面的云原生部分才会用到,如果你是刚开始学习,可以暂时跳过安装,等需要用到时再回来补充。
核心概念:后端架构的几个关键阶段

我们把后端架构的发展分为以下几个阶段:
- 单体架构(Monolithic)
- 垂直拆分架构(Vertical Split)
- 微服务架构(Microservices)
- 云原生架构(Cloud Native)
下面我们将逐一讲解,每个阶段都会给出具体的例子和代码。
阶段一:单体架构(Monolithic)
介绍
单体架构就像一栋房子,所有功能都住在同一个房子里:客厅(用户管理)、厨房(订单处理)、书房(支付接口)都在一起。
早期的软件大多采用这种结构,简单易上手,但缺点是:一旦一个模块出错,整个系统都可能崩溃;维护困难、难以扩展。
示例项目:创建一个学生管理系统
我们用 Node.js + Express 来做一个简单的学生信息增删改查服务。
创建项目目录
mkdir student-service
cd student-service
npm init -y
npm install express body-parser
app.js 文件内容如下:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
let students = [];
// 获取所有学生
app.get('/students', (req, res) => {
res.json(students);
});
// 添加学生
app.post('/students', (req, res) => {
const newStudent = req.body;
students.push(newStudent);
res.status(201).json(newStudent);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
运行服务:
node app.js
访问 http://localhost:3000/students 可以看到初始为空的学生列表。
你可以用 Postman 发送 POST 请求添加学生对象,例如:
{
"id": 1,
"name": "小明",
"age": 22
}
这就是一个完整的后端服务!虽然功能简单,但它的结构就是一个典型的单体架构。
阶段二:垂直拆分架构
介绍
随着系统越来越复杂,我们会把原来的大房子拆成几栋楼:一栋只管用户、一栋只处理订单、一栋专门做支付。这叫做垂直拆分。
优点:各模块独立,更容易维护。
缺点:依然可能存在重复功能,部署不够灵活。
实践:将单体项目拆分为两个子系统
假设我们现在要把上面的服务拆成两部分:
- 学生信息管理 (
/student) - 成绩信息管理 (
/score)
我们可以分别建立两个项目,也可以在一个项目里分模块实现。
我们在同一项目中按功能划分目录:
/student-service
├── studentRouter.js
├── scoreRouter.js
├── app.js
studentRouter.js:
const express = require('express');
const router = express.Router();
let students = [];
router.get('/', (req, res) => {
res.json(students);
});
router.post('/', (req, res) => {
const newStudent = req.body;
students.push(newStudent);
res.status(201).json(newStudent);
});
module.exports = router;
scoreRouter.js:
const express = require('express');
const router = express.Router();
let scores = [];
router.get('/', (req, res) => {
res.json(scores);
});
router.post('/', (req, res) => {
const newScore = req.body;
scores.push(newScore);
res.status(201).json(newScore);
});
module.exports = router;
修改 app.js 引入两个路由:
const express = require('express');
const bodyParser = require('body-parser');
const studentRouter = require('./studentRouter');
const scoreRouter = require('./scoreRouter');
const app = express();
app.use(bodyParser.json());
app.use('/students', studentRouter);
app.use('/scores', scoreRouter);
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
这样就完成了垂直拆分。虽然还在一个项目里,但功能逻辑已经解耦。
阶段三:微服务架构(Microservices)
介绍
在微服务架构中,每一个功能都是一个独立服务,各自部署、独立运行,并通过网络进行通信。
比如:学生服务、成绩服务、登录服务……各自运行在不同的服务器上,通过 HTTP 或消息队列互相调用。
优点:
- 模块之间高度解耦
- 故障隔离
- 易于扩展
缺点:
- 运维复杂
- 接口通信成本高
实践:将学生服务与成绩服务拆为两个独立服务
我们新建两个项目:
学生服务 student-service:
文件:student/app.js
const express = require('express');
const app = express();
let students = [];
app.get('/students', (req, res) => {
res.json(students);
});
app.post('/students', (req, res) => {
const student = req.body;
students.push(student);
res.status(201).json(student);
});
app.listen(3000, () => {
console.log('Student Service running at port 3000');
});
启动学生服务:
node student/app.js
成绩服务 score-service:
文件:score/app.js
const express = require('express');
const app = express();
let scores = [];
app.get('/scores', (req, res) => {
res.json(scores);
});
app.post('/scores', (req, res) => {
const score = req.body;
scores.push(score);
res.status(201).json(score);
});
app.listen(3001, () => {
console.log('Score Service running at port 3001');
});
启动成绩服务:
node score/app.js
现在学生和成绩服务就完全独立了,分别监听不同端口。它们可以通过 HTTP 直接调用彼此,实现更复杂的业务流程。
阶段四:云原生架构(Cloud Native)
介绍
云原生并不是某种新技术,而是一种思想,核心在于:
- 使用容器技术(如 Docker)打包应用
- 使用编排工具(如 Kubernetes)管理多个容器
- 支持自动扩缩容、高可用、自愈机制
它能让我们的服务像云一样灵活地分布在各个节点中,自动应对流量高峰、硬件故障等情况。
实践:用 Docker 构建学生服务镜像
第一步:编写 Dockerfile
在 student/ 目录下新建 Dockerfile:
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
第二步:构建镜像
cd student
docker build -t student-service .
第三步:运行容器
docker run -p 3000:3000 student-service
这样我们就把学生服务封装进了 Docker 容器。
扩展:Kubernetes 部署
如果你想进一步尝试云原生,可以用 Minikube 创建本地 Kubernetes 集群,并部署上面的容器。不过这部分对新手来说稍微复杂一点,建议后续深入学习后再尝试。
实战项目:跟着教程完成一个云原生小程序
接下来我们整合前面学到的所有知识点,来做一个“图书管理系统”的完整演示项目,涵盖从单体到微服务再到容器化部署的全过程。
项目目标:
- 用户可以添加、删除、查询书籍
- 项目最终部署到 Docker 容器中运行
技术栈:
- Node.js + Express
- MongoDB 作为数据库
- Docker 作为部署工具
实现步骤:
1. 初始化项目
mkdir book-service
cd book-service
npm init -y
npm install express mongoose
2. 编写主程序 app.js
const express = require('express');
const mongoose = require('mongoose');
const app = express();
app.use(express.json());
// 连接 MongoDB(需要提前安装 MongoDB)
mongoose.connect('mongodb://localhost/bookdb', { useNewUrlParser: true, useUnifiedTopology: true });
const Book = mongoose.model('Book', {
title: String,
author: String
});
// 获取所有书籍
app.get('/books', async (req, res) => {
const books = await Book.find();
res.json(books);
});
// 添加书籍
app.post('/books', async (req, res) => {
const book = new Book(req.body);
await book.save();
res.status(201).json(book);
});
app.listen(3000, () => {
console.log('Book service running on port 3000');
});
3. 创建 Dockerfile
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
4. 构建并运行容器
docker build -t book-service .
docker run -p 3000:3000 book-service
现在你就可以用浏览器或 Postman 来测试你的图书服务啦!
常见问题解答(FAQ)
1. 后端和前端有什么区别?
- 前端:处理你在网页上看到的内容(按钮、颜色、布局),使用 HTML/CSS/JavaScript。
- 后端:处理数据和逻辑(比如你点击按钮后的动作),使用 Node.js、Java、Python 等。
2. 零基础可以学会吗?
当然可以!只要你愿意动手、不怕错误,就能逐步掌握。遇到不懂的地方多问、多查资料、多敲代码。
3. 我该学哪门语言?
推荐从 Node.js 或 Python 入门,语法简单、社区活跃,容易找到学习资源。
4. 微服务是不是一定要用 Kubernetes?
不一定。Kubernetes 更适用于大型项目。如果你刚起步,先掌握单体和服务拆分是最重要的。
5. 如何练习更多项目?
GitHub 上有很多开源项目,或者你可以自己设计小系统,比如:
- 记账系统
- 网站留言墙
- 任务管理工具
- 在线投票系统
这些都可以练手哦!
学习建议:下一步该怎么学?

当你掌握了本文讲的内容之后,下一步可以往这些方向拓展:
方向一:深入后端开发技能
- 学习数据库(MySQL、MongoDB)
- 掌握 RESTful API 设计
- 学习中间件(Redis、RabbitMQ)
- 学习身份验证(JWT)
方向二:深入云原生领域
- 学习 Kubernetes 基础操作
- 学习 Helm Chart 包管理
- 了解 CI/CD 流程(Jenkins、GitHub Actions)
- 了解服务网格(Istio)
方向三:参与实战项目
- 加入开源项目(GitHub)
- 拿着简历投实习 / 初级岗位
- 自己做一个完整网站上线(可部署到 Vercel、Heroku、腾讯云等平台)
结语

从单体到云原生,后端架构的演化让我们能够构建更强大、稳定、高效的系统。希望这篇教程能帮助你迈出第一步,理解这些术语背后的原理,并亲手实践出来。
记住一句话:“程序员的成长=持续实践+不断总结”。
继续加油,未来你就是那个构建系统“大脑”的人!🚀

评论 0