Skip to content

2.1 软件架构基础:计算机、网络、前端、后端、数据库、中间件、微服务、同步与异步 ​

开一家餐厅,需要前厅接待、后厨加工、账本记录和人员协调。软件也有类似分工:界面接收操作,服务处理规则,数据库保存需要长期保留的数据。本节沿着一次网页操作,说明这些部分怎样配合。

个人展示页可以只由静态文件组成;多人使用的业务系统则可能需要身份验证、数据库和后台服务。架构应根据实际需求选择,不是组件越多越专业。


开胃菜:一台电脑和一个网站是怎么跑起来的 ​

在聊“前端、后端、数据库”之前,先用 5 分钟补两块最容易被初学者卡住的底层常识:一台电脑是怎么跑起来的(硬件 + 操作系统),以及一个网站是怎么“跑到”你面前的(网络 + 接口)。搞懂这两条,后面章节里天天出现的 localhost:8000、API Key、服务器、命令行,就再也不发懵了。

1. 计算机的“厨房”与操作系统:CPU、内存、硬盘与进程 ​

① 电脑的“四大件” = 一间厨房 ​

部件生活比喻说明一句话记法
CPU(中央处理器)掌勺大厨执行通用计算和控制指令只算,不停算
内存(RAM)灶台边的小操作台极快但地方小,一断电就清空快而短命
硬盘(SSD/HDD)食材冷库慢但能长期囤货,断电也不丢慢而长寿
显卡(GPU)摆盘师傅把画面画到屏幕上(AI 也靠它加速)画图与并行算

💡 为什么“电脑越用越卡”?因为同时开的 App 太多,灶台(内存)不够用了,系统只能把部分数据临时“挪去冷库”,来回倒腾自然变慢。

② 操作系统 = 后厨的总调度 ​

  • 操作系统(Windows / macOS / Linux)就像后厨总调度——它不亲自炒菜,但负责给每个“班组”(进程)分配灶台(CPU 时间)、收拾冷库(硬盘)、管文件、管网络。
  • 为什么服务器经常使用 Linux?:便于自动化部署与远程管理,软件生态丰富。稳定运行仍需要更新、监控与维护。你后面敲的 uv、python、各种终端命令,都是和这套“总调度”在对话。

③ 进程(Process)= 正在运行的一个“班组” ​

  • 进程就是后厨里正在工作的一整套班组;一个应用可以包含多个进程,但窗口数与进程数没有固定的一一对应关系。
  • 初学者必懂的一句话:关掉 App 界面 ≠ 程序结束,后台可能还有进程在偷偷运行——这就是“我明明关了它,风扇怎么还在转”的原因。

概念与流程示意图

2. 网站是怎么“跑到”你面前的:IP、端口、服务器与接口 ​

把整个互联网想象成一座巨大的城市,每一台联网的电脑都是一栋楼。

① 四张“门牌”先认齐 ​

概念生活比喻说明例子
IP 地址楼的门牌号网络中用于标识接口和路由的地址,可动态分配或经地址转换共享192.168.1.1
端口(Port)楼里的服务窗口号同一栋楼里区分不同服务的“窗口”8000 / 443
域名楼的响亮招牌给门牌号起的“好记名字”github.com
服务器 / 云服务器24 小时营业的楼专门为别人提供服务的远程电脑阿里云 / AWS 主机

🎯 127.0.0.1 和 localhost 就是“自己家”。你运行服务看到 http://127.0.0.1:8000,翻译过来就是“在我自己这台电脑的 8000 号窗口,开着一个网站服务”。80/443 是网页的默认窗口,8000/3000 是开发时常用的临时窗口。

② 客户端 - 服务端:谁在问、谁在答 ​

  • 你打开网页,你的浏览器(或手机 App)就是“食客(客户端)”,机房里的电脑就是“后厨(服务端)”。食客只负责点菜和吃,后厨负责做菜。
  • 客户端(Client)发起请求,服务端(Server)返回结果。服务端是一种提供服务的角色;开发时也可以运行在自己的电脑上,不要求全天在线。

③ 你在地址栏敲下回车后,发生了什么 ​

输入网址 → DNS 把域名"翻译"成 IP → 顺着门牌号找到服务器
→ 建立连接 → 发出 HTTP 请求 → 服务端处理并返回数据 → 浏览器渲染成页面
  • DNS = 城市里的“查号台 / 黄页”:你说“我要去 github.com”,它告诉你“门牌号是 xxx”。
  • HTTP 请求 = 你递给后厨的“点菜单”(方法、地址、请求头、请求体)——这部分在下面第 9 节还会细讲。
  • 接口 / API 的本质 = 两个程序之间对话的“服务窗口”:前端代码请求一个 URL,就相当于去这个窗口点单;窗口后面是谁(某个函数、某台服务器)你不需要关心,只要按规矩递单子、拿结果。只要接口行为保持兼容,后端内部实现可以调整,前端通常无需跟着改动——这就是前后端能“解耦”的原因。

概念与流程示意图

💡 这条“完整旅程”是后面所有实战(API Key、FastAPI、前端调接口)的地基。先在心里有张图,后面每一章都会踩在它上面反复加深。

相关官方权威资料直达 ​


餐厅大比喻:一分钟看懂现代软件架构 ​

概念与流程示意图


核心概念通俗说明 ​

3. 什么是前端(Frontend / 客户端)? ​

  • 一辆汽车的酷炫外壳、真皮座椅、方向盘与中控触摸大屏。你坐在车里摸得到、按得着的所有按钮就是前端。
  • 运行在用户的浏览器、手机或电脑上的“交互界面”。它负责把数据漂亮地画在屏幕上,并捕捉用户的每一次点击、滑动和键盘输入。
  • 页面基础与常用框架:
    • HTML(骨架):决定页面有哪些文字和按钮;
    • CSS(皮囊与装修):决定按钮是什么颜色、排版多宽、是否有炫酷动效;
    • JavaScript(灵魂与肌肉):决定点击按钮后弹窗还是跳转;
    • 常用界面工具(职责并不相同):React、Vue、Next.js、Tailwind CSS。

4. 什么是后端(Backend / 服务端)? ​

  • 汽车发动机舱里的引擎、变速箱与行车电脑(ECU)。平时藏在引擎盖底下你看不到,但踩下油门能不能加速全靠它。
  • 运行在远端机房服务器上的业务处理核心。负责验证用户身份、计算复杂算法、保护商业机密并协调数据流转。
  • 为什么前端不能直接连数据库?:
    • 如果把数据库账号密码写在前端网页里,任何人只要“右键-检查源代码”就能把你的用户数据偷光,所以必须由后端这道“安全门神”负责把关。
  • 主流开发语言与框架:FastAPI (Python)、Node.js、Express、NestJS、Spring Boot (Java)、Go 与 Gin。

5. 什么是数据库(Database / 数据持久化)? ​

  • 银行的地下特种防盗金库与永久账本。不论外面的营业厅停电还是装修,你的存款数字必须一分不差地锁在这里。
  • 专门用来安全存放和高效查询数据的软件系统。

概念与流程示意图

  • 数据库的核心底线(ACID 特性):比如 A 给 B 转账 100 元,A 账户扣钱和 B 账户加钱在同一事务中应全部完成或全部撤销,绝不能出现扣了 A 的钱却没加给 B 的半截子情况。

6. 什么是中间件(Middleware / 系统的润滑剂)? ​

  • 大型商场里的自动扶梯、广播电台与快递寄存柜。
  • 它不是具体的业务功能(不是做登录,也不是做支付),而是连接各个系统、让数据跑得更快更稳的底层辅助服务:

概念与流程示意图


7. 什么是微服务(Microservices)与 单体架构(Monolith)? ​

架构类型单体架构(Monolith)微服务架构(Microservices)
日常生活比喻夫妻档全能小餐馆:老板一个人炒菜、收银、拖地、送外卖。现代大型美食广场:奶茶档口、烧烤档口、保洁团队、收银中心各自独立运营。
优点早期起步极快,代码都在一个文件夹里,部署调试简单。各服务可独立部署;经过合理隔离后,部分故障可以限制在局部。
缺点若模块边界不清,修改影响面会扩大;仍可通过合理分层与多副本部署维护。维护成本高,需要通过网络进行跨服务远程调用(RPC)。
常见部署方式统一构建和部署的应用,可包含多个模块Docker 容器化 与 Kubernetes (K8s) 编排调度

8. 什么是同步(Synchronous)与异步(Asynchronous)? ​

这是所有程序员和系统架构中最核心的思维方式:

概念与流程示意图

    • 同步(Sync):排队在银行柜台转账,柜员没把回执盖章给你之前,你绝不能走开;
    • 异步(Async):去医院做体检,抽完血后医生说“报告明天在手机 App 上推送查看”,你不用在化验室门口傻坐 24 小时。

9. 什么是 HTTP 与 REST API(前后端是怎么“对话”的)? ​

  • 餐厅的点餐规矩——HTTP 协议就是“服务生与后厨之间的沟通规范”:你递上菜单(请求),服务生把菜端上来(响应);REST API 就是这份“标准菜单”,每道菜(资源)都有固定的写法。
  • HTTP 是浏览器 / Agent 与后端服务器通信的“通用语言”。一次请求 = 方法(Method)+ 地址(URL)+ 请求头(Headers)+ 请求体(Body),后端处理后返回 状态码 + 响应体。

① 请求方法 = 对资源做什么(增删改查) ​

方法含义生活比喻例子
GET查询看菜单获取用户列表
POST新增加一道新菜创建新用户
PUT整体更新换掉整道菜全量更新用户资料
PATCH部分更新只加个葱花只改用户昵称
DELETE删除撤掉这道菜删除用户

② 状态码 = 后厨给你的“结果回执” ​

状态码含义生活比喻
200 / 201成功菜做好了,端上桌
400请求写错点了菜单上没有的字
401未登录没报会员号
403无权限会员等级不够,包厢进不去
404资源不存在菜已下架
429请求太频繁一分钟点 100 次餐,被限流
500服务器出 bug后厨灶台炸了

💡 写 Agent 时天天和这些打交道:调 API 返回 401 时先检查认证信息;429 可能是速率或额度限制,要结合响应说明判断是否适合重试。

bash
# 用 curl 发请求,就像手动点一次餐
curl https://api.example.com/users            # GET:查看用户列表

curl -X POST https://api.example.com/users \
  -H "Authorization: Bearer sk-xxx" \
  -H "Content-Type: application/json" \
  -d '{"name": "Alex", "age": 25}'            # POST:创建新用户

10. 部署上线与 DevOps(把代码真正“开张营业”) ​

  • 新餐厅开业全流程——开发是在后厨试菜,部署上线就是“正式开张”,DevOps 则是把“备菜、炒菜、端盘”全部流水线自动化,还配上自动洗碗机。
  • 写完代码 ≠ 用户能用。需要把程序放到用户能够访问的环境,并准备合适的地址、连接保护与运行配置。CI/CD 可以自动化交付,但不是所有项目上线的前提。

概念与流程示意图

环节生活比喻作用
域名 + DNS餐厅的招牌与导航把 your-site.com 翻译成服务器的真实 IP 地址
HTTPS运送途中封好并核验封条数据加密传输,浏览器地址栏的小锁头
云服务器租来的后厨门店阿里云 / 腾讯云 / AWS 上的一台远程电脑
Docker标准化的打包餐盒把应用及依赖打包成镜像,运行时仍需匹配架构、配置和数据目录
CI/CD全自动备菜流水线代码一推送,自动测试、自动构建、自动上线

将应用部署后,再从另一台设备访问一次,能帮助你区分“本地运行正常”和“用户实际可用”。


11. 软件工程完整流程(从“想法”到“上线”的流水线) ​

  • 盖一栋楼——需求是“和业主确认要几室几厅”,设计是“请设计师出蓝图”,开发是“砌墙铺水电”,测试是“质检员验收”,发布是“交房入住”,运维是“物业保修”。
  • 软件不是一拍脑袋写出来的,而是有标准流程,每一步都有明确的产出物:
阶段生活比喻主要做什么产出物
需求分析和业主确认户型搞清楚“到底要解决什么问题”需求文档 (PRD)
架构设计设计师出蓝图技术选型、模块划分、接口设计架构图 / 设计文档
编码开发砌墙铺水电写代码实现功能可运行的代码
测试质检员验收单元测试、联调、回归测试测试报告
代码评审监理把关Code Review,找隐藏 bug评审意见
发布上线交房入住部署到生产环境线上可访问的服务
运维监控物业保修监控报警、修 Bug、持续迭代稳定性指标

💡 转行者常犯的误区:只盯着“写代码”这一环。真正专业的工作流是前有需求设计、后有测试运维——会用 AI 帮你快速产出中间环节,正是 Vibe Coder 的独特优势。


把这些概念串起来:保存一条读书笔记 ​

假设你在页面中填写标题和正文,点击“保存”。前端先收集输入,并提示明显的遗漏;随后向后端发出请求。后端核对用户身份和字段规则,再把笔记写进数据库。数据库确认成功后,后端返回笔记编号,前端才更新列表。

这里有几处不能混为一谈:

  • 按钮变成“已保存”,可能只是页面状态变化,不代表数据库已经写入。
  • 前端已经检查标题非空,后端仍要检查,因为请求也可以由其他程序直接发出。
  • 浏览器没有收到响应,不能直接推断保存失败;可能是写入成功后,返回途中网络中断。

第三种情况尤其值得注意。用户再次点击时,如果每次请求都无条件新增,就会产生重复笔记。可以给一次提交分配请求标识,让后端识别重复请求。这称为“幂等处理”,类似快递凭同一张取件凭证只交付一次包裹。具体实现取决于业务,不是所有操作都天然幂等。

几组容易混淆的概念 ​

容易混淆的说法更准确的理解
后端就是数据库后端处理规则与权限,数据库负责存储和查询,两者可以独立运行
内存中的数据已经保存进程结束后通常无法保留;需要写入持久存储并安排备份
异步一定更快异步主要减少等待时的闲置,不保证单次操作更短,也不等于多核并行
微服务一定比单体先进微服务增加网络、部署和数据协调成本,简单项目可以先采用结构清楚的单体
HTTPS 能保证网站业务安全它保护传输过程;身份验证、访问控制和业务检查仍需要应用实现

“中间件”还有两种常见用法:系统架构中常指缓存、消息队列等基础服务;Web 框架中也指请求进入处理函数前后执行的公共逻辑,例如记录耗时。看到这个词时,先判断讨论的是哪个层次。

怎样判断问题发生在哪一层 ​

遇到“保存不了”,先看浏览器是否发出了请求。没有请求,检查按钮与输入;请求得到错误响应,结合状态码和后端日志定位;后端报告成功却没有数据,检查所连接的数据库与查询条件。

排查应沿着数据经过的路径前进。一次只验证一个环节,通常比同时重启所有服务更容易找到原因。需要进一步查阅时,可参考 MDN HTTP 文档。

相关官方权威技术站点直达 ​