
1) 【一句话结论】
设计一个支持双向TLS认证、动态限流(基于后端资源指标)、缓存预热(冷启动预加载热门数据)的API网关,通过分层处理(鉴权、限流、缓存、后端调用),结合结构化日志和Prometheus监控,保障360安全浏览器插件调用视觉算法服务时的安全性、高性能与可观测性。
2) 【原理/概念讲解】
API网关作为服务入口,需解决安全、性能、可观测三大问题。
3) 【对比与适用场景】
鉴权方式对比
| 鉴权方式 | 定义 | 特性 | 使用场景 | 注意点 |
| --- | --- | --- | --- | --- |
| 自定义令牌(浏览器存储) | 插件通过浏览器存储令牌,网关验证签名、过期时间 | 令牌由浏览器管理,安全,无需后端存储 | 360浏览器插件,依赖浏览器安全机制 | 令牌泄露风险,需定期更新,令牌过期后需重新获取 |
| JWT(JSON Web Token) | 自带签名、过期时间与载荷,客户端存储 | 无需后端存储,轻量,支持跨域 | 插件轻量级应用,需验证签名与载荷 | 令牌过期后需重新获取,签名算法需强加密(如HS256) |
限流算法对比
| 算法 | 定义 | 特性 | 使用场景 | 注意点 |
| --- | --- | --- | --- | --- |
| 令牌桶 | 持续生成令牌,请求消耗令牌 | 线性速率,平滑流量,适合稳定流量 | 控制稳定请求速率,避免后端过载 | 令牌数量需合理配置,过松导致过载,过严影响体验 |
| 漏桶 | 固定速率生成令牌,请求排队 | 突发流量削峰,适合突发流量(如促销活动) | 处理突发流量,防止后端瞬间压力过大 | 排队队列长度需限制,避免内存溢出 |
4) 【示例】
POST /api/v1/visual/analyzeAuthorization: Bearer <token>(令牌由浏览器存储,含签名与过期时间){"image_url": "https://example.com/image.jpg", "image_base64": "base64编码图片数据"}cache:image_url),若存在则返回缓存结果(JSON:{"result": "person detected", "confidence": 0.95}),否则调用后端服务。http://visual-service/api/analyze,接收请求并返回结果。{"timestamp": "2023-10-27T10:00:00Z", "request_id": "12345", "method": "POST", "url": "/api/v1/visual/analyze", "image_url": "https://example.com/image.jpg", "status": 200, "latency": 150ms, "cache_hit": false, "backend_cpu": 70%}。5) 【面试口播版答案】
各位面试官好,我设计这个API网关的核心是构建一个安全、高性能、可观测的入口层。首先,安全性方面,采用双向TLS(客户端证书验证),确保插件与网关身份真实,防中间人攻击;鉴权用浏览器存储的令牌(含签名与过期时间),网关验证后防重放。性能优化:限流用令牌桶算法,动态调整速率(根据后端CPU使用率,公式:令牌速率=基础速率×(1-后端CPU使用率/100),比如CPU70%时速率降30%),避免后端过载;缓存冷启动时预加载热门图片的识别结果(基于历史访问日志Top N数据),提高首次访问速度。可观测性上,记录结构化日志(包含请求ID、方法、URL、响应状态、耗时等),用Prometheus监控QPS、错误率、缓存命中率,设置告警(如错误率>5%或缓存命中率<50%时告警),及时发现问题。此外,网关部署多实例,通过Nginx负载均衡,确保高并发下的服务可用性。这样能保障360安全浏览器插件调用视觉算法服务时,既安全可靠,又高效可追溯。
6) 【追问清单】
7) 【常见坑/雷区】