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

云原生笔记本
2025-06-14 08:21
阅读 355

🌟 开篇:这个技术是干什么的?

🌟 开篇:这个技术是干什么的?

你是不是也听过“后端架构”、“微服务”、“云原生”这些词,但一直不知道它们到底是什么?别担心,今天我们就用最简单的语言,带你一步步了解什么是后端架构的演进,以及它是如何从最初的单体应用,发展到现在的云原生架构

无论你是想转行做程序员,还是正在学习编程的初学者,这篇文章都将是你的良师益友。我们不仅会讲解概念,还会写代码、搭环境,让你边学边练,真正掌握这项技能!


⚙️ 环境准备:搭建我们的开发工具

⚙️ 环境准备:搭建我们的开发工具

微服务架构示意图-2

在开始之前,我们需要准备好以下几样工具:

1. 安装 Java 或 Node.js(任选其一)

2. 安装开发工具

3. 安装 Docker

Docker 是云原生世界的核心工具之一。

docker --version

看到类似 Docker version 20.10.17, build xxx 即为安装成功。


🧠 核心概念:从单体到云原生

下面我们要讲的是后端架构的发展过程,一共分为四个阶段:

第一阶段:单体架构(Monolith)

想象一下一块完整的蛋糕。所有功能都在一个程序里,比如登录、下单、支付等,全都挤在一起。

特点:

  • 部署简单,适合小项目
  • 后期维护困难,代码臃肿
  • 扩展性差,改一个小功能可能会影响整个系统

示例代码(用Node.js写一个简单的单体后端):

const express = require('express');
const app = express();

// 用户模块
app.get('/users', (req, res) => {
    res.send("返回所有用户信息");
});

// 订单模块
app.get('/orders', (req, res) => {
    res.send("返回所有订单信息");
});

app.listen(3000, () => {
    console.log("服务器运行在 http://localhost:3000");
});

运行方式:

node server.js

访问地址:

  • http://localhost:3000/users
  • http://localhost:3000/orders

第二阶段:分层架构(Layered Architecture)

像做菜一样,把不同的食材分开处理,最后拼成一道大菜。常见的分层有:控制器(Controller)、业务逻辑(Service)、数据访问(DAO)

示例结构:

server.js        # 主入口
controllers/
   - userController.js
   - orderController.js
services/
   - userService.js
models/
   - userModel.js

这种结构让代码更容易管理。


第三阶段:微服务架构(Microservices)

把整块蛋糕切成多个小块,每一块都可以独立运行。这就是微服务。每个服务负责一个功能模块,可以分别部署、扩展、更新。

微服务的优势:

✅ 可以用不同语言开发
✅ 出现问题不会影响全部系统
✅ 更容易水平扩展

实战:创建两个独立的服务(Node.js为例)

user-service/index.js

const express = require('express');
const app = express();
app.get('/users', (req, res) => {
    res.send("这是用户服务!");
});
app.listen(4000, () => {
    console.log("用户服务启动在 4000");
});

order-service/index.js

const express = require('express');
const app = express();
app.get('/orders', (req, res) => {
    res.send("这是订单服务!");
});
app.listen(5000, () => {
    console.log("订单服务启动在 5000");
});

分别运行这两个服务:

node user-service/index.js
node order-service/index.js

访问地址:

  • http://localhost:4000/users
  • http://localhost:5000/orders

第四阶段:云原生架构(Cloud Native)

就像飞机可以在全球飞行,云原生就是让服务能轻松部署在任何云端平台,并自动伸缩、自我修复。

核心要素包括:

  • ✅ 容器化(Docker)
  • ✅ 编排系统(Kubernetes)
  • ✅ 自动部署(CI/CD)
  • ✅ 服务发现与负载均衡(如 Consul、Nginx)

使用 Docker 运行上面的服务

user-service/Dockerfile

FROM node:18
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["node", "index.js"]

构建镜像并运行:

cd user-service
docker build -t user-service .
docker run -p 4000:4000 user-service

同样的方法构建订单服务。现在,我们已经在容器中运行了两个微服务!


💻 实战项目:做一个“图书管理系统”的微服务版

项目目标:

我们将实现两个服务:

  1. 图书服务(提供书籍列表)
  2. 用户服务(提供用户信息)

并通过 API 相互调用。

步骤1:创建图书服务

book-service/index.js

const express = require('express');
const app = express();

app.get('/books', (req, res) => {
    res.json([
        { id: 1, title: 'Java入门' },
        { id: 2, title: 'Node.js实战' }
    ]);
});

app.listen(6000, () => {
    console.log("图书服务启动在 6000");
});

运行:

node book-service/index.js

步骤2:用户服务调用图书服务

user-service/index.js

const express = require('express');
const axios = require('axios');
const app = express();

app.get('/users', async (req, res) => {
    const response = await axios.get('http://localhost:6000/books');
    res.send("用户信息 + 图书列表:" + JSON.stringify(response.data));
});

app.listen(4000, () => {
    console.log("用户服务启动在 4000");
});

访问:

http://localhost:4000/users

结果将显示用户信息和调用图书服务返回的数据。


❓常见问题解答

Q1:为什么要用微服务?不是更麻烦了吗?

✅ 微服务更适合复杂系统,便于维护和扩展。对于大型项目来说,比单体结构要灵活得多。

Q2:Docker 和虚拟机有什么区别?

🧠 虚拟机模拟整个操作系统;Docker 则是在主机上隔离进程,资源占用更少、启动更快。

Q3:我是否需要先学会 Java/Python?

🔍 微服务可以用多种语言实现。建议先掌握一门语言(比如 Node.js 或 Java),再深入架构设计。


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

服务器部署方案-1

如果你已经完成了以上练习,恭喜你!你已经掌握了后端架构的基础知识。接下来你可以继续学习:

🔹 进阶内容推荐:

方向 推荐学习内容
容器编排 Kubernetes 入门
服务通信 REST vs gRPC
服务治理 Spring Cloud / Istio
数据库拆分 分库分表、数据库主从
自动化部署 Jenkins、GitLab CI

📚 推荐学习资料:

  • 《深入理解Spring Boot与微服务》
  • B站视频搜索:“微服务 架构演进”
  • Docker官方文档:https://docs.docker.com

✅ 总结

通过本篇文章的学习,你应该已经明白了:

  • 后端架构是如何从单体架构一路发展到云原生架构
  • 每个阶段的特点及实践案例
  • 如何用 Node.js 创建微服务并用 Docker 容器化运行
  • 初学者常遇到的问题及解决办法

下一篇文章我们可以一起探索 Kubernetes 的基本使用,或者用 Spring Boot 来构建 Java 微服务。记得点赞+收藏,下次见!


📌 小贴士:动手是最好的学习方式。不要光看,快把代码跑起来吧!有问题欢迎留言,我们一起进步 😊

评论 0

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