抖音业务网关的探索与实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 抖音业务网关的探索和实践
刘福良 / 抖音服务架构-研发体验和效率团队
2.
3. ✓ 背景和技术挑战
✓ 架构设计思路
✓ 技术实现和业务案例
✓ 下一步规划
4. 背景:抖音为什么需要引入网关
• 架构复杂度
业务复杂化 -> 架构复杂化 -> 服务拆分
• 通用逻辑升级困难
通用逻辑(比如⻛控)SDK编译进Go服务,升级大动干戈(拉所有业务方)
• 冗余的HTTP服务
大部分GoHTTP没有任何逻辑,仅仅是对外暴漏HTTP协议
很多GoHTTP服务是为了聚合多个下游接口完成数据编排
维护成本高、链路延迟损耗
2020年之前的架构
5. 技术挑战
稳定性要求极高 接入成本要极低
5000w+的qps峰值 需要统一治理切面
运维要求高 覆盖所有线上服务
6. ✓ 背景和技术挑战
✓ 架构设计思路
✓ 技术实现和业务案例
✓ 下一步规划
7. 部署模式的选择
• 中心化
独立部署模式,业界主流架构,单点&隔离性差
多接口聚合特点,业务轻量级BFF层,按需接入
• 分布式
sidecar部署模式,去中心化,极高可用性
可以作为统一网关接入层,默认所有服务接入
既要还要
8. 分布式部署
• 网关与Go服务在一个pod内,UDS跨进程通信
• 数据链路: LB -> HTTP Ingress -> 网关 -> Go服务
• mesh_agent依次启动HTTP Ingress、网关进程、
Go服务进程
9. 中心化部署
• 网关与Go服务独立部署,跨网络通信
• 数据链路: LB -> HTTP Ingress -> 网关 -> HTTP Ingress
-> Go服务
•
HTTP/RPC Egress负责服务发现和负载均衡
10. ✓ 背景和技术挑战
✓ 架构设计思路
✓ 技术实现和业务案例
✓ 下一步规划
11. 网关逻辑执行流程
•
Router
HTTP协议层
•
Loader
通用逻辑、扩展能力
•
Protocol Conversion
HTTP -> Thrift RPC协议转换
•
BFF/DSL
BFF接口聚合、数据编排、裁剪
•
Render(json/pb)
响应数据数据序列化
12. 通用逻辑托管/Loader
• 通用逻辑与业务逻辑解耦,治理团队与业务团队解耦
• 通用逻辑与服务框架(Go/Python/Java)解耦
• 灵活的变更和热升级,高效API治理成为可能
• 案例: 全场景身份注入与透传
13. BFF/GraphQL
•
BFF适配层
接口聚合
数据编排
字段裁剪
•
基于GraphQL的网关BFF实现
Thrift IDL -> GraphQL schema
GraphQL引擎与Query表达式
GraphQL的版本管理
14. BFF/GraphQL:一个例子
API Endpoint
GraphQL Query
15. API Workflow
• API设计优先
前置IDL设计节点,解耦各端研发流程
IDL规范与流程约束,提高 API 变更效率和稳定性
• 端到端的协作效率
串联研发活动各个节点,提供高效流畅的研发工作流
研发流程标准化和在线化,研发效率和质量提升
16. 业务案例: 抖音视频Feed场景
•
场景
抖音刷视频接口
服务端领域数据 vs 客户端展示数据
P0级接口,稳定性要求极高
•
通用逻辑
安全⻛控、容灾兜底、结果采样校验等
•
BFF
服务端Thrift RPC(DO)-> 客户端PB HTTP(DTO)
字段的重新编排与裁剪(展示逻辑)
17. ✓ 背景和技术挑战
✓ 架构设计思路
✓ 技术实现和业务案例
✓ 下一步规划
18. 下一步规划
• API治理平台
API网关向API治理平台演进,API信息中心、API字段治理与流程卡点、隐私合规等
• API研发平台
API Workflow向研发平台演进,打通API&RPC交付全生命周期,开发环境、代码生成、调试等
19. QA
加我微信,线下继续交流
20. THANKS