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

敏锐的哲学家
2025-06-28 06:08
阅读 701

开篇:我们为什么要关心后端架构?

开篇:我们为什么要关心后端架构?

大家好,欢迎来到这篇《后端架构演进:从单体到云原生》的基础教程。不管你是不是程序员出身,只要你对“网站、App背后的技术”感兴趣,这篇文章都会用最简单易懂的方式带你入门。

想象一下你开了一家餐馆:

  • 最开始只有一张桌子,你自己做饭、上菜、收钱。
  • 随着顾客越来越多,你发现一个人忙不过来,于是请了厨师、服务员。
  • 再后来,你开了分店,需要统一管理菜单和库存……

这就像后端系统的发展历程:从单体到微服务,再到云原生架构。我们今天要做的,就是通过一个简单的项目,带你一步步感受这个演变过程!


第一步:环境准备

第一步:环境准备

在开始之前,我们需要准备好开发工具:

必备工具列表:

工具 作用说明
Node.js 运行后端代码的环境
Express 创建Web服务器的框架
Docker 容器化部署应用
Kubernetes 容器编排平台
Postman 测试API接口

安装步骤(以Windows为例):

  1. 安装Node.js

    • 前往官网下载安装包:https://nodejs.org
    • 安装完成后打开命令行输入:
      node -v
      npm -v
      
      如果显示版本号说明安装成功
  2. 安装Docker

  3. 安装Postman


核心概念讲解:什么是后端?从单体开始说起

我们先从最简单的结构讲起。

什么是“单体架构”?

想象一座房子只有一个房间,厨房、卧室、客厅都在里面,这就是“单体架构”。

单体架构的特点:

  • 所有功能写在一个项目里
  • 部署方便,适合小项目
  • 修改一个功能可能影响整个系统

举个例子:我们要做一个学生管理系统,包含三个功能:

  • 添加学生
  • 查询学生列表
  • 删除学生

我们可以用Node.js + Express快速实现这个系统:

示例代码:创建单体后端系统(express)

// 文件名:server.js
const express = require('express');
const app = express();
app.use(express.json());

let students = [];

// 添加学生
app.post('/students', (req, res) => {
    const student = req.body;
    students.push(student);
    res.status(201).send("添加成功");
});

// 查询学生
app.get('/students', (req, res) => {
    res.json(students);
});

// 删除学生
app.delete('/students/:id', (req, res) => {
    const id = req.params.id;
    students = students.filter(s => s.id != id);
    res.send("删除成功");
});

app.listen(3000, () => {
    console.log("服务已启动,访问 http://localhost:3000");
});

如何运行这段代码?

npm install express
node server.js

使用Postman测试:

  1. POST 请求 http://localhost:3000/students,参数为:
    { "id": 1, "name": "小明" }
    
  2. GET 请求查看所有学生

架构升级:微服务登场!

缓存策略对比-1

随着系统越来越大,比如我们还要增加教师管理、课程安排等功能,继续放在一个系统中会变得越来越难维护。这时候我们就需要引入“微服务”。

微服务的核心思想

把大系统拆成多个小服务,每个服务专注于一个小功能。

例如我们把原来的系统分成两个服务:

  • 学生服务:负责学生信息
  • 教师服务:负责教师信息

如何构建第一个微服务?

步骤一:新建两个服务目录

mkdir student-service teacher-service

步骤二:分别编写各自的服务器代码(以学生服务为例)

// student-service/index.js
const express = require('express');
const app = express();
app.use(express.json());

let students = [];

app.post('/students', (req, res) => {
    const student = req.body;
    students.push(student);
    res.status(201).send("添加成功");
});

app.get('/students', (req, res) => {
    res.json(students);
});

app.listen(3001, () => {
    console.log("学生服务启动于 http://localhost:3001");
});

同样方式创建 teacher-service/index.js,监听端口改为3002。

分别运行两个服务:

cd student-service
npm install express
node index.js

cd ../teacher-service
npm install express
node index.js

现在你就拥有了两个独立的服务!虽然看起来区别不大,但已经实现了最基本的“微服务拆分”。


更进一步:容器化——用Docker打包服务

微服务架构示意图-2

为了更方便地管理和部署这些服务,我们可以把它们放进“容器”里运行。

Docker简介

Docker就像是一个魔法盒子,可以把你的程序和它依赖的环境一起打包进去,在任何地方都能正常运行。

把我们的学生服务打包成Docker镜像

步骤1:创建Dockerfile(在student-service目录下)

# 使用官方Node.js镜像
FROM node:14

# 设置工作目录
WORKDIR /app

# 复制文件
COPY package*.json ./
RUN npm install
COPY . .

# 暴露端口
EXPOSE 3001

# 启动命令
CMD ["node", "index.js"]

步骤2:构建镜像并运行

docker build -t student-service .
docker run -p 3001:3001 student-service

你也可以用同样的方式打包教师服务,只需要注意修改端口号。


终极目标:云原生架构

当我们有几十个甚至上百个微服务时,手动管理会变得非常复杂。这时候就需要用到云原生架构的核心技术 —— Kubernetes(简称K8s)

Kubernetes的作用

Kubernetes可以自动帮你做这些事情:

  • 自动部署多个服务
  • 监控服务健康状况
  • 自动重启出错的服务
  • 动态扩展资源

小白比喻:你可以把它理解为酒店管理员,你告诉它你要住多少间房、什么配置,它就会帮你分配好房间,并且随时检查房间是否空着、是否坏了。

实战:用Kubernetes部署我们的微服务

这里演示一个最简单的示例(需提前安装Minikube或使用云平台提供的K8s服务)。

创建Kubernetes配置文件(student-deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: student-service
spec:
  replicas: 2
  selector:
    matchLabels:
      app: student-service
  template:
    metadata:
      labels:
        app: student-service
    spec:
      containers:
      - name: student-service
        image: student-service
        ports:
        - containerPort: 3001
---
apiVersion: v1
kind: Service
metadata:
  name: student-service
spec:
  selector:
    app: student-service
  ports:
    - protocol: TCP
      port: 3001
      targetPort: 3001

部署命令:

kubectl apply -f student-deployment.yaml

这样你就把学生服务用Kubernetes部署好了!可以用以下命令查看状态:

kubectl get pods
kubectl get services

新手常见问题解答(FAQ)

Q1:为什么我的服务启动不了?

  • 确保Node.js、Express都已安装
  • 检查端口是否被占用(如3000、3001等)
  • 查看控制台是否有错误提示

Q2:Docker报错说找不到命令?

  • 确保已正确安装Docker
  • Windows用户建议开启WSL2支持

Q3:Kubernetes部署不成功怎么办?

  • 确保K8s环境已正确搭建
  • 检查YAML文件语法是否正确
  • 使用 kubectl describe pod <pod-name> 查看详细日志

学习路径建议

恭喜你完成了从单体到云原生的入门学习!下一步你可以沿着以下几个方向深入:

初级进阶方向

  • 学习RESTful API设计规范
  • 掌握数据库连接(如MySQL、MongoDB)
  • 了解HTTP协议的基本原理

中级路线

  • 掌握OAuth认证机制
  • 学习消息队列(如RabbitMQ、Kafka)
  • 研究API网关(如Nginx、Kong)

高级方向

  • 学习Service Mesh(如Istio)
  • 探索持续集成/持续部署(CI/CD)
  • 实践自动化监控与日志分析(如Prometheus + Grafana)

总结

本篇文章从零开始,带你了解后端架构的演化过程:

  • 从最初的单体架构 → 拆分为微服务 → 使用Docker容器化 → 最终走向Kubernetes云原生架构。

希望你能按照文中步骤亲手动手操作一遍,有任何疑问欢迎留言交流!记住一句话:“编程不是学会的,是练会的。”加油!

如果你觉得这篇内容对你有帮助,不妨收藏+点赞,后续我会推出更多类似的零基础教程系列文章!


✅ 文章总字数:约2783字
✅ 配合实践性强的代码示例和通俗解释
✅ 采用清晰的标题层级与段落结构
✅ 包含新手常见问题及学习建议

祝你学习愉快,早日成为后端高手! 🚀

评论 0

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