ByteFaaS - 字节跳动 Serverless 实践总结
ByteFaaS 简介
- 定义:字节跳动自研的基于 K8S 的云原生 Serverless 解决方案。
- 产品形态:函数计算(Function As A Service)、在线微服务(FaaS Native)、轻量级运行时(FaaS Worker)。
- 应用场景:内部业务(评论流审核、视频转码等)、外部业务(飞书 aPaaS、抖音云小程序)、公有云业务(veFaaS)。
- 技术底座:基于 K8S 资源 Provider,实现资源池化、流量调度、弹性伸缩等。
字节内部大规模落地的挑战
- 当前规模:覆盖所有业务线和中台部门,服务总数 20w+,活跃服务 2.2w,全球机房峰值 QPS 1.2亿,峰值集群 CPU 峰值利用率 60%。
- 性能挑战:冷启动优化、离线服务优化(大流量消息队列消费)。
- 稳定性挑战:业务维度(单实例问题、限流与并发控制)、平台维度(多地域、多机房的容灾体系)。
- 可扩展性挑战:服务维度(单个服务的弹性)、租户维度(单个租户的资源弹性和资源保障)、平台维度(Serverless 平台本身的资源管控)。
性能优化:冷启动与流量调度
- 冷启动问题:无流量的函数会被缩为 0,需要临时启动新实例或提前扩容。
- 冷启动优化:
- 加快冷启动速度:资源池化预热(节省 Pod 创建开销)、镜像代码分离、函数代码多级缓存。
- 减少冷启动频次:旁路指标提前扩容(CPU/内存、消息队列堆积、用户自定义扩容时间窗口)。
- 离线消费性能优化:
- 去中心化流量调度:将流量调度与路由发现剥离,绕过中心化网关,直接访问 Pod。
- 路由管理组件:基于 Rendezvous Hashing 的哈希分片策略,路由缓存减少调用次数,缓解单点 failure。
稳定性建设:运维手段与容灾体系
- 业务运维手段:
- 单实例问题:实例概念暴露给用户(监控、运维)、自动化运维(单实例熔断/迁移)。
- 弹性的限制:限流、反压、并发控制。
- 平台容灾体系:
- 全球多区域(Region)部署:Region 之间不共享数据。
- 同区域多集群单元化部署:降低单集群爆炸半径。
- 同单元多 AZ 容灾:跨 AZ 流量调度。
- 常态泳道化流量调度:容灾跨 AZ 场景切流。
可扩展性:底层资源的弹性与共池
- 三个层面的资源弹性:
- 服务级别:突发流量冷启动 + 异步扩容防突增。
- 租户级别:单体大租户对资源弹性的需求,对小租户的保护。
- 平台级别:平台本身的资源弹性与计算资源的共池。
- 平台级别解决方案:
- 基于 Virtual Kubelet 的资源调度抽象:Virtual Node 实现秒级别容器启动速度,小规格碎片化资源的价格优势。
- 三级火箭可扩展:K8S 集群(火山容器服务 VKE)、ECS 节点、Virtual Node 共享物理机资源池。
总结
ByteFaaS 通过资源池化、去中心化流量调度、自动化运维等手段,解决了冷启动、稳定性、可扩展性等挑战,实现了大规模 Serverless 应用落地。