后端架构演进:从单体到云原生(面向零基础初学者)

异步回调迷宫
2025-06-25 23:20
阅读 474

开篇:什么是后端架构?为什么要学它?

开篇:什么是后端架构?为什么要学它?

在互联网世界中,你每天使用的应用(比如微信、淘宝、抖音)背后都有一个强大的“大脑”——后端系统。这个系统负责处理数据、接收请求、执行逻辑并返回结果。

后端架构,就是我们搭建这个“大脑”的方式。随着互联网的飞速发展,后端架构也经历了多个阶段的演变:从最简单的“一个程序搞定一切”,到现在可以自动伸缩、高可用、分布式的“云原生架构”。

这篇文章会带你从零开始,了解:

  • 什么是后端架构
  • 它经历了哪些变化
  • 每种架构怎么工作
  • 动手写代码体验每一种架构

即使你是完全没有编程经验的小白,也能轻松入门!


环境准备:我们需要装什么?

环境准备:我们需要装什么?

为了能动手实践,我们要先准备好开发环境。我们主要使用以下工具和技术栈:

工具 作用
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

这两个工具在后面的云原生部分才会用到,如果你是刚开始学习,可以暂时跳过安装,等需要用到时再回来补充。


核心概念:后端架构的几个关键阶段

核心概念:后端架构的几个关键阶段

我们把后端架构的发展分为以下几个阶段:

  1. 单体架构(Monolithic)
  2. 垂直拆分架构(Vertical Split)
  3. 微服务架构(Microservices)
  4. 云原生架构(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 上有很多开源项目,或者你可以自己设计小系统,比如:

  • 记账系统
  • 网站留言墙
  • 任务管理工具
  • 在线投票系统

这些都可以练手哦!


学习建议:下一步该怎么学?

服务器部署方案-1

当你掌握了本文讲的内容之后,下一步可以往这些方向拓展:

方向一:深入后端开发技能

  • 学习数据库(MySQL、MongoDB)
  • 掌握 RESTful API 设计
  • 学习中间件(Redis、RabbitMQ)
  • 学习身份验证(JWT)

方向二:深入云原生领域

  • 学习 Kubernetes 基础操作
  • 学习 Helm Chart 包管理
  • 了解 CI/CD 流程(Jenkins、GitHub Actions)
  • 了解服务网格(Istio)

方向三:参与实战项目

  • 加入开源项目(GitHub)
  • 拿着简历投实习 / 初级岗位
  • 自己做一个完整网站上线(可部署到 Vercel、Heroku、腾讯云等平台)

结语

数据流转过程-2

从单体到云原生,后端架构的演化让我们能够构建更强大、稳定、高效的系统。希望这篇教程能帮助你迈出第一步,理解这些术语背后的原理,并亲手实践出来。

记住一句话:“程序员的成长=持续实践+不断总结”。

继续加油,未来你就是那个构建系统“大脑”的人!🚀

评论 0

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