阿里云 FaaS 架构设计与创新实践

简介: 介绍 Serverless 技术架构设计上遇到的难点,包括超大规模并发调用、瞬时突发调用、 冷启动、 容灾方案、资源成本控制等话题。分享如何提升资源使用率、设计研发大规模并发下的低延迟低资源调度解决方案。

作者 | 朱鹏,阿里云 Serverless 技术专家


基于 ECS 的 FaaS


在阿里云传统架构,用户通过互联网进入到负载均衡系统中,再通过负载均衡把系统的请求调度到不同的机器上去。这种传统的架构带来的问题比较多,一方面是多应用配比比例容易失衡,造成资源浪费;另一方面是镜像升级比较繁琐,整个过程的开机速度在分钟级,扩容速度也相对较慢。


架构设计


基于 ECS 的 FaaS 架构设计同样也是通过互联网进入,落到 SLB 负载均衡上。SLB 负载均衡这个系统是部署在阿里云内部的,主要用于抵挡 DDoS 攻击及请求均衡到多台 api server 上。api server 再发起函数的 CRUD 操作,并向 Scheduler 申请容器。Scheduler 管理容器在 worker 的放置,请求落在容器上的调度分发。用户所在 worker 就是我们称之为的计算节点,如果需要访问用户的 VPC 环境则在计算节点上通过 ENI 网卡打通到用户 VPC 环境。


1.png.pngimage.gif


多租户多应用部署的支持


namespace 是 linux 前几年推出的一个资源隔离方案,可以在内核层面做一些设置指定一部分进程固定。并且可以在 cgroup 的这一套设置方案里设置,控制资源的访问。在 namespace、cgroup 整套方案下,衍生出了 container,社区中常用的的 Docker 方案把镜像操作系统中的很多细节包装成一个方案,用户看到了一个相对比较完整的操作系统,把用户当成一个单个用户放置在虚拟机当中。这就是一个 vm,相当于说一台 ECS,这里就是操作系统层面,把整个 cpu、memory、包括设备全部给屏蔽掉,在上面用 cgroup 封一层,对应的就是 Docker 容器。


2.png


应用放置策略包括用户独占虚拟机、同 VPC 独占虚拟机、资源访问权限一致的 APP 混部在同机器。把两个不同的用户混在一个 vm 下,也就是 ECS 上面,对于用户之间来说是存在风险的。为了屏蔽掉共用 kernel 带来的风险,ECS 上的实现,我们单个 ECS 只有一个租户,这样处理也存在一些问题,最突出的就是对于低频调用函数资源使用率低。


快速水平弹性扩容


如何做到水平弹性扩容?


1、通过应用容器部署,可以定制一些特别的语言、Runtime 容器、通用 LIB/SDK,并保持社区生态一致,这样就不需要另外去下载,用户用起来也比较方便,启动速度也非常快。


2、 通过设置公共容器镜像、容器镜像写入 ECS 镜像、ECS 镜像启动机器、快速补充机器池等控制机器资源池,从而能够兼顾性能与成本。


3、在池化的机器中池化容器创建、代码目录延迟挂载、提前启动 runtime、提前 health check,用户请求来临的时候需要启动的时间会变得更短。


4、通过限制用户应用大小、鼓励拆分业务逻辑、内置 SDK/Lib 来控制应用大小。


5、通过 P2P 镜像分发、避免对下载服务造成冲击、按需加载、降低下载延迟、提升启动速度等完成 P2P 镜像下载加速。


3.png


如何提升资源使用率?


在实际研发过程中发现,相同 QPS 下单位时间片内调度对资源量的影响非常大,我们可以通过调度提升资源使用率。例如在下图中,我们看到宏观状态下的整体 TPS 是非常稳定的,然而事实上,我们放大到毫秒级别会发现,其实非常不均匀!那么这种不均匀到底会给我们带来什么影响?


4.png


假设我们每个容器被设置的最大并发度为 1,即任意时刻一个容器只处理一个任务。下图展示了  a,b,c,d,e,f  多个请求在不同时刻点被调度时对容器数目的影响。


5.png


可以看到场景一时,每个请求均匀打入时,任意时刻只需要一个容器就够了,这种情况就是我们理想中希望能达到的;


而在场景二下,如果调度发生了滞后,可能导致前置的请求和后来的请求混到了一个时间点,导致容器数目翻倍,在中间的空白处,这些容器又没有被充分利用造成了资源的浪费;


在场景三下,如果容器启动耗时较长,或者调用耗时变长,原来的 b 请求会和 a 请求出现时间上的叠加,导致又需要创建新的容器,而新的容器如果需要较长时间的冷启动, 又会导致和 c 请求出现时间上的叠加。如果调度系统实现得不够好,这样一来就可能产生雪崩效应,导致资源使用量暴涨,而实际使用率却极其低下。


通过上面几个场景,我们可以大致为资源使用率的开销上总结一个优化方向:


  1. 尽可能让调度更均匀、更合理,避免扎堆唤起容器
  2. 尽可能降低冷启动时长,避免短期大量容器都处于创建当中,避免无意义的系统调度开销
  3. 除了上述外,我们还可以考虑高密部署,将单机的资源使用率提升上去


如何容灾、防止雪崩?


在实际操作中发生异常的时候,用户请求会出错,出错后会重启或调动新资源创建新的容器,但这样会导致整个延迟增大。用户有又会重复尝试,重复尝试则会导致负载升高,从而又引起异常,如此恶性循环。可以通过优化启动速度、多 Partition 容灾部署、指数退避重试、Breaker 阻断异常请求、多可用区备灾、SLB 阻断 DDoS 攻击来防止雪崩。


基于神龙高密部署的 FaaS


为什么需要做高密部署?


一是因为弹性启动速度要求高,希望做到每秒1万个容器实例的启动、启动延迟控制在300毫秒以内、容器的存活时间在分钟级别、资源粒度128MB;


二是成本更低,ECS 架构因安全隔离问题资源碎片多,突发调用延迟高,影响资源数目;


三是性能,ECS 单机缓存少、请求毛刺率较高、请求最大延迟高;


四是稳定性,高并发对系统冲击、频繁的创建删除资源、ECS 管控压力,爆炸半径难以控制。


高密部署架构带来的技术难题


整个高密部署架构带来的一些技术难题:


首先要面对的是如何解决单机多租户隔离安全风险,如果不解决这个问题那么就无法做到单机多租户的安全高密部署,这样资源使用率密度无法有效提升;


其次是如何解决高并发下启动速度问题,如果无法做到这点,如我们前面所提到的,冷启动时间较长会严重加剧资源的开销,同时严重影响用户延迟体验;


再就是如何解决单机多租户 VPC 网络打通及安全问题,这一点其实非常重要,我们在 ECS 上建立 VPC 网络连接的速度非常慢,这也严重影响了用户冷启动及资源的使用;


另外我们还需要考虑如何设计高密部署下的技术容灾方案,因为任何一个计算节点的异常会带来大量用户的服务异常。


基于安全容器模板技术的优化


我们是如何做到基于安全容器模板技术的优化的?每个容器独占一个虚拟机沙箱,这个沙箱相当于是一个独立的虚拟机,有自己独立的 linux 内核,这样一来每个容器都是通过独立的 kernel 来做安全隔离。神龙启动时模板化大量虚拟机用于提升启动速度,通过 virtiofs 延迟挂载用户代码目录,通过虚拟机微内核隔离用户,可以做到单台机上每个微内核 20M 左右的内存,单机至少 2000 个容器,控制它的冷启动时间是在 250 毫秒左右。通过调度算法,我们可以合理地使用资源,承诺用户的资源 quota。


6.png


代码按需加载


代码按需加载是通过以下几个方面做到的:用户容器会重复使用同一份代码,单台神龙只需下载一次;脚本语言包含了大量用不到的代码;使用使用 FUSE(用户空间文件系统)来做中间层文件的真实读取;底层使用 NAS 做低延迟的数据下载;OSS(阿里云对象存储)做高带宽支持的数据下载。注意到,我们这里混用了 NAS 及 OSS 一同来做代码的加载,需要注意的是,NAS 的访问延迟相对而言更低,对于小文件的加载更快。我们在加载初始阶段开始全量异步从 OSS 下载代码。而对于需要立即访问的数据,我们则从 NAS 上读取。由于我们将整个用户代码目录做成了两个文件:一个为目录文件索引数据,另一个为文件内容数据。由于 NAS 访问延迟低,我们可以通过类似 GetRange 的方式去数据文件上获取小文件内容。这样就可以用最快的速度即时加载用户代码来达到快速冷启动了。

image.gif

7.png


VPC 网络优化


基于网络服务网格的 VPC 网关代理是通过用户VPC网络安全隔离。我们过去在 ECS 方案上插拔 ENI 网卡非常耗时,至少需要 2~3s,P99 甚至达到 6~8s。在高密部署的神龙方案上,我们没有必要为每个安全容器做多次网卡插拔,只需要在神龙机器上统一打通到网关代理,而用户 ENI 网卡常驻在网关集群上,这样整个网卡的加载速度会变得很快。这样对于用户体验和资源开销都会是一个巨大的优化。


8.png


资源分配率


通过混合部署多租户各类业务提升部署密度,合理配比不同资源需求的容器到一台物理神龙,从而提升资源分配率。


9.png


视频解析


点击此处,查看直播视频回放!

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
5月前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
364 56
|
5月前
|
机器学习/深度学习 人工智能 Serverless
吉利汽车携手阿里云函数计算,打造新一代 AI 座舱推理引擎
当前吉利汽车研究院人工智能团队承担了吉利汽车座舱 AI 智能化的方案建设,在和阿里云的合作中,基于星睿智算中心 2.0 的 23.5EFLOPS 强大算力,构建 AI 混合云架构,面向百万级用户的实时推理计算引入阿里云函数计算的 Serverless GPU 算力集群,共同为智能座舱的交互和娱乐功能提供大模型推理业务服务,涵盖的场景如针对模糊指令的复杂意图解析、文生图、情感 TTS 等。
|
5月前
|
存储 运维 分布式计算
零售数据湖的进化之路:滔搏从Lambda架构到阿里云Flink+Paimon统一架构的实战实践
在数字化浪潮席卷全球的今天,传统零售企业面临着前所未有的技术挑战和转型压力。本文整理自 Flink Forward Asia 2025 城市巡回上海站,滔搏技术负责人分享了滔搏从传统 Lambda 架构向阿里云实时计算 Flink 版+Paimon 统一架构转型的完整实战历程。这不仅是一次技术架构的重大升级,更是中国零售企业拥抱实时数据湖仓一体化的典型案例。
385 0
|
6月前
|
人工智能 Cloud Native 安全
解读阿里云刚发布的《AI 原生应用架构白皮书》
阿里云在云栖大会重磅发布了《AI 原生应用架构白皮书》,该白皮书覆盖 AI 原生应用的 11 大关键要素,获得业界 15 位专家联名推荐,来自 40 多位一线工程师实践心得,全书合计超 20w 字,分为 11 章,全面、系统地解构 AI 原生应用架构,包含了 AI 原生应用的 11 大关键要素,模型、框架、提示词、RAG、记忆、工具、网关、运行时、可观测、评估和安全。本文整理自阿里云智能技术专家李艳林在云栖大会现场的解读。
2490 70
|
5月前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
6月前
|
人工智能 缓存 安全
阿里云发布《AI 原生应用架构白皮书》
阿里云联合阿里巴巴爱橙科技,共同发布《AI 原生应用架构白皮书》,围绕 AI 原生应用的 DevOps 全生命周期,从架构设计、技术选型、工程实践到运维优化,对概念和重难点进行系统的拆解,并尝试提供一些解题思路。白皮书覆盖 AI 原生应用的 11 大关键要素,获得 15 位业界专家联名推荐,来自 40 多位一线工程师实践心的,全书合计超 20w 字,分为 11 章。
3416 60
|
6月前
|
消息中间件 运维 监控
爆款游戏背后:尚娱如何借助阿里云 Kafka Serverless 轻松驾驭“潮汐流量”?
阿里云 Kafka 不仅为尚娱提供了高可靠、低延迟的消息通道,更通过 Serverless 弹性架构实现了资源利用率和成本效益的双重优化,助力尚娱在快速迭代的游戏市场中实现敏捷运营、稳定交付与可持续增长。
293 62
|
6月前
|
人工智能 机器人 Serverless
安诺机器人 X 阿里云函数计算 AI 咖啡印花解决方案
当云计算遇见具身智能,AI咖啡开启零售新体验。用户通过手机生成个性化图像,云端AI快速渲染,机器人精准复刻于咖啡奶泡之上,90秒内完成一杯可饮用的艺术品。该方案融合阿里云FunctionAI生图能力与安诺机器人高精度执行系统,实现AIGC创意到实体呈现的闭环,为线下零售提供低成本、高互动、易部署的智能化升级路径,已在商场、机场、展馆等场景落地应用。
安诺机器人 X 阿里云函数计算 AI 咖啡印花解决方案

相关产品

  • 函数计算