《后端架构演进:从单体到云原生》教程

数据Cloud
2025-06-16 19:53
阅读 795

开篇:什么是后端架构?它能做什么?

开篇:什么是后端架构?它能做什么?

你是否想过,当你在微信上发消息、在淘宝上下单、或者在抖音上看视频时,背后的服务器是如何工作的?这些看似简单操作的背后,其实都有一整套后端系统在支撑。这套系统的结构和设计方式,就叫做后端架构

后端架构的核心目标是

  • 高效处理用户的请求(比如登录、下单、搜索等)
  • 安全地存储用户数据
  • 能够应对大量并发访问(比如“双十一”期间千万人同时下单)

刚开始的时候,程序员们通常会把所有的功能都写在一个项目里,这种架构叫做单体架构。但随着互联网的发展,我们发现这种方式很难应对越来越复杂的业务需求。于是,人们开始不断地优化和演化架构。最终形成了一种更先进的方式 —— 云原生架构

这个教程将带你了解:

  1. 后端架构是如何一步步演变的
  2. 每种架构的特点是什么
  3. 怎样用代码实践它们

准备好了吗?我们马上开始!


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

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

为了更好地理解后端架构的演变过程,我们需要一些基本的开发工具来配合学习。

工具清单(全部免费):

工具名称 用途说明
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

核心概念讲解:单体架构 → 微服务架构 → 云原生架构

我们现在正式进入后端架构的三个主要阶段:

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/1
  • http://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 发起以下请求:

✅ 成功完成!恭喜你完成了基于微服务架构的图书商城后端!


常见问题答疑

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 流程
专家 掌握分布式系统设计、服务治理、监控系统

📘 推荐学习资料

  1. 《Node.js权威指南》——适合打基础
  2. Docker 官方文档
  3. Kubernetes 官方中文社区
  4. 《云原生应用架构》(ThoughtWorks 出品)

总结

微服务架构示意图-2

我们从一个最简单的单体架构讲起,逐步介绍了:

  • 单体架构的工作方式
  • 如何拆分为微服务架构
  • 如何容器化并部署为云原生架构

并通过实战项目帮助你动手实践,掌握了基础的后端架构知识。

希望你能继续深入学习下去,在未来的某一天,成为真正的架构师

如有问题欢迎留言提问 📬,祝你学习愉快!

评论 0

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