后端架构演进:从单体到云原生(新手友好版教程)

MobileCreator
2025-06-29 08:09
阅读 453

开篇:后端架构演进是什么,用来做什么?

开篇:后端架构演进是什么,用来做什么?

你可能听说过“架构”这个词,听起来很高大上。其实它就像盖房子的图纸,决定了一个软件系统怎么搭建、怎么运行。

我们今天要讲的是后端架构的演变历史,从最简单的“一栋小楼”慢慢变成“高楼大厦”,再到能灵活扩展的“云端城市”。

通过这篇文章,你会学到:

  • 什么是单体架构
  • 微服务是啥意思
  • 云计算和云原生到底在讲什么
  • 怎么一步步构建自己的简单项目

这篇文章适合零基础的新手,每个概念都配有代码例子,并且从易到难循序渐进地讲解。


环境准备:你需要安装这些工具

环境准备:你需要安装这些工具

开始学习之前,先准备好开发环境。这一步看起来有点技术含量,但别担心,跟着做就能搞定。

基础开发环境(适用于Windows/macOS/Linux)

工具 安装说明
Java 或 Node.js Java 推荐用 OpenJDK 17,Node.js 最新 LTS 版本即可
IDE 推荐 IntelliJ IDEA(Java)或 VSCode(Node.js)
Git 官网下载,用于管理代码版本
Docker 下载并安装 Docker Desktop
Postman 官方下载页面,测试接口必备

🧪 小提示:安装好之后可以使用命令行输入 node -vjava -version 来确认是否安装成功。


核心概念:通俗解释关键术语

1. 单体架构(Monolith)

缓存策略对比-2

这是最早期的架构方式,就像一家公司所有部门都在一栋楼里办公。

特点:

  • 所有功能集中在一个项目中
  • 部署简单,调试容易
  • 随着项目变大,代码臃肿,维护困难

举个栗子🌰:
如果你写了一个商城网站,商品、订单、用户等功能全在一个应用里,这就是典型的单体架构。

// Java Spring Boot 示例:单体项目的 Controller
@RestController
public class ProductController {
    @GetMapping("/products")
    public List<String> getAllProducts() {
        return Arrays.asList("iPhone", "MacBook", "AirPods");
    }
}

2. 分层架构(Layered Architecture)

为了解决单体太乱的问题,人们引入了分层思想。就像给公司划分成前台、客服、财务等部门。

常见结构:

  • 控制层(Controller)
  • 业务逻辑层(Service)
  • 数据访问层(DAO/Repository)
// Service 层示例
@Service
public class ProductService {
    public List<String> getProducts() {
        // 实际中会调用数据库
        return Arrays.asList("iPhone", "MacBook", "AirPods");
    }
}

// Controller 调用 Service
@RestController
public class ProductController {
    private final ProductService productService;

    public ProductController(ProductService productService) {
        this.productService = productService;
    }

    @GetMapping("/products")
    public List<String> getAllProducts() {
        return productService.getProducts();
    }
}

3. 微服务架构(Microservices)

当系统越来越大时,微服务把“一栋楼”的公司拆分成多个小公司,各自专注一件事。

特点:

  • 每个服务独立部署
  • 技术栈灵活,可不同语言混用
  • 易于水平扩展

比如你可以有:

  • 用户服务
  • 商品服务
  • 订单服务
// Node.js 示例:商品微服务部分
const express = require('express');
const app = express();

app.get('/products', (req, res) => {
    res.json(["iPhone", "iPad", "Watch"]);
});

app.listen(3001, () => {
    console.log('Product service running on port 3001');
});

4. 容器化 + Docker

传统部署依赖服务器配置,容易出错。而 Docker 可以像打包集装箱一样把整个服务打包带走。

Dockerfile 示例:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3001
CMD ["node", "server.js"]

构建命令:

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

5. 云原生(Cloud Native)

现在我们不自己买服务器了,直接使用阿里云、AWS等“云端办公室”。

云原生的核心要素包括:

  • 容器编排(Kubernetes)
  • 自动扩缩容(根据流量自动加减机器)
  • 日志监控、健康检查

实战项目:从单体到云原生,动手做一个“简易商城”

我们将从单体架构开始,逐步迁移到微服务架构,并用 Docker 部署。

第一步:搭建一个最简单的单体后端

使用 Spring Boot 创建项目

spring init --dependencies=web simple-shop

进入项目后创建如下类:

@RestController
public class ProductController {
    @GetMapping("/products")
    public List<String> listProducts() {
        return List.of("iPhone", "iPad", "iWatch");
    }
}

启动项目后访问:http://localhost:8080/products

✅ 成果:你已经有一个简单的后端API!


第二步:拆分为两个服务(微服务)

我们将原本一个服务拆成两个:product-serviceuser-service

服务1:product-service

创建一个Spring Boot工程,在Controller中定义:

@GetMapping("/products")
public List<String> products() {
    return List.of("iPhone", "iPad", "iWatch");
}

服务2:user-service

另一个Spring Boot工程,在Controller中定义:

@GetMapping("/users")
public List<String> users() {
    return List.of("Alice", "Bob", "Charlie");
}

启动两个服务分别在不同端口(例如 8080 和 8081)

✅ 成果:两个微服务并行运行!


第三步:用 Docker 部署这两个服务

编写两个Dockerfile:

# product-service/Dockerfile
FROM openjdk:17-jdk-slim
COPY *.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

构建镜像:

docker build -t product-service product-service/
docker build -t user-service user-service/

运行容器:

docker run -d -p 8080:8080 product-service
docker run -d -p 8081:8081 user-service

✅ 成果:服务已经跑在 Docker 里!


常见问题解答

数据库设计模型-1

Q1:为什么不能一直用单体架构?

A:单体适合小型项目,但随着功能增多,代码混乱、修改影响范围大、团队协作困难等问题就会出现。

Q2:微服务之间怎么通信?

A:通常使用 REST API 或 gRPC,比如 A 服务调 B 服务的 /api/users 接口。

Q3:Docker 有什么优势?

A:解决了“在我电脑上能跑,上线就崩”的问题。统一环境、快速部署、资源隔离。

Q4:云原生一定要上云吗?

A:不一定,也可以本地模拟(如 Minikube),但最终目标是充分利用云平台能力。


学习建议:接下来可以学什么?

完成了今天的实践,你已经有了很好的起点!接下来推荐你继续学习:

学习路径建议:

阶段 推荐学习内容
初级 Spring Boot、Node.js、Express 框架
中级 Redis 缓存、MySQL 数据库、RESTful API 设计
进阶 Kubernetes、Spring Cloud Alibaba、Nacos 注册中心
提升 Prometheus 监控、ELK 日志分析、CI/CD 流水线

推荐学习资源:

  • B站课程推荐:黑马程序员《Spring Boot 入门》、尚硅谷《Docker 教程》
  • 书籍推荐
    • 《Spring Boot实战》
    • 《深入浅出Docker》
    • 《云原生应用架构》
  • 社区推荐

结语:后端并不神秘,你也可以成为高手!

从最简单的单体架构开始,到今天接触到微服务、Docker、云原生这些酷炫的词汇,你的知识地图已经越来越丰富。

记住一句话:代码的本质是解决实际问题,而不是堆砌名词。

只要多练多思考,你也能写出优雅、高效的后端系统。加油!


📌 如果你对本文有任何疑问,欢迎在评论区留言交流。我们下期再见!

评论 0

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