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

Git冲突患者
2025-06-30 05:33
阅读 209

开篇:后端架构是做什么的?

开篇:后端架构是做什么的?

在我们日常使用的很多应用背后,比如淘宝、微信、抖音,都有一个看不见但非常重要的一部分 —— 后端服务。简单来说,后端负责:

  • 处理用户请求(例如:登录、下单)
  • 和数据库打交道(存数据、查数据)
  • 与其他系统协作(比如和支付宝接口打通)

后端架构演进,说白了就是:随着用户变多、业务复杂,我们的后端怎么一步步“升级”来适应这些变化。

这篇文章会带你从最简单的“单体项目”开始,一直到现代流行的“云原生架构”,通过一步一步动手写代码,让你理解后端是如何演变的!


环境准备:让电脑准备好编程环境

环境准备:让电脑准备好编程环境

需要安装哪些工具?

我们用 Java + Spring Boot 来讲解(Java 是主流后端语言之一,Spring Boot 是简化开发的框架),所以请先安装以下工具:

1. JDK 17(Java 开发套件)

下载地址:https://adoptium.net/zh-CN/temurin/releases/?version=17

安装完成后,在终端输入:

java -version

如果输出类似:

openjdk version "17.0.1" 2021-10-19

说明安装成功!


2. IDE(推荐 IntelliJ IDEA)

免费社区版即可,下载链接:https://www.jetbrains.com/idea/download/

安装之后,启动它,后面我们会用它写代码。


3. Maven(依赖管理工具)

IntelliJ 通常自带 Maven,如果你用的是其他编辑器,可以从官网下载并配置:https://maven.apache.org/

验证命令:

mvn -v

4. Docker(用于部署微服务和云原生部分)

安装指南(适用于 Windows/macOS/Linux): https://docs.docker.com/get-docker/

验证命令:

docker --version

如果看到版本号,说明已安装。


核心概念:一步步了解这些关键词到底是什么意思

核心概念:一步步了解这些关键词到底是什么意思

什么是单体架构?

想象你刚开始学做菜,所有事情都一个人干:买菜、洗菜、切菜、炒菜、上菜。这就是 单体架构,所有功能都在一个程序里完成。

优点:结构简单,适合小项目或新手快速上手
缺点:不易扩展、难维护、出错影响整个系统


什么是微服务架构?

当你做大厨团队,每个人只管一块(有人专门炒菜、有人配菜、有人打包外卖),效率更高。

微服务 就是把后端拆成多个独立的小程序,每个小程序负责一部分功能。例如:

  • 用户服务(处理注册/登录)
  • 订单服务(处理下单)
  • 支付服务(处理支付)

优点:易扩展、可独立部署、稳定性更高
缺点:学习曲线高、部署麻烦、通信成本增加


什么是云原生?

“云原生”就像开连锁餐厅,你的店可以自动复制分店(自动扩缩容)、出了问题能自己重启、还能一键更新。

核心思想

  • 容器化(Docker)
  • 编排(Kubernetes)
  • 持续集成/持续交付(CI/CD)
  • 分布式设计

优点:灵活、高效、自动化强
缺点:门槛较高、需要一定运维知识


实战项目:从小到大搭建一个小餐馆后台系统

实战项目:从小到大搭建一个小餐馆后台系统

我们将实现一个小项目:一个简单的“餐馆点餐系统”,包含:

  • 用户注册/登录(UserService)
  • 下单功能(OrderService)
  • 菜品管理(MenuService)

接下来,我们按阶段来实现这个系统。


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

目标:用一个 Java 项目实现全部功能

步骤1:创建 Spring Boot 项目

你可以使用 Spring Initializr 创建项目: https://start.spring.io/

选择如下配置:

  • Project: Maven
  • Language: Java
  • Spring Boot Version: 2.7.x or 3.0.x
  • Dependencies:
    • Spring Web
    • Spring Data JPA
    • H2 Database (测试用)

下载压缩包,解压并导入 IntelliJ IDEA。


步骤2:创建实体类与 Repository

User.java:
@Entity
public class User {
    @Id @GeneratedValue
    private Long id;
    private String name;
    private String email;

    // Getter and Setter
}
UserRepository.java:
public interface UserRepository extends JpaRepository<User, Long> {}

步骤3:创建 Controller 提供接口

UserController.java:
@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    UserRepository userRepository;

    @GetMapping
    public List<User> getAll() {
        return userRepository.findAll();
    }

    @PostMapping
    public User create(@RequestBody User user) {
        return userRepository.save(user);
    }
}

步骤4:运行项目

点击 IntelliJ 中的 Run 按钮,打开浏览器访问:

http://localhost:8080/users

你应该看到一个空数组 []

发送 POST 请求:

curl -X POST http://localhost:8080/users \
     -H "Content-Type: application/json" \
     -d '{"name":"张三", "email":"zhangsan@example.com"}'

返回结果示例:

{"id":1,"name":"张三","email":"zhangsan@example.com"}

这样我们就完成了一个简单的用户服务模块!

提示:同理添加 OrderController, MenuController 即可完成整个单体项目。


第二阶段:微服务架构改造

目标:将用户、订单、菜单拆分为不同的服务

为什么拆分?

当项目大了,改一点代码就要重新发布整个项目,风险很大;拆开后,哪个服务出问题就修哪个。

技术选型

  • 使用 Spring Boot + Spring Cloud
  • 使用 Eureka 作为服务注册中心

步骤1:创建 Eureka Server(服务注册中心)

生成一个新的 Spring Boot 项目,并加入依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

启动类加上注解:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

application.yml:

server:
  port: 8761
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

运行后访问:http://localhost:8761 查看注册中心状态


步骤2:拆分 UserService 成一个单独的服务

新建项目,加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

application.yml:

server:
  port: 8081
spring:
  application:
    name: user-service
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

主类加上:

@EnableDiscoveryClient

然后照着前面的方法编写 Controller、Entity、Repository。

运行后再次访问 Eureka 页面,你会看到 user-service 已注册成功!


步骤3:创建 OrderService 并调用 UserService

同样方式创建新项目,名为 order-service,并连接 Eureka。

OrderService 中想要拿到用户信息时,可以用 RestTemplate 调用 UserService 接口:

@Autowired
RestTemplate restTemplate;

@GetMapping("/user/{id}")
public User getUserById(@PathVariable Long id) {
    return restTemplate.getForObject("http://user-service/users/" + id, User.class);
}

这样两个服务就建立了联系!


第三阶段:部署到容器中(进入云原生)

现在我们已经拆分成了多个服务,接下来我们要学会用 Docker 把它们打包运行起来。

步骤1:为每个服务添加 Dockerfile

以 user-service 为例:

FROM eclipse-temurin:17-jdk-focal
WORKDIR /app
COPY target/user-service.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

构建镜像:

docker build -t user-service .

运行容器:

docker run -p 8081:8081 user-service

你会发现服务正常运行!🎉


步骤2:使用 Docker Compose 同时运行多个服务

创建 docker-compose.yml 文件:

version: '3'
services:
  eureka-server:
    image: eureka-server
    ports:
      - "8761:8761"

  user-service:
    image: user-service
    ports:
      - "8081:8081"

  order-service:
    image: order-service
    ports:
      - "8082:8080"

执行命令一键启动所有服务:

docker compose up

你现在拥有了一个完整的微服务+注册中心的云原生部署!


常见问题解答(FAQ)

Q1:我的 Spring Boot 项目运行报错,说是找不到方法怎么办?

A:检查是否忘记加 @Component, @RestController 或者没有正确注入 Bean。


Q2:微服务之间互相调用性能会不会很差?

A:确实会有网络延迟,可以通过缓存、消息队列等机制优化。云原生体系中也提供了服务网格(如 Istio)来帮助提升性能。


Q3:我不会写 Dockerfile,能不能自动生成?

A:可以使用 Spring Boot 插件帮你自动生成镜像。也可以尝试 Google Jib,更加方便。


Q4:我刚入门,该先学单体还是直接学微服务?

A:建议从单体开始,先搞懂基础再考虑拆分。微服务对新手来说挑战太大,容易走弯路。


Q5:学习这些技术需要多久?有没有捷径?

A:掌握基本套路大约需要 2~3个月实践时间。捷径是跟着教程动手,不抄源码,自己敲出来。另外多参与开源项目,进步更快。


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

学会了从单体到云原生的基础后,你可以沿着以下几个方向继续深入学习:

✅ 技术栈延展:

  • 学习 Spring Cloud Alibaba(阿里推出的微服务解决方案)
  • 学习 Kubernetes(简称 K8s,现代部署必备)
  • 学习 RabbitMQ、Redis(分布式中的常用组件)

✅ 架构思维提升:

  • 学习领域驱动设计(DDD)
  • 学习 CQRS、Event Sourcing 设计模式
  • 理解 CAP 理论与分布式事务

✅ 自动化能力增强:

  • 学习 Jenkins/GitLab CI(实现自动化构建)
  • 学习 Terraform(基础设施即代码)
  • 学习 Prometheus + Grafana(监控系统)

结语:后端不是终点,而是旅程的开始

从今天起,你不再是一个只会写 Hello World 的程序员了。你已经掌握了搭建后端系统的基本能力,并明白了后端是如何随着需求逐步演化的。

坚持每天写代码、每周搭小项目,不久之后你就可以做出自己的电商平台、社交平台甚至云服务平台。记住:

不要怕看不懂,只要不停敲代码,你就离高手越来越近!


📌 如果你喜欢这篇教程,请点赞支持一下作者,我会持续更新更多零基础友好的后端教程 🚀

需要完整项目源码?欢迎留言告诉我!

评论 0

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