
1) 【一句话结论】设计360高并发API网关的核心是构建分层架构(Nginx L7反向代理+Golang微服务),通过服务发现动态管理后端服务实例,负载均衡采用加权轮询并配合健康检查,结合黑洞路由/流量清洗防DDoS,参数化查询+数据库审计防SQL注入,实现高可用、可扩展的安全请求分发。
2) 【原理/概念讲解】API网关作为系统入口,需处理请求路由、协议转换、安全校验与流量控制。核心组件及原理:
3) 【对比与适用场景】
| 负载均衡策略 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 加权轮询 | 根据后端服务权重(CPU/内存利用率)分发请求 | 考虑服务能力,性能高的实例承担更多请求 | 后端性能差异大(如不同版本服务) | 需动态调整权重(如通过监控指标) |
| 最少连接 | 选择当前连接数最少的服务实例 | 优化连接资源,减少长连接阻塞 | 连接密集场景(如WebSocket长连接) | 需维护连接状态,复杂度较高 |
| IP哈希 | 根据客户端IP哈希结果分配服务 | 长期绑定,保持会话一致性 | 会话保持(如用户登录后固定服务) | 客户端IP变化导致会话断开,需配合会话同步 |
4) 【示例】
Nginx配置(加权轮询+健康检查):
http {
upstream backend_services {
server 192.168.1.1:8080 weight=3 max_fails=3 fail_timeout=10s;
server 192.168.1.2:8080 weight=2 max_fails=3 fail_timeout=10s;
server 192.168.1.3:8080 weight=1 max_fails=3 fail_timeout=10s;
}
server {
listen 443 ssl http2;
server_name api.360.com;
location /healthcheck {
return 200;
}
location / {
proxy_pass http://backend_services;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
limit_rate 100k; # 限速防DDoS
auth_request /auth; # 认证
}
}
}
Golang服务发现(Consul示例):
// 伪代码:服务发现客户端
client, _ := consulapi.NewClient(consulapi.DefaultConfig())
service := client.Health().Service("user-service", "", nil)
for _, entry := range service {
backendAddr := fmt.Sprintf("%s:%d", entry.Service.Address, entry.Service.Port)
// 添加到负载均衡器
lb.Add(backendAddr, entry.Service.ServiceName)
}
5) 【面试口播版答案】(约90秒)
面试官您好,设计360高并发API网关时,核心是构建分层架构,以Nginx作为L7反向代理处理协议转换(如HTTP/2、WebSocket)和路由,Golang微服务处理业务逻辑。首先,通过Consul服务发现动态管理后端服务实例,当实例新增或故障时自动更新负载均衡器,提升扩展性。负载均衡采用加权轮询,根据后端服务CPU/内存利用率动态调整权重,比如性能高的实例权重更高。健康检查每秒向服务发送/healthcheck请求,要求200 OK,超时或错误则标记为不健康,后续请求不发送。安全防护方面,DDoS通过黑洞路由将异常流量引导至黑洞IP,流量清洗中心过滤高频或异常包;SQL注入通过Golang的Prepare语句实现参数化查询,输入白名单过滤(仅允许数字/字母),并配合数据库审计记录SQL语句,异常时告警。整体架构解耦前端请求与后端服务,实现高并发下的安全、可扩展请求分发。
6) 【追问清单】
7) 【常见坑/雷区】