后端架构演进:从单体到云原生 —— 零基础教程
开篇:后端架构是什么?为什么要了解它的演变?

对于刚接触编程的小白来说,"后端架构演进"这个词听起来可能有点高大上。但其实它并不难理解。
通俗点讲:
- “后端”就是网站或应用背后处理数据、逻辑和服务的那一部分程序。
- “架构”指的是这些程序是如何组织的、怎么搭配使用的。
- “演进”就是指它们是怎样一步步发展变化的。
就像盖房子一样:
- 一开始人们住在小木屋里(单体架构);
- 后来人多了住不下,就分成了客厅、卧室、厨房(微服务);
- 现在我们住在智能楼宇里,有中央空调、自动报警系统等(云原生)。
学习后端架构的演变过程,不仅可以帮助你理解“现代网站是怎么工作的”,更能为将来深入做项目打下坚实的基础!
环境准备:搭建属于你的开发环境

在开始学习之前,你需要先准备好开发环境。以下是最基本的要求:
必备工具列表
| 工具名称 | 作用说明 |
|---|---|
| Node.js | 运行 JavaScript 的后端环境 |
| NPM / Yarn | 安装和管理依赖包 |
| Git | 版本控制与代码同步 |
| VSCode | 推荐的轻量级开发编辑器 |
| Docker | 构建容器化应用 |
| Kubernetes(可选) | 高阶内容,后续用得到 |
安装步骤(以 Windows 为例)
安装 Node.js
- 访问官网:https://nodejs.org
- 下载并安装 LTS(长期支持版本)
- 检查是否安装成功:
node -v npm -v
安装 VSCode
- 访问 https://code.visualstudio.com,下载并安装
- 安装后可安装插件如:Prettier, ESLint(用于美化和检查代码)
安装 Git
- 下载地址:https://git-scm.com
- 安装完成后执行:
git --version
安装 Docker Desktop
- 官网:https://www.docker.com/products/docker-desktop/
- 安装完成后运行 Docker,并在终端执行:
docker --version
完成上述操作后,你就可以开始写第一个后端程序啦!
核心概念:初识后端架构的几个关键词

为了让你更好地理解后端的发展历程,我们需要先认识一些核心术语。下面我会尽量用通俗的语言解释清楚每一个概念。
1. 单体架构(Monolithic)
类比:一座平房,所有功能都在一个屋子里,结构简单易懂。
特点:
- 所有功能模块写在一个项目中
- 容易部署,适合小项目
- 缺点是维护困难,扩展性差
示例代码(Node.js + Express):
const express = require('express');
const app = express();
app.get('/user', (req, res) => {
res.send("获取用户信息");
});
app.get('/order', (req, res) => {
res.send("获取订单信息");
});
app.listen(3000, () => {
console.log("服务启动于 http://localhost:3000");
});
在这个例子中,“用户”和“订单”的处理都放在了同一个 app.js 文件中,这就是典型的单体架构。
2. 微服务架构(Microservices)
类比:把一间大房子拆成多个独立房间,每个房间专注完成自己的任务。
特点:
- 将复杂应用拆分成多个独立的小服务
- 可以分别部署、更新和维护
- 更适合大型项目
想象一下,我们将上面的代码拆成两个文件分别运行:
user-service.js
// 用户服务
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send("User Service Running...");
});
app.listen(4000);
order-service.js
// 订单服务
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send("Order Service Running...");
});
app.listen(5000);
你可以通过访问 http://localhost:4000 和 http://localhost:5000 来访问不同的微服务。
3. 容器化与Docker
类比:给每个房间装一个集装箱外壳,方便搬运和部署。
什么是 Docker?
- 是一个容器化平台
- 把应用程序及其依赖打包在一起,像一个“盒子”一样到处运行
编写一个简单的 Dockerfile 示例:
# 使用 Node.js 官方镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 复制 package.json 和 index.js
COPY package.json .
COPY index.js .
# 安装依赖
RUN npm install
# 启动服务器
CMD ["node", "index.js"]
运行命令构建并启动容器:
docker build -t my-app .
docker run -p 3000:3000 my-app
现在你写的代码就“被包裹在集装箱里”,可以在任何环境一键部署!
4. 云原生(Cloud Native)
类比:你的房子不仅装上了自动空调,还能自己调节温度、自我修复故障。
云原生的核心要素包括:
- 微服务(已介绍)
- 容器化(Docker)
- 自动编排(Kubernetes)
- DevOps(自动化流程)
- 监控与弹性伸缩
虽然 Kubernetes 学起来比较复杂,但它是云原生的核心技术之一。我们先不深入学习,但在后面可以逐步掌握。
实战项目:一步一步做一个小型电商后台系统
我们要实现一个最简电商后台服务,包含两个微服务:
- 用户服务(查询用户信息)
- 商品服务(展示商品列表)
第一步:创建用户服务
新建一个文件夹 user-service,添加如下文件:
package.json
{
"name": "user-service",
"version": "1.0.0",
"main": "index.js",
"dependencies": {
"express": "^4.18.2"
}
}
index.js
const express = require('express');
const app = express();
app.get('/users', (req, res) => {
res.json([
{ id: 1, name: '张三' },
{ id: 2, name: '李四' }
]);
});
app.listen(4000, () => {
console.log("用户服务运行在 4000 端口");
});
运行命令:
npm install
node index.js
访问地址:http://localhost:4000/users 应该能看到 JSON 格式返回的用户列表。
第二步:创建商品服务
新建一个文件夹 product-service,同样添加:
package.json
{
"name": "product-service",
"version": "1.0.0",
"main": "index.js",
"dependencies": {
"express": "^4.18.2"
}
}
index.js
const express = require('express');
const app = express();
app.get('/products', (req, res) => {
res.json([
{ id: 1, name: 'iPhone手机' },
{ id: 2, name: 'MacBook Pro 笔记本' }
]);
});
app.listen(5000, () => {
console.log("商品服务运行在 5000 端口");
});
运行命令:
npm install
node index.js
访问地址:http://localhost:5000/products 查看商品数据。
第三步:使用 Docker 封装你的服务
还记得我们前面讲的 Docker 吗?现在让我们试着把这两个服务用容器跑起来。
创建 Dockerfile
假设你在 user-service 目录下,新增文件 Dockerfile:
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["node", "index.js"]
然后构建并运行:
docker build -t user-service .
docker run -p 4000:4000 user-service
重复这个过程对 product-service 做一遍即可。这样你就有了两个独立运行的容器化的微服务!
常见问题:新手常遇到的问题及解决方法
以下是初学者常犯的一些错误,以及对应的解决方案:
1. 为什么我的 Node.js 无法运行?
✅ 解决方案:
- 检查是否安装成功:
node -v - 确保文件路径正确,没有拼写错误
- 检查防火墙设置是否阻止本地端口
2. 我的 Docker 不知道哪里出错了怎么办?
✅ 解决方案:
- 查看日志:
docker logs <容器ID> - 查看当前运行容器:
docker ps - 检查端口是否冲突,尝试更换端口号
3. 微服务之间怎么互相调用呢?
✅ 初级方式:
- 用 HTTP 请求相互访问(例如用 axios 发起请求)
示例:
const axios = require('axios');
async function fetchUsers() {
const response = await axios.get('http://localhost:4000/users');
return response.data;
}
fetchUsers().then(console.log);
4. 为什么我不能直接把所有代码写在一起?
✅ 回答:
- 写在一起当然可以,特别是在小项目时更容易管理。
- 但随着项目变大,代码会变得臃肿、难以维护,此时微服务就派上用场了。
学习建议:下一步你应该学什么?
恭喜你完成了本次入门实践!你现在具备了从零开始编写后端微服务的能力。接下来你可以继续向更高级的方向进阶:
学习路线推荐:
掌握更多 Node.js 技能
- 如何连接数据库(MySQL/PostgreSQL/MongoDB)
- 使用 Express 中间件优化接口
- 用 JWT 实现登录认证系统
深入了解 Docker 和容器编排
- 学习 Docker Compose 统一管理多容器
- 尝试使用 Kubernetes(k8s)管理集群
实战完整项目
- 构建博客系统、电商平台、CMS等内容管理系统
- 学会前后端分离协作(前端可用 Vue 或 React)
部署上线 & CI/CD 自动化流程
- 使用 GitHub + Jenkins/Docker Hub 实现自动化部署
- 学会使用云平台如 AWS、阿里云部署项目
结语:后端的世界正在变化,而你也正在加入
从单体到微服务,再到云原生,每一步都是为了让软件更加灵活、高效、可靠。作为一名零基础的新手,你现在已经迈出了第一步。
记住一句话:
“不是所有事情都能一下子学会,但只要每天进步一点点,坚持走下去,总有一天你会站在更高的山峰上。”
加油!你已经开始成为真正的开发者了!

评论 0