《程序员学架构:Java 后端与微服务》系列第 1 篇
本文定位:先建立一张 Java 后端系统的整体地图,不急着深入 Spring、Redis、MySQL 的底层原理。

我们每天都在写代码:
java
Controller
Service
Mapper
也经常会接触:
text
Spring Boot
MyBatis
Redis
MySQL
Nginx
Docker
但大家写代码的时候,有没有好奇过一个问题:
我们写的这些代码,放到整个系统里面到底处在什么位置?
比如用户打开手机 App 或小程序,点击一个按钮:
text
查看空闲座位
前端发送了一个 HTTP 请求。
那么这个请求接下来去哪了?
text
手机
↓
???
↓
Controller
↓
Service
↓
Mapper
↓
MySQL
它是怎么从用户的手机,通过互联网找到我们的服务器的?
为什么到了服务器以后,经常还要先经过 Nginx?
Spring Boot 又是怎么接收到这个请求的?
Controller、Service、Mapper 分别在整个链路的什么位置?
为什么有时候查 Redis,有时候查 MySQL?
数据库查询完成以后,数据又是怎样一层一层返回,最终重新变成用户手机屏幕上的内容?
如果把这些问题串起来,其实就是一条完整的:
系统请求链路。
这一篇我们暂时不深入某一个框架的底层原理。
先站得高一点,看清楚整个系统。
看看一个最普通的请求,是怎样完成下面这趟旅程的:
text
用户点击手机
↓
发送 HTTP 请求
↓
经过互联网
↓
到达服务器 / Nginx
↓
进入 Spring Boot
↓
Controller
↓
Service
↓
Redis / MySQL
↓
查询并处理数据
↓
返回 JSON
↓
经过网络返回手机
↓
前端解析数据
↓
展示给用户
只要先把这条链路真正看懂,后面再学习 Spring、Redis、MySQL、Nginx、微服务、网关、负载均衡、消息队列,就不会只是一个个孤立的技术名词。
因为你会慢慢知道:
它们为什么会出现在系统里,又分别解决了整条请求链路上的什么问题。
一、从一个最普通的请求开始
假设用户在手机上打开你的系统,点击:
text
查看某家门店今天还有哪些空闲座位
前端会发送一个 HTTP 请求,例如:
http
GET /api/stores/1001/seats/available
很多时候我们写后端代码,是从 Controller 开始看的。
但实际上,对于用户来说,这个请求的旅程早在进入 Controller 之前就已经开始了。
它通常会经历:
text
手机 / 浏览器
↓
发送 HTTP 请求
↓
互联网
↓
Nginx
↓
Spring Boot
↓
Controller
↓
Service
↓
Redis / MySQL
↓
处理结果
↓
Controller 返回 JSON
↓
Nginx
↓
互联网
↓
手机收到响应
↓
前端渲染页面
这就是我们接下来要一点点拆开的:
一个请求从手机出发,到数据库,再从数据库返回手机的完整链路。
