一、Serverless Computing技术特点
Serverless Computing 是介于基础云计算平台和上层用户应用之间的新层次,通过函数计算提供通用计算能力。这种新型计算模式具有以下几个典型特点:
第一,无需进行底层运维管理,所有运维交由云提供商进行,上层业务人员仅需关注业务本身逻辑。
第二,采用 Pay-as-you-go 计费模式,无需长时间租用服务器。
第三,按需资源扩展,需要多少资源则使用多少资源。
第四,事件驱动,可以提供更加灵活函数和容器调度。
想要实现以上目标,将会面临以下挑战。
第一,底层运维时,云提供商需要考虑如何能够实现多个租户不同函数之间高效隔离,保证其安全性。
第二,因为事件驱动内在调用方式,需要保在新型函数调用方式下实现快速响应。
第三,如何实现高效的任务调度,提高云计算平台资源利用率。
针对以上挑战,我们需要解决以下几个问题:
第一,如何将底层各式各样的硬件进行高效抽象?基于抽象即可设计高效的隔离策略。
第二,如何权衡性能和资源问题,分配给函数多少资源能够恰好满足性能需求?
第三,需要在整个云层面、集群层面进行高效的负载均衡,提高其资源利用率。
二、Serverless Computing的分层架构
在分层结构上,我们调研了大量学术界和工业界采用 Serverless Computing 的平台,发现他们大多将平台分为三个层面,从下至上分别为虚拟化层、封装层和系统层。系统层又可以进一步分为协调层和编排层。
上层系统层主要负责协调和调度工作。其中协调指提供很多后台软件支持,比如数据库支持、内存数据库支持。通过后台软件,函数计算才能正确地运行。调度功能主要解决单个函数的资源扩展问题,函数调用多次,需要为其分配多少副本、多少容器才能满足性能需求,这是调度层需要解决的事情,另外,海量容器同时存在一个节点上,如何进行负载均衡也是调度层需要解决的问题。
容器封装层将用户函数调用封装在低开销的容器中运行,要避免容器本身的启动开销导致函数响应时间过长,因此涉及到预热,需要预先为函数启动好容器。
虚拟化层提供了更基础的支持,比如函数的具体实现、容器的具体实现以及资源隔离机制、计算资源、存储资源等,具体的隔离机制在虚拟化层实现。
虚拟化层有多种实现方式,可以基于容器实现资源的分配和隔离,也可以基于传统虚拟机实现资源分配和隔离。
现有的虚拟化层隔离技术基本可以分为四类,各具优缺点。
第一类:基于虚拟机的虚拟化方法。它具有更高的安全性,因为虚拟机实现了资源的完全隔离。
第二类:基于传统 runc容器。runc 容器资源开销较小,运行快,但是隔离性和安全性较差。
第三类:基于安全容器。安全容器将虚拟机技术和传统容器技术做了一定权衡,运行资源开销较小,同时隔离性和启动速度比虚拟机更好。现有的发展趋势大多为使用安全容器技术。
第四类:基于 unikernel 。兼容性较差,需要针对特定函数以及特定应用提前编译镜像,且一旦编译好之后则无法修改。
封装层需要解决容器冷启动的开销问题,我们不希望容器的启动开销造成函数运行时间急速增长。最为广泛的解决方法为容器预热技术。
容器预热技术分为两种。
独立容器预热池:该方法会为每个函数构建独立的预热容器池。但缺点在于会占用过多系统资源,因为每个容器都有自己的池,池中都需要预热一批容器为函数服务。
模板容器池:该方案会为所有函数预热同一套模板容器,里面可以运行所有函数。当函数需要容器时,会从模板池中取出容器出,对其进行特异化。特异化是指为其安装函数本身需要的各种依赖、数据。其优点在于资源占用较少,但特异化本身也存在开销,甚至可能比冷启动容器的开销更大。
系统层主要负责协调和编排工作。
目前学术界对系统层进行研究的关键问题包括:
① 复杂拓扑逻辑支持:单个函数功能非常有限,需要将多个函数将组合成有向无环DAG图以实现复杂功能。对应 Serverless Computing 平台需要提供DAG图引擎支持复杂拓扑逻辑。
② 集群资源管理器:需要实时地监控集群中各个节点上的资源使用量,保证可用性和性能稳定。
③ 负载均衡器:需要考虑应用中各个服务之间的冲突情况、数据传输压力以及资源使用量进行全局负载均衡,设计高效的调度策略满足资源利用率提升的目标。
三、Serverless Computing的未来展望
未来,Serverless Computing 会向着通用化、高效化和智能化三个方向进行发展。
通用化:除了计算,也可以设计 Serverless存储系统,设计更高效的执行架构以用于各种应用场景,不再局限于普通的计算加速。
高效化:能够做硬件异构硬件的统一抽象,使得 Serverless Computing平台不仅支持 CPU 上的函数,也可以使用 GPU 、神经网络加速器等各种异构硬件,做统的一抽象和管理。研究预热模板和应用画像的结合,尽量使用最少的资源满足每一个函数都可以获得热容器的目标。
智能化:指导容器规格“恰好合适”,需要知道为每个容器分配多少 CPU 资源和内存资源可以刚刚好达到预期目标,保证资源不浪费的同时也保证了延迟。实现Serverless混部的 SLA 保障,成千上万个容器混合在一个物理节点上,互相之间会存在严重的资源竞争。如何在混合部署的情况下控制容器之间的冲突,也是未来需要探索的方向。
关于龙蜥峰会 eBPF & Linux 稳定性专场课件获取方式:
【PPT 课件获取】:关注微信公众号(OpenAnolis),回复“龙蜥课件” 即可获取。有任何疑问请随时咨询龙蜥助手—小龙(微信:openanolis_assis)。
【视频回放】:视频回放可前往龙蜥官网https://openanolis.cn/video 查看。