抖⾳业务⽹关的探索和实践 刘福良/抖⾳服务架构-研发体验和效率团队 ✓背景和技术挑战 ✓架构设计思路 ✓技术实现和业务案例 ✓下⼀步规划 背景:抖⾳为什么需要引⼊⽹关 •架构复杂度 业务复杂化->架构复杂化->服务拆分 •通⽤逻辑升级困难 通⽤逻辑(⽐如⻛控)SDK编译进Go服务,升级⼤动⼲⼽(拉所有业务⽅) •冗余的HTTP服务 ⼤部分GoHTTP没有任何逻辑,仅仅是对外暴漏HTTP协议很多GoHTTP服务是为了聚合多个下游接⼝完成数据编排 2020年之前的架构 技术挑战 高并发 稳定性要求极⾼5000w+的qps峰值运维要求⾼ 安全合规 接⼊成本要极低需要统⼀治理切⾯覆盖所有线上服务 前后端解耦 架构灵活性要求高 多端iOS/Android/PC/TV/车机 多版本抖音/抖音火山版/抖音极速版/抖音PC版 端到端协作效率 前后端大型团队协作网关作为前后端桥梁研发流程串联 ✓背景和技术挑战 ✓架构设计思路 ✓技术实现和业务案例 ✓下⼀步规划 部署模式的选择 •中⼼化 独⽴部署模式,业界主流架构,单点&隔离性差多接⼝聚合特点,业务轻量级BFF层,按需接⼊ •分布式 sidecar部署模式,去中⼼化,极⾼可⽤性可以作为统⼀⽹关接⼊层,默认所有服务接⼊ 分布式部署 •⽹关与Go服务在⼀个pod内,UDS跨进程通信 •数据链路:LB->HTTPIngress->⽹关->Go服务 •mesh_agent依次启动HTTPIngress、⽹关进程、Go服务进程 中⼼化部署 •⽹关与Go服务独⽴部署,跨⽹络通信 •数据链路:LB->HTTPIngress->⽹关->HTTPIngress ->Go服务 •HTTP/RPCEgress负责服务发现和负载均衡 ✓背景和技术挑战 ✓架构设计思路 ✓技术实现和业务案例 ✓下⼀步规划 ⽹关逻辑执⾏流程 •Router HTTP协议层 •Loader 通⽤逻辑、扩展能⼒ •ProtocolConversion HTTP->ThriftRPC协议转换 •BFF/DSL BFF接⼝聚合、数据编排、裁剪 •Render(json/pb) 响应数据数据序列化 通⽤逻辑托管/Loader •通⽤逻辑与业务逻辑解耦,治理团队与业务团队解耦 •通⽤逻辑与服务框架(Go/Python/Java)解耦 •灵活的变更和热升级,⾼效API治理成为可能 •案例:全场景身份注⼊与透传 BFF/GraphQL •BFF适配层接⼝聚合数据编排字段裁剪 •基于GraphQL的⽹关BFF实现 ThriftIDL->GraphQLschemaGraphQL引擎与Query表达式 GraphQL的版本管理 BFF/GraphQL:⼀个例⼦ APIEndpoint GraphQLQuery APIWorkflow •API设计优先 前置IDL设计节点,解耦各端研发流程 IDL规范与流程约束,提⾼API变更效率和稳定性 •端到端的协作效率 串联研发活动各个节点,提供⾼效流畅的研发⼯作流研发流程标准化和在线化,研发效率和质量提升 业务案例:抖⾳视频Feed场景 •场景 抖⾳刷视频接⼝ 服务端领域数据vs客户端展示数据 P0级接⼝,稳定性要求极⾼ •通⽤逻辑 安全⻛控、容灾兜底、结果采样校验等 •BFF 服务端ThriftRPC(DO)->客户端PBHTTP(DTO)字段的重新编排与裁剪(展示逻辑) ✓背景和技术挑战 ✓架构设计思路 ✓技术实现和业务案例 ✓下⼀步规划 下⼀步规划 •API治理平台 API⽹关向API治理平台演进,API信息中⼼、API字段治理与流程卡点、隐私合规等 •API研发平台 APIWorkflow向研发平台演进,打通API&RPC交付全⽣命周期,开发环境、代码⽣成、调试等 QA 加我微信,线下继续交流 THANKS