InfoQ|字节跳动在函数计算领域的应用实践

作者 | Kitty 嘉宾 | 杨华辉 函数计算是一种新型的计算模式 , 可以极致的优化资源成本 , 自动应对波峰波谷 , 对于特定领域的开发 , 它可以极大地释放开发者的开发运维压力 。 字节跳动的函数计算平台初具规模 , 在一些核心场景中都有落地案例 , InfoQ 采访到字节跳动基础架构函数计算负责人杨华辉 , 请他分享了字节跳动在函数计算领域的应用实践及未来的发展趋势 。 以下是采访实录 。InfoQ:函数计算平台的优势是什么?在字节跳动的核心落地场景有哪些?
杨华辉:函数计算平台 FaaS(Function as a Service)遵循服务函数化理念 , 一键创建和部署函数 , 屏蔽资源和运维细节 , 极大降低开发者的开发运维成本 。 同时 , 函数的轻量化和快速启动能力 , 允许平台针对函数自动扩缩容 , 极致优化资源成本 。 平台还提供了各种常用的触发器 , 比如常用的消息队列(Kafka、RocketMQ) , 作为底层各个基础组件的粘合剂 , 开发者可以轻而易举完成相关领域的开发需求 。 高可用方面 , 多机房容灾切换业务无感知 , 健全的熔断降级逻辑让开发者远离运维 , 专注重点逻辑实现 。
目前函数计算在字节跳动内涵盖了在线服务和实时数据处理服务场景 。 主要列举如下场景:

  • 字节跳动的轻服务平台是构建在函数平台之上 , 向用户提供基于 Node.js 的一站式函数开发、提供 SDK 和运行环境 。 因为函数计算提供的敏捷开发模式 , 可以极大的提升用户开发迭代的效率 , 在此基础上无论是一些小工具的开发 , 还是在线网站的后端 API 都可以部署在函数计算平台上;
  • 字节跳动函数计算平台提供消息队列的触发器 , 应对日常的消息消费场景以及活动场景 , 比如消息队列数据变换 , 日志数据处理 , 春节红包雨 , 电商订单轮转 , 审核订单处理等场景 。 在函数计算平台上 , 触发器和函数的解耦 , 让函数平台可以突破 Message queue partition 的限制进行充分的扩缩容;
  • 函数计算平台对接流程 Flow 引擎 , 对象存储事件源 , 定时器处理 , 承载数据处理 UDF 场景 , 汇聚边缘 SSR 场景 , 轻量级虚拟化场景在此不一一赘述 。
InfoQ:字节跳动在构建函数计算技术架构的过程中踩过哪些坑?具体做了哪些针对性的调整和优化? 杨华辉:函数计算平台在产品表达上大同小异 , 我们主要把函数计算分成三个方面去举一些例子阐述我们针对性调整和优化的考虑:
InfoQ|字节跳动在函数计算领域的应用实践
本文插图
  • 系统接入方面
为了满足内部开发者使用中 , 一次修改 , 多地域部署的需求 , 我们提供的单函数多区域部署能力 。 在边缘诸多机房场景 , 为了支持函数单边缘机房自治能力 , 并且就边缘机房不暴露 API 接口的假设 , 我们研发了中心到边缘异步同步的组件 , 解耦中心机房到边缘机房的通信通道;
  • 请求调度方面
字节跳动函数计算提供了共享模式和独占模式 , 涉及到请求调度方面 , 我们设计了 dispatcher 组件用来解决大并发情况下的请求调度问题 , 并且保持了水平扩展的能力 。 为了统一事件源的标准 , 我们对齐了 Cloudevent 数据格式 , 在内部数据流处理的场景中 , 针对不同语言针对 Cloudevent 的 SDK 能力 , 做了一定的取舍 。 比如 Rust runtime 仅支持自定义数据源格式 , 针对 Cloudevent 的 Http transport 的编码限制 , 我们提供了并发处理的模式 , 自定义了编码方式 , 支持任意数据格式的传输能力并且提高了数据吞吐 。
  • Runtime 运行时方面
在冷启动方面 , 目前平均指标 100ms , 主要是利用了 Warm pool , 不依赖 k8s 控制面 , 另外在服务发现方面增加极速通道 , 同一种语言 Runtime 共享同一份资源池 , 把一些 Heavy 操作 , 比如代码下载解压操作卸载到 Host 模块上 , 使得资源套餐小的函数也可以获得比较快的冷启动能力 。
  • 其他方面优化
消息队列 ACK 机制保障 At Least Once 语义、数据流 Proxy 代理、Initializer 能力提供、日志收集方面的一些经验 , 后续我们在 QCon 上分享更多细节 。
InfoQ:在函数计算架构设计上 , 对组织结构、开发团队方面都各有哪些要求? 杨华辉:函数计算的架构设计并没有太多权威的经验遵循 , 对于领域知识方面 ,我们期望有大规模分布式系统实践经验 , 擅长对现实问题进行建模并运用解决 , 了解业界主流函数计算产品理念 , 了解冷启动优化 , 在调度和运行时方面有相关背景 。 对于组织结构、开发团队方面 , 我们期望是聚集有活力 , 积极探索 , 勇于创新 , 有高可用架构设计经验的同学一起来探索实践 。
InfoQ:字节跳动在函数计算方面有哪些值得业界借鉴的经验? 杨华辉:字节跳动的函数计算构建在 Kubernetes 之上 , 但是我们提供了百毫秒的冷启动能力以及数据面的高可用能力 , 依托于成熟的 Kubernetes 的生态系统 , 字节跳动的函数计算平台完全自主构建 , 汲取了开源产品的优点 , 经受住实际千万级 QPS 大流量产品级别的考验 , 相关的经验可以和大家多多交流 , 另外我们也期望在合适的时机可以回馈社区 。
InfoQ:您是如何看待函数计算未来的发展的?有哪些重要的方向值得我们去关注?
InfoQ|字节跳动在函数计算领域的应用实践
本文插图
杨华辉:引用一张《Cloud Programming Simplified: A Berkeley View on Serverless Computing》的图 , serverless 是一种抽象度高的表达形式 , 函数计算是一种新型的计算能力的承载形式 , Serverless 的整个生态需要各方一起共建 , 我们会重点关注与成熟的产品生态结合 , 极致的冷启动优化 , 智能的扩缩容策略 , 与主流框架的结合 , 敏捷的开发调试能力 , 流量治理 , 轻量级虚拟化等方面 。
作为开发者可以保持开放学习的态度 , 让自己不断的处于学习求知的状态 , 无论是这个时代还是下个时代的趋势都是可以逢山开路 。 同时也期望大家在实际业务场景中 , 尝试使用函数计算能力 , 欢迎加入我们一同推进函数计算技术发展 , 共建生态 。
嘉宾介绍 杨华辉 , 目前担任字节跳动基础架构函数计算负责人 , 主要关注分布式系统、容器化、高可用 / 可扩展架构设计等领域 , 具备大规模系统的落地实践经验 。
InfoQ 写作平台欢迎所有热爱技术、热爱创作、热爱分享的内容创作者入驻!
还有更多超值活动等你来!
扫描下方二维码
填写申请 , 成为作者
开启你的创作之路吧~
InfoQ|字节跳动在函数计算领域的应用实践
本文插图
【InfoQ|字节跳动在函数计算领域的应用实践】
点个在看少个 bug ??


    推荐阅读