后台应用架构演进

1.演进全览

静态页面(HTML)
    ↓
CGI通用网关接口(动态生成页面)
    ↓
Servlet/JSP(Java后端编程)
    ↓
MVC框架(Struts/Spring MVC)
    ↓
REST API(前后端分离)
    ↓
单体架构(All in One)
    ↓
微服务架构
    ↓
云原生 / Serverless(未来方向)

2.各阶段详解

2.1静态页面时代

浏览器 → 请求HTML文件 → Web服务器直接返回静态文件
  • 所有用户看到的页面完全相同
  • 无法处理数据库查询、用户交互

2.2CGI通用网关接口

浏览器 → URL请求 → 映射到服务器脚本 → 脚本执行(查数据库)→ 返回HTML

代表技术:ASP、PHP、JSP

问题:每个请求启动一个新进程,性能差,不适合高并发。

2.3Servlet 技术

浏览器 → HTTP请求 → Servlet容器(Tomcat)→ Servlet实例处理返回HTML/JSON

核心特点:

  • 一次加载,多次复用(单例模式)
  • 处理HTTP请求与响应的Java程序
  • 运行在Web容器中

痛点:HTML与Java代码混写,维护困难。

2.4JSP + MVC

用户请求 → Servlet(Controller)→ 调用业务逻辑(Model)→ 渲染页面(View/JSP)→ 返回HTML

代表框架:Struts、Spring MVC

改进:

  • 视图与逻辑分离
  • 统一入口(Front Controller)
  • 表单数据自动绑定

局限:服务端渲染,每次请求都要完整走一遍流程,性能优化困难。

2.5REST + 前后端分离

浏览器(React/Vue)→ AJAX请求 → 服务端返回JSON → 前端渲染界面

核心改变:

  • 后端只提供API,不返回HTML
  • 前端负责界面渲染和交互
  • 通过JSON格式交换数据
  • 同一套API可服务于Web、iOS、Android多端

接口设计:

GET    /api/users        → 查询用户列表
POST   /api/users        → 创建用户
PUT    /api/users/{id}   → 修改用户
DELETE /api/users/{id}   → 删除用户

2.6单体架构

┌──────────────────────────────────────┐
│           单一应用进程                 │
│                                      │
│  ┌────────┐ ┌────────┐ ┌────────┐   │
│  │ 用户模块 │ │订单模块 │ │支付模块 │   │
│  └────────┘ └────────┘ └────────┘   │
│                                      │
│  共享数据库 · 共享部署 · 共享内存       │
└──────────────────────────────────────┘
         ↓
    水平复制 + 负载均衡

典型部署:一个war/jar包,部署在一台或多台服务器上。

2.7微服务架构

                    ┌──────────────┐
                    │   API网关     │
                    │  (Kong/Nginx) │
                    └──────┬───────┘
                           │
        ┌────────┬─────────┼─────────┬────────┐
        ▼        ▼         ▼         ▼        ▼
   ┌────────┐┌────────┐┌────────┐┌────────┐┌────────┐
   │ 用户服务 ││订单服务 ││商品服务 ││支付服务 ││通知服务  │
   └───┬────┘└───┬────┘└───┬────┘└───┬────┘└───┬────┘
       │         │         │         │         │
    ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
    │MySQL │ │MySQL │ │MySQL │ │Redis │ │MQ    │
    └──────┘ └──────┘ └──────┘ └──────┘ └──────┘

核心特征:

  • 服务独立部署、独立扩展
  • 各服务使用独立数据库
  • 通过HTTP/RPC通信
  • 服务发现、配置中心、熔断降级

3.关键对比

维度 单体架构 微服务架构
代码组织 一个项目 多个独立项目
数据库 共享 各服务独立
部署方式 单个jar包 多个jar包
扩展粒度 整体扩展 按需扩展
故障隔离 一处故障全站挂 单点故障不影响其他
开发效率 初期快 需要分工协作
运维复杂度 低 高(需K8s/服务网格)
适用规模 小型项目 大型复杂系统