超越边界:FaaS的应用实践和未来展望 蚂蚁集团邢奇2023/07 FaaS概述 FaaS的崛起 01 应用研发模式面临的困境 02 FaaS的适用场景和价值 03 FaaS落地面临的问题和挑战 代码耦合严重,复杂度高;运维流程繁琐,效率低;资源利用率低,存在浪费 •提升研发效能:快写快发 •提高运维效率:免运维 •降低成本和资源消耗 FaaS的适用场景和价值 让研发者更专注于业务 适合场景 •胶水代码 •短生命周期 •事件驱动 •波峰波谷明显 •多语言 •高隔离性 适合业务 •H5/小程序 •聚合服务/BFF •推荐/营销平台 •音/视频转码平台 •算法/AI FaaS落地面临的问题和挑战 性能 安全 成本 体验 •函数调用的性能问题 •弹性扩缩容反应时间慢 •容器启动速度慢 •资源如何隔离 •容器逃逸如何防御 •免鉴权怎么支持 •资源利用率如何提升 •用户成本如何降低 •函数研发体验优化 •函数如何运维 深入蚂蚁FaaS技术架构 01 蚂蚁FaaS技术实践说明 02 蚂蚁FaaS高性能实践详解 03 蚂蚁FaaS安全能力建设 冷启动 流量模型 安全隔离 onerequestperinstance 函数网关 负责函数请求的转发和控制,并且为每个请求发起一次容 器调度任务 容器调度引擎(huse) 负责容器的调度,对容器的生命周期进行管理,并且可以 控制函数的并发度和复用等状态。并且对函数pod资源池进行管理 函数Pod资源池 函数容器运行的环境,一个集群有N个Pod资源 容器运行时 负责实现OCI标准,快速启动函数容器,对容器的 runtime进行有效控制 函数容器 用户的函数代码运行在函数容器中,仅作为客户端拉取请 求并处理,返回结果 函数网关 负责统一接收函数请求,进行认证授权,并且发起 容器调度,最后将请求转发给函数节点网关 函数节点网关 接收并缓存函数请求,并且将请求进行实例级别的 分发,同时等待函数容器启动并开始处理请求 函数容器 函数代码运行的容器,启动之后会作为客户端拉取 请求并进行业务处理 CPU资源消耗下降了50%以上请求耗时下降了30%左右 HUSE调度引擎,即Hyper-elasticUnifiedServerlessEngine,蚂蚁容器调度引擎的下一代架构 特性 蚂蚁容器调度引擎的下一代架构,是专门面向高吞吐低延迟、低成本、极速启动的Serverless场景而设计的。 场景 目前HUSE不仅在FaaS场景进行实践,同时也应用在batchjob等场景,是一个通用的serverless任务调度引擎。 全集群10000QPS调度吞吐下,HUSE可以实现平均21ms的容器调度延迟 传统文件系统 (性能+安全隔离差) ROFS (性能提升一倍+安全) 容器资源分配 (分钟级别) 容器资源缓存 (0ms) WarmPool (100%资源冗余) 冷启动 (0资源冗余) create +start checkpoint +restore NanoVisor 轻量级Hypervisor,进行syscallinterception和 hostsyscall加速 多平台支持 ARM(鲲鹏)、Hygon/AMD 性能 火焰图热点分析、Goruntime增强、引入高性 能用户态协议栈(TLDK/DPDK,引入CGO) 应用场景 FaaS、增强基础设施安全、增强容器平台安 全、快速扩缩容 ReadOnlyFileSystem(ROFS) 容器镜像文件不再需要解压为一个host上的目录并bindmount到容器内,而是使用ROFS可以解析的格式。 容器创建的时候,镜像文件在runsc-sandbox进程之外打开,并在sandbox进程内直接mmap,对镜像中文件的所有操作直接变成内存操作,而不需要调用系统调用操作host上的文件。 Create+Start容器 符合OCI标准的容器运行时包含create和start两个容器启动相关的接口 create是根据容器镜像和配置文件创建容器运行的环境,对应NanoVisor容器沙箱的创建和应用程序内核的初始化;start则是启动容器,对应NanoVisor容器沙箱内一号进程(NodejsRuntime)的创建和启动。 制作checkpoint种子 首先按照传统方式创建、启动一个容器,等待容器内的NodejsRuntime初始化完成之后,使用checkpoint技术对NodejsRuntime进程和应用程序内核sentry进行状态、数据的保存。 Restore容器 在容器启动阶段,我们使用restore来进行容器启动,直接利用之前保存好的进程、内核状态和数据进行恢复,不再需要重新初始化NodejsRuntime。 在恢复完成之后,NodejsRuntime就可以立刻进行业务逻辑处理。 FaaS函数容器落地开销 -启动速度<90ms -内存开销<1MB 蚂蚁对第三代容器运行时的期待:安全容器发于安全,而归于性能成本——10x Runsc(NanoVisor) 负责实现函数生命周期的管理,快速启动函数容器 函数容器(runscsandbox) 函数容器是一个完全隔离的runsc沙箱环境,配置有 ACL规则和虚拟的vethpair网卡 Bridge+eBPF 函数容器的vethpair挂在bridge上,通过eBPF进行 高效网络过滤、控制和转发 函数程序 运行在虚拟化的guest态,它的系统调用会被 sentry(运行在guestkernel态和hostkernel态)处理和响应。 NanoVisor 提供了一个Go语言编写的应用程序内核sentry, 它会处理所有函数实例的系统调用。 sentry本身的系统调用由seccomp进行限制。 nanovm虚拟化 轻量级的vmm管理,它是host上的一个内核模 块。 •网络行为审计(网络相关的操作,如connect,accept,recvmsg等) •DNS请求审计、拦截 •端口监听管控 •基于五元组的信息的四层网络管控 •代理服务访问 (func2func、DB、OSS、云服务等) •公网访问 •用户租户VPC访问 •其它出口网络 蚂蚁FaaS的体验优化 01 研发体验 02 运维体验 创建函数 发布函数 测试函数 FaaS研发体验:代码快写快发,10S内完成一个函数上线 6年级小朋友5分钟现场完成字支付宝小程序+FaaS云函数研发 链路 日志 指标 告警 FaaS研发效能:Serverless一站式平台、免运维、自动集成监控告警 低成本 安全保障 研发效能 运维效率 •内存开销<1MB •启动速度<90ms •用户只为流量付费 •下一代安全容器 •免鉴权调用 •纯业务、快写开发 •无应用申请流程 •无碎片代码和版本 •Serverless一站式平台 •免运维 •自动集成监控告警等 FaaS的实践和收益 01 典型FaaS实践案例 02 FaaS带来的收益和改变 典型FaaS实践案例MaaSOnFaaS MaaS面临的问题 •定制化监控分析及使用场景多,对于差异化诉求,难以平台化支持及快速响应。 •监控数据抽象不足,用户难以标准化、便捷的使用监控实体模型及时序数据。 •监控及风险领域的AIOps平台架构缺少重要一环,即单场景及多个单场景运维模块串联的流程化AI运维能力 典型FaaS实践案例MaaSOnFaaS 体系无缝整合 与现有应用框架及中间件打通 函数式运维能力升级 支持流量调拨、金丝雀发布等 风险平台能力整合 函数监控,灰度、流量、 变更等平台能力整合 MaaS通用模块下沉,业务部分重构为垂直样板间,快速构建标准化FaaS研发平台 研发团队情况 •4位前端同学,同时维护前后端及函数代码;相对编程能力较弱。 •一位后端同学,维护阿里云应用 业务痛点 •业务需求多:客户业务快速发展,业务需求频繁,但现在后端服务发布或者小程序发布流程都比较复杂,难于快速响应业务需求。 •研发门槛较高:希望尽量降低研发门槛,比如更简单便捷的监控,业务链路的自动串联等等。 •云成本较高:希望尽量降低研发成本,希望支付宝小程序云能够进一步降低服务器的成本。 核心诉求 •统一技术栈以及较低的研发门槛 •快速业务研发与发布 •运维托管和流量波动下的动态扩缩容 成果收益 •研发迭代速度显著提升 •新需求的发布时间从原来需要数天时间,成功缩短至仅需数小时即可全部完成 •计费成本更低 未来展望 01 极致性能 02 极致效能 极致性能 极致效能 FORKAIGC Checkpoint +restore (90ms) runtimefork (3.5ms) runtime+codefork (3.5ms) AI函数开发 自然语言对话 业务代码生成 语义式检索 模版及组件导购 风险托管 流程自动化 蚂蚁NLPGPT,CodeGPT,OpsGPT,……