外卖 App 的后端 API
本页目录· 10 条
这一页有部分内容暂时无法显示,其余内容完整。
假设你做一个类似 Uber Eats 的后端:
用户手机 App
↓ HTTPS 请求
API Gateway
↓
后端服务 App Service
↓
数据库 RDS真实部署可以这样设计:
Internet 用户
↓
API Gateway(AWS 托管的公网 API 前门)
↓
VPC Link / Private Integration
↓
==================== VPC 10.0.0.0/16 ====================
Public Subnet 10.0.1.0/24
- NAT Gateway
- Route Table: 0.0.0.0/0 → Internet Gateway
Private Subnet 10.0.2.0/24
- App Service,例如 EC2 / ECS / Kubernetes service
- RDS Database
- Route Table: 0.0.0.0/0 → NAT Gateway
- Route Table: 10.0.0.0/16 → local VPC network这里每个东西怎么工作:
1. API Gateway
用户不是直接访问你的 EC2 或数据库,而是访问:
https://api.yourapp.com/orders这个请求先到 API Gateway。
API Gateway 负责:
接收 HTTP 请求
做路由
做认证 / 限流 / 日志
把请求转给 Lambda 或 VPC 里的后端服务注意:API Gateway 本身通常不是你放进某个 public subnet 里的 EC2。它是 AWS 托管服务。
如果它要访问 VPC 里面的私有服务,可以通过类似 VPC Link / private integration 的方式连接到 VPC 内部后端。
2. VPC
VPC 是你自己的私有云网络边界。
表示你在 AWS 里划了一块私有网络空间。你的 EC2、ECS、RDS、NAT Gateway 等资源都可以放在这个 VPC 里。
3. Public Subnet
Public subnet 适合放需要和互联网有关系的资源,例如:
它之所以叫 public,不只是因为名字叫 public,而是因为它的 route table 通常有这条规则:
意思是:
去公网的流量,走 Internet Gateway。
4. Internet Gateway
Internet Gateway 是 VPC 连接公网的大门。
如果没有 Internet Gateway,VPC 里面的资源一般不能直接和公网通信。
Public subnet 的典型路由是:
其中:
表示 VPC 内部资源之间可以互相通信。
表示访问外网走公网大门。
5. Private Subnet
Private subnet 适合放不应该直接暴露给公网的东西:
比如你的订单服务和数据库都放在 private subnet。
这样外部用户不能直接访问:
用户只能通过:
这种受控路径访问。
6. NAT Gateway
问题来了:
private subnet 里的后端服务有时也需要访问互联网,比如:
但你又不想让互联网直接访问 private subnet 里的服务器。
这时候用 NAT Gateway。
流量方向是:
Private subnet 的 route table 通常是:
这表示:
private subnet 里的机器要访问外网,可以通过 NAT Gateway 出去;
此处有一段内容暂不支持显示。
所以 NAT Gateway 可以理解成:
private subnet 的“只出不进”公网出口。
7. Route Table
Route table 就是路由规则表。
它决定:
Public subnet:
Private subnet:
所以 public 和 private 的核心差别之一就是:
8. Security Group
Security Group 是资源级别的防火墙。
比如你有三个资源:
你可以这样配:
Security Group 的特点是 stateful,有状态。
意思是:
如果它允许一个请求进来,对应的返回流量通常自动允许出去。
此处有一段内容暂不支持显示。
文档里也把 Security Group 比喻成更像“智能门卫”。
9. Network ACL
Network ACL 是 subnet 级别的防火墙。
它不是控制某一台 EC2,而是控制整个 subnet 的进出流量。
比如:
Network ACL 的特点是 stateless,无状态。
意思是:
你允许请求进来,不代表返回流量自动能出去。
此处有一段内容暂不支持显示。
所以可以这样记:
例子 1 的完整请求路径
用户下单:
后端服务调用第三方支付:
数据库为什么安全?