后端架构演进:从单体到云原生(零基础入门)
大家好,我是阿杰,一名985毕业的全栈工程师,也在掘金写了好几年的技术教程。最近有不少刚入门的朋友私信我:“后端架构听起来很高大上,但完全不知道从哪开始学。” 其实我当初学的时候也是一头雾水——看到“微服务”“容器化”“Kubernetes”这些词就犯怵。今天,我就用最简单的方式,带大家一步步理解后端架构是如何从一个简单的Python脚本,演进到现代云原生系统的。无论你是学生、转行者,还是自学爱好者,只要会写print("Hello World"),就能看懂这篇文章!
一、什么是后端架构?为什么要演进?
后端架构,简单说就是“你的代码是怎么组织、部署和运行的”。
- 最早的网站可能就是一个
.py文件,启动后直接提供服务 —— 这叫单体架构。 - 随着用户变多、功能变复杂,单体应用变得又大又难改,于是拆成多个小服务 —— 这叫微服务架构。
- 再后来,为了更高效地部署、扩缩容、管理故障,大家开始用 Docker、Kubernetes 等工具 —— 这就是云原生架构。
关键词:综合、Python
我们会用 Python 作为主要语言,综合展示不同阶段的代码结构和部署方式。
二、环境准备(零基础也能搞定!)
我们不需要复杂的工具链,先装这几个基础软件:
| 软件 | 作用 | 安装方式 |
|---|---|---|
| Python 3.8+ | 编写后端逻辑 | 官网下载或 brew install python(Mac) |
| pip | Python 包管理器 | 通常随 Python 自带 |
| Docker | 容器化工具 | 官网安装 |
| curl 或 Postman | 测试 API | 可选,用浏览器也行 |
💡 避坑提示:别一上来就装 Kubernetes!那是高级阶段。我们先从单体开始,一步步来。
验证安装:
python --version # 应输出 Python 3.x
docker --version # 应显示 Docker 版本
三、核心概念:三种架构长啥样?
1. 单体架构(Monolithic)
所有功能写在一个项目里,比如一个 Flask 应用包含用户、订单、支付。
优点:简单、开发快、部署容易
缺点:代码臃肿、难以维护、无法单独扩展某部分
# app.py (单体示例)
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/user/<id>')
def get_user(id):
return jsonify({"id": id, "name": "Alice"})
@app.route('/order/<id>')
def get_order(id):
return jsonify({"order_id": id, "total": 99.9})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
启动:python app.py → 访问 http://localhost:5000/user/123 即可。
2. 微服务架构(Microservices)
把单体拆成多个独立服务,每个服务只做一件事。
比如:
user-service:处理用户相关order-service:处理订单相关
它们通过 HTTP 或消息队列通信。
user_service.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/user/<id>')
def get_user(id):
return jsonify({"id": id, "name": "Alice"})
order_service.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/order/<id>')
def get_order(id):
return jsonify({"order_id": id, "total": 99.9})
分别启动:
# 终端1
python user_service.py # 默认端口5000
# 终端2
python order_service.py # 修改端口为5001(需加 app.run(port=5001))
现在你需要访问两个不同地址,这就是“服务拆分”。
✅ 新手问题:服务之间怎么调用?
答:可以用requests库。比如订单服务要查用户信息,就发请求到http://user-service:5000/user/123。
3. 云原生架构(Cloud Native)
用容器 + 编排 + 自动化,让服务在云上“活”起来。
核心思想:
- 容器化:把服务打包成 Docker 镜像,确保“在我机器上能跑”
- 声明式配置:用 YAML 文件描述服务如何运行
- 自动扩缩容 & 自愈:挂了自动重启,流量大了自动加机器
第一步:Docker 化你的服务
以 user_service.py 为例:
Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY . /app
RUN pip install flask
EXPOSE 5000
CMD ["python", "user_service.py"]
构建镜像:
docker build -t user-service .
运行容器:
docker run -p 5000:5000 user-service
✅ 现在你的服务变成了一个“黑盒子”,别人不用管你用什么语言、依赖什么库,只要拉镜像就能跑!
第二步:用 Docker Compose 编排多个服务
docker-compose.yml
version: '3'
services:
user-service:
build: ./user
ports:
- "5000:5000"
order-service:
build: ./order
ports:
- "5001:5000"
目录结构:
project/
├── docker-compose.yml
├── user/
│ ├── user_service.py
│ └── Dockerfile
└── order/
├── order_service.py
└── Dockerfile
启动整个系统:
docker-compose up --build
🌟 这就是云原生的起点!你已经实现了服务隔离、一键部署、环境一致性。
四、实战:从单体到云原生的完整流程
我们用一个“简易电商”场景走一遍:
步骤1:写单体版
# monolith.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/user/<id>')
def user(id): return jsonify({"name": "Alice"})
@app.route('/api/order/<id>')
def order(id): return jsonify({"total": 88.8})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
步骤2:拆成两个微服务(如上所示)
步骤3:为每个服务添加 Dockerfile
步骤4:编写 docker-compose.yml 编排
步骤5:测试
curl http://localhost:5000/user/1 # 用户服务
curl http://localhost:5001/order/101 # 订单服务
💡 学习技巧:先手动运行 Python 文件,再 Docker 化,最后编排。每一步都验证成功再继续!
五、新手常见问题解答
Q1:为什么不能一直用单体?小项目够用了啊?
答:确实!如果你只是做个个人博客,单体完全没问题。架构演进是为了应对复杂度。当团队变大、需求变多、部署频繁时,单体会成为瓶颈。
Q2:Dockerfile 里的 EXPOSE 是必须的吗?
答:不是必须,但强烈建议写。它是一种“文档”,告诉别人这个容器监听哪个端口。实际暴露端口靠
docker run -p或 compose 的ports。
Q3:微服务之间调用失败怎么办?
答:常见原因:
- 网络不通(Docker 默认 bridge 网络下可用服务名访问)
- 端口没对(比如 order 服务内部监听 5000,但映射到宿主机 5001)
建议在容器内用
curl测试连通性:docker exec -it <container_id> sh curl http://user-service:5000/user/1
Q4:云原生是不是必须用 Kubernetes?
答:不是!K8s 是云原生的“高级形态”。对于初学者,Docker + Compose 已经是云原生的入门实践。等你熟悉后再学 K8s。
六、下一步学习建议
巩固基础
- 深入学习 Flask/FastAPI
- 理解 RESTful API 设计
- 学会用
requests做服务间调用
进阶容器
- 学习 Docker 多阶段构建(减小镜像体积)
- 了解
.dockerignore避免打包无用文件 - 尝试用 Redis 或 PostgreSQL 作为外部依赖(在 compose 中添加 service)
迈向云原生
- 学习 Helm(K8s 的包管理器)
- 了解 Service Mesh(如 Istio)
- 在本地用 Minikube 或 Kind 体验 K8s
综合项目练手
我推荐你做一个“Todo List + 用户认证”的小系统:
- user-service:注册/登录
- todo-service:增删改查
- 用 JWT 做鉴权
- 全部 Docker 化 + Compose 编排
结语
后端架构的演进,本质是用更聪明的方式组织代码和资源。从一个 app.py 到分布式系统,背后是无数工程师踩坑总结的经验。不要被术语吓倒——你今天能跑通一个 Docker Compose,就已经走在了正确的路上。
记住:架构服务于业务,不是反过来。先写能跑的代码,再考虑怎么拆、怎么优化。
如果你觉得这篇教程有帮助,欢迎点赞收藏!我在掘金还会更新《云原生实战:从 Compose 到 Kubernetes》系列,关注我不迷路。
最后送大家一句话:“所有复杂的系统,都是从一行 print 开始的。”
作者:阿杰(985全栈工程师|掘金技术博主)
关键词:综合、Python、后端架构、云原生、Docker、微服务

评论 0