后端架构演进:从单体到云原生 —— 零基础教程

半个架构师
2025-06-19 02:08
阅读 650

开篇:后端架构是什么?为什么要了解它的演变?

开篇:后端架构是什么?为什么要了解它的演变?

对于刚接触编程的小白来说,"后端架构演进"这个词听起来可能有点高大上。但其实它并不难理解。

通俗点讲:

  • “后端”就是网站或应用背后处理数据、逻辑和服务的那一部分程序。
  • “架构”指的是这些程序是如何组织的、怎么搭配使用的。
  • “演进”就是指它们是怎样一步步发展变化的。

就像盖房子一样:

  1. 一开始人们住在小木屋里(单体架构);
  2. 后来人多了住不下,就分成了客厅、卧室、厨房(微服务);
  3. 现在我们住在智能楼宇里,有中央空调、自动报警系统等(云原生)。

学习后端架构的演变过程,不仅可以帮助你理解“现代网站是怎么工作的”,更能为将来深入做项目打下坚实的基础!


环境准备:搭建属于你的开发环境

环境准备:搭建属于你的开发环境

在开始学习之前,你需要先准备好开发环境。以下是最基本的要求:

必备工具列表

工具名称 作用说明
Node.js 运行 JavaScript 的后端环境
NPM / Yarn 安装和管理依赖包
Git 版本控制与代码同步
VSCode 推荐的轻量级开发编辑器
Docker 构建容器化应用
Kubernetes(可选) 高阶内容,后续用得到

安装步骤(以 Windows 为例)

  1. 安装 Node.js

    • 访问官网:https://nodejs.org
    • 下载并安装 LTS(长期支持版本)
    • 检查是否安装成功:
      node -v
      npm -v
      
  2. 安装 VSCode

  3. 安装 Git

  4. 安装 Docker Desktop

完成上述操作后,你就可以开始写第一个后端程序啦!


核心概念:初识后端架构的几个关键词

核心概念:初识后端架构的几个关键词

为了让你更好地理解后端的发展历程,我们需要先认识一些核心术语。下面我会尽量用通俗的语言解释清楚每一个概念。

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:4000http://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 学起来比较复杂,但它是云原生的核心技术之一。我们先不深入学习,但在后面可以逐步掌握。


实战项目:一步一步做一个小型电商后台系统

我们要实现一个最简电商后台服务,包含两个微服务:

  1. 用户服务(查询用户信息)
  2. 商品服务(展示商品列表)

第一步:创建用户服务

新建一个文件夹 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. 为什么我不能直接把所有代码写在一起?

✅ 回答:

  • 写在一起当然可以,特别是在小项目时更容易管理。
  • 但随着项目变大,代码会变得臃肿、难以维护,此时微服务就派上用场了。

学习建议:下一步你应该学什么?

恭喜你完成了本次入门实践!你现在具备了从零开始编写后端微服务的能力。接下来你可以继续向更高级的方向进阶:

学习路线推荐:

  1. 掌握更多 Node.js 技能

    • 如何连接数据库(MySQL/PostgreSQL/MongoDB)
    • 使用 Express 中间件优化接口
    • 用 JWT 实现登录认证系统
  2. 深入了解 Docker 和容器编排

    • 学习 Docker Compose 统一管理多容器
    • 尝试使用 Kubernetes(k8s)管理集群
  3. 实战完整项目

    • 构建博客系统、电商平台、CMS等内容管理系统
    • 学会前后端分离协作(前端可用 Vue 或 React)
  4. 部署上线 & CI/CD 自动化流程

    • 使用 GitHub + Jenkins/Docker Hub 实现自动化部署
    • 学会使用云平台如 AWS、阿里云部署项目

结语:后端的世界正在变化,而你也正在加入

从单体到微服务,再到云原生,每一步都是为了让软件更加灵活、高效、可靠。作为一名零基础的新手,你现在已经迈出了第一步。

记住一句话:

“不是所有事情都能一下子学会,但只要每天进步一点点,坚持走下去,总有一天你会站在更高的山峰上。”

加油!你已经开始成为真正的开发者了!

评论 0

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