后端架构演进:从单体到云原生 —— 面向初学者的教程

事务别乱提交
2025-06-19 16:53
阅读 281

一、开篇:后端架构是什么?我们为什么要关注它?

一、开篇:后端架构是什么?我们为什么要关注它?

大家好!你可能是刚刚接触编程的新手,也可能是对“后端”这个概念还比较模糊的人。别担心,这一节我会用最通俗的语言来解释:

什么是后端?

后端指的是网站或应用中运行在服务器上的部分。与前端(你在网页上看到的内容和交互)不同,后端主要负责处理数据、逻辑运算、数据库交互、用户身份验证等工作。

比如你登录一个网站时,输入用户名和密码后,这些信息会被发送到服务器去进行验证,这个验证的过程就是由后端完成的。

什么是后端架构?

架构就像是“结构设计”,它决定了程序应该如何组织、模块之间如何协作、以及如何扩展。你可以把它理解成一座房子的设计图——好的架构让你的房子更稳固、更容易扩建。

为什么我们要学习后端架构的演变?

刚开始写后端程序的时候,通常是一个简单的单体应用,也就是所有代码都放在一起。但随着业务越来越复杂、用户越来越多,就需要升级架构来支持更高的性能和更好的维护性。

本教程会带你从最基础的单体架构一步步过渡到现代化的云原生架构,每一步都会结合代码示例,循序渐进地讲解。


二、环境准备:搭建你的第一个后端开发环境

二、环境准备:搭建你的第一个后端开发环境

我们需要先准备好开发工具,才能开始编写代码。

所需工具清单:

  • Node.js:JavaScript 的服务器端运行环境
  • Express.js:基于 Node.js 的轻量级框架
  • MongoDB:文档型数据库,适合初学者
  • Postman:API 测试工具

安装步骤:

1. 安装 Node.js

访问官网:https://nodejs.org
下载 LTS 版本(长期支持版本),安装过程很简单,下一步下一步即可。

检查是否安装成功,在终端(Windows 用户用命令提示符)输入:

node -v
npm -v

如果有版本号输出,说明安装成功。

2. 安装 MongoDB

Mac 用户可以用 Homebrew:

brew install mongodb-community

Windows 用户推荐使用 MongoDB Atlas,这是它的云服务版,免安装。

创建免费账户后,选择“Build a Cluster”,配置完成后获取连接字符串备用。

3. 安装 Postman

前往 https://postman.com 下载并安装桌面客户端。


三、核心概念解析:从单体架构讲起

现在我们来看看几种常见的后端架构类型,并尝试用最简单的话描述它们。

1. 单体架构(Monolithic Architecture)

就像是一锅炖菜,所有的内容都混在一起,虽然简单,但很难拆解。

特点:

  • 所有功能集中在一个项目里
  • 开发部署快速,适合小型项目
  • 不利于团队协作和后期扩展

适用场景:

  • 初创阶段的小型项目
  • 功能相对固定的系统

代码示例:

我们先写一个简单的 Express 应用,用来创建用户和获取用户信息:

// app.js
const express = require('express');
const mongoose = require('mongoose');

const app = express();
app.use(express.json());

// 连接数据库(替换为自己的 MongoDB URI)
mongoose.connect('mongodb+srv://<username>:<password>@cluster0.example.mongodb.net/test', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

// 用户模型定义
const User = mongoose.model('User', new mongoose.Schema({
    name: String,
    age: Number
}));

// 创建用户的接口
app.post('/users', async (req, res) => {
    const user = new User(req.body);
    await user.save();
    res.send(user);
});

// 获取所有用户的接口
app.get('/users', async (req, res) => {
    const users = await User.find();
    res.send(users);
});

// 监听端口
app.listen(3000, () => {
    console.log('Server running on port 3000');
});

启动服务:

node app.js

然后打开 Postman,测试:

  • 发送 POST 请求到 http://localhost:3000/users,带上 JSON 数据如 { "name": "Tom", "age": 25 }
  • 然后发送 GET 请求查看所有用户

这是一个最简单的单体后端应用。接下来我们看看它是怎么升级的。


2. 分层架构(Layered Architecture)

就像是把炖菜分成了前菜、主菜和甜点,每一部分职责清晰。

目的:

  • 把数据访问、业务逻辑、接口展示分开
  • 更容易维护和协作

我们在上面的例子基础上做些优化,增加 routescontrollers 文件夹,把代码按功能拆开:

project/
│
├── app.js
├── routes/
│   └── userRoutes.js
├── controllers/
│   └── userController.js
└── models/
    └── userModel.js

models/userModel.js

const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
    name: String,
    age: Number
});

module.exports = mongoose.model('User', userSchema);

controllers/userController.js

const User = require('../models/userModel');

exports.createUser = async (req, res) => {
    const user = new User(req.body);
    await user.save();
    res.send(user);
};

exports.getAllUsers = async (req, res) => {
    const users = await User.find();
    res.send(users);
};

routes/userRoutes.js

const express = require('express');
const controller = require('../controllers/userController');

const router = express.Router();

router.post('/users', controller.createUser);
router.get('/users', controller.getAllUsers);

module.exports = router;

app.js

const express = require('express');
const mongoose = require('mongoose');
const userRouter = require('./routes/userRoutes');

const app = express();
app.use(express.json());

mongoose.connect('mongodb+srv://<username>:<password>@cluster0.example.mongodb.net/test', {
    useNewUrlParser: true,
    useUnifiedTopology: true
});

app.use('/', userRouter);

app.listen(3000, () => {
    console.log('Server running on port 3000');
});

这样代码就变得更有条理了。但这还不是最终形态,继续看下一节!


3. 微服务架构(Microservices Architecture)

类似于将一栋大楼分成多个独立房间,每个房间各自运作,也可以相互配合。

优点:

  • 每个服务可以单独开发、部署、扩展
  • 使用合适的技术栈处理不同问题
  • 更灵活的弹性伸缩能力

挑战:

  • 需要管理多个服务之间的通信
  • 增加了网络请求的复杂度
  • 部署成本更高

微服务不是一下子就能做出来的,这里只做一个简化模拟:我们把用户模块和服务模块分开放置,模拟两个服务。

假设我们现在有两个服务:

  • user-service:负责用户信息管理
  • order-service:负责订单信息管理

我们在 user-service 中暴露 API 接口供其他服务调用。

// user-service/app.js
const express = require('express');
const mongoose = require('mongoose');
const User = require('./models/userModel');

const app = express();
app.use(express.json());

mongoose.connect('mongodb+srv://<user>:<pass>@cluster0.example.mongodb.net/users', {});

app.post('/users', async (req, res) => {
    const user = new User(req.body);
    await user.save();
    res.send(user);
});

app.listen(3001, () => {
    console.log('User service running on port 3001');
});

另一个服务调用它:

// order-service/controllers/orderController.js
const axios = require('axios');

exports.createOrder = async (req, res) => {
    // 调用用户服务获取用户信息
    const userId = req.body.userId;
    try {
        const response = await axios.get(`http://localhost:3001/users/${userId}`);
        const user = response.data;

        // 处理订单逻辑...
        res.send({ message: 'Order created for user', user });
    } catch (error) {
        res.status(500).send({ error: 'Failed to fetch user' });
    }
};

这就是微服务的基础雏形了。


4. 云原生架构(Cloud Native Architecture)

类似于建一个智能化、自动化、可自我修复的大厦,能自适应各种天气和变化。

关键词:

  • Docker:容器技术,打包应用程序和依赖
  • Kubernetes (K8s):编排系统,管理多个容器
  • DevOps:持续集成/部署流程
  • 弹性扩容、故障恢复等

这部分内容较为复杂,适合进阶学习者。对于初学者来说,我们可以先了解 Docker 是什么,以及如何把它应用于我们的项目。

安装 Docker:

  • Windows/macOS:安装 Docker Desktop
  • Linux:使用包管理器安装

然后我们给上面的 user-service 添加 Docker 支持。

Dockerfile

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3001
CMD ["node", "app.js"]

构建并启动容器:

docker build -t user-service .
docker run -d -p 3001:3001 user-service

现在,我们的服务已经运行在容器里,可以随时迁移部署,这就是迈向云原生的第一步!


四、实战项目:创建一个多模块的后端应用

让我们一起实践一下前面提到的架构方式:从单体 → 分层 → 微服务的演变。

第一步:搭建单体应用(已完成)

请回到上文中的 单体架构 示例作为起点。

第二步:重构成分层架构

按照上文分目录结构重构代码,形成 routes, controllers, models 三层。

第三步:拆分为两个微服务(用户 + 订单)

分别创建两个项目文件夹:

  • user-service
  • order-service

user-service 中实现用户增删改查接口; 在 order-service 中通过 HTTP 请求调用用户服务接口。

第四步:打包成 Docker 容器并运行

分别为两个服务添加 Dockerfile,构建镜像并在本地运行。

第五步:使用 Postman 测试整个系统流程

  1. 先调用用户服务创建用户
  2. 再调用订单服务,传入用户 ID 来创建订单

五、常见问题解答

以下是一些新手在学习过程中经常问的问题:

❓ 我该从哪种架构学起?

建议从单体架构开始,因为最易理解。再逐步学习分层和微服务。

❓ 为何要用微服务?单体不好吗?

微服务的好处是便于大规模团队协作和弹性扩展,但也有一定复杂性。如果只是一个人开发小项目,单体足够。

❓ Node.js、Java、Go,选哪个语言更好?

都可以,关键在于掌握架构思想。Node.js 学习曲线低,适合入门。

❓ Docker 和 Kubernetes 是不是必须学?

对于想进入大厂工作的开发者,Docker 是必备技能,Kubernetes 可以慢慢深入了解。


六、学习路径建议

✅ 新手学习路线如下:

  1. 学会基本语法和工具使用(JS/Node.js/Express)
  2. 掌握单体架构和基础 RESTful API 编写
  3. 理解分层架构并实践
  4. 了解微服务和 API 通信机制
  5. 学习 Docker 容器化技术
  6. 进一步探索 K8s、DevOps、CI/CD 等云原生相关知识

📚 推荐学习资源:

  • 《Node.js 开发指南》
  • YouTube 上的 “The Net Ninja” Node.js 教程
  • Docker 官方文档
  • 《云原生:软件架构新思维》

七、结语:坚持就是进步的关键!

恭喜你读到这里!如果你能跟着这篇文章一步一步操作下来,就已经完成了从零开始学习后端架构的旅程。记住一句话:

“架构没有绝对的好坏,只有是否匹配当前的需求。”

不断实践、复盘、总结,你就离成为一名合格的后端工程师不远啦!

需要后续课程、项目合集或学习计划,请留言告诉我 👇

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝