在云原生架构的浪潮中,Serverless 技术正逐渐崭露头角,成为开发者们极具吸引力的选择。Serverless 的出现颠覆了传统的服务器管理模式,为应用开发带来了全新的可能性。
Serverless 架构是一种无需管理服务器的新型架构,它允许开发人员专注于编写代码,而无需关心服务器的运行和维护。Serverless 技术可以自动扩展和缩减资源,降低运营成本,提高开发效率。Serverless 技术真正做到了在部署应用时无须涉及基础设施的建设,自动构建、部署和启动服务。
IaaS(Infrastructure as a Service,基础设施即服务)和容器技术是云的基础设施,可以为上层应用的运行提供海量低成本的计算资源。以 Kubernetes 为代表的容器编排服务是支撑云原生应用的操作系统,负责高校管理基础设施资源。面向特定领域的后端云服务(Backend as a Service,BaaS)提供了性能高度优化、抽象度更高的 API,成为构建云原生应用的重要元素。随着云原生的发展,存储、数据库、中间件、大数据、AI 等领域出现了越来越多的全托管、Serverless 形态的云服务,而不是自建存储系统和部署数据库软件。
1、Serverless 技术简介
Serverless 技术是一种计算模型,它让开发者无须关心服务器的管理和维护,而是专注于编写业务逻辑,在Serverless 模型中,开发者只需要编写函数,并将其上传云平台,云服务提供商会自动管理函数的运行环境,并根据函数的出发事件动态分配和释放资源。
FaaS(Function as a Service,功能即服务)是 Serverless 中最具代表性的服务形态,它把应用逻辑拆分为多个函数,并通过事件驱动的方式出发执行每个函数。FaaS 这种 Serverless 形态非常适合事件驱动的数据处理、API 服务等场景,但也面临着一些挑战。
2、Serverless 的特点
Serverless 消除了服务器等底层基础设施的运维复杂度,让开发人员能够更好地专注于业务逻辑的设计与实现,包含以下特点:
全托管的计算服务
客户只需要编写代码构建应用,而无须关注同质化的、负担繁重的服务器等基础设施的开发和运维等工作。
通用性
结合丰富的 BaaS 云服务能力,支持云上所有重要类型的应用。
自动的弹性伸缩
云平台会根据函数的出发事件动态调整资源,以满足应用的需求,大幅度降低用户资源容量规划的难度。
按量计费
开发者只需要为实际使用的资源付费,而不需要预先购买或租用服务器,企业的使用成本得到有效降低,无须为闲置资源付费。
事件驱动
Serverless 函数通常是通过事件触发器来执行的,比如 HTTP 请求、消息队列等。
3、Serverless 典型技术与架构
计算资源弹性调度
为了实现精准、即时的实例伸缩和放置,需要把应用负载的特征作为资源调度的依据,使用"白盒"调度策略,由 Serverless 平台负责管理应用所需的计算资源。平台要能够识别应用负载的特征,在负载快速上升时,及时扩容计算资源,保证应用性能的稳定性;在负载下降时,及时回收计算资源,加快资源在不同账户函数间的流转,提高数据中心的利用率。因此,更实时、更主动、更智能的弹性伸缩能力是函数计算服务获得良好用户体验的关键。计算资源的弹性调度,可以帮助用户实现指标收集、在线决策、离线分析、决策优化的闭环。
在创建新实例时,系统需要判断如何将应用实例放置在下层计算节点上。放置算法应当满足多方面的目标,具体列举如下:
- 容错:当有多个实例时,将其分布在不同的计算节点和可用区上,以提高应用的可用性
- 资源利用率:在不损失性能的前提下,将计算密集型、I/O密集型等应用调度到相同的计算节点上,尽可能充分地利用节点的计算、存储和网络资源,动态迁移不同节点上的碎片化实例,进行"碎片整理",以提高资源的利用率
- 性能:例如,复用启动相同应用实例或函数的节点,利用缓存数据缩短应用的启动时间等
- 数据驱动:除了在线调度之外,系统还可以将天、周或更大时间范围的数据用于离线分析。离线分析的目的是利用全量数据验证在线调度算法的效果,为参数调优提供依据,通过数据驱动的方式加快资源流转的速度,提高集群整体资源的利用率
流量控制
在多租户环境下,流量控制是保证服务质量的关键。以函数计算为例,当函数调用量超过预期值时,如果问题是函数逻辑错误导致大量的非预期调用,那么系统应当及时进行流量控制,以确保用户的费用可控。函数计算允许用户配置最大函数运行实例数来限制应用负载。当应用负载上升、系统扩容时,如果函数实例数到达配额上限,那么系统将停止扩容并返回流控错误。除了用户层面的流量控制,当函数的负载动态变化导致系统节点过载时,也应当及时进行流量控制,以避免用户间互相影响。例如,当多个用户流量陡增、超过节点服务能力时,即使每个用户都未用满配额,系统也需要控制流量。该场景下的流量控制不但要及时,而且要公平。流量陡增越大的函数,计算请求被流量控制的概率应当越高。
安全性
Serverless 计算平台的定位是通用计算服务,要能够执行任意用户代码,因此安全是不可逾越的底线。系统应当从权限管理、网络安全、数据安全、运行时安全等各个维度全面保障应用的安全性。轻量安全容器等新的虚拟化技术实现了更小的资源隔离粒度、更快的启动速度以及更小的系统开销,使数据中心的资源使用变得更加细粒度和动态化,大幅提升了资源的使用效率。
4、Serverless 的应用场景
当前 Serverless 主要应用场景如下:
Web 应用开发
Serverless 可以用于构建轻量级的后端服务,支持无服务器的前后端分离架构。
数据处理与分析
Serverless 可以用于处理大规模数据,比如实时数据处理、ETL 任务等。
事件驱动的应用
Serverless 函数可以根据事件触发器执行,适用于处理异步事件和定时任务。
5、Serverless 的未来展望
随着云原生技术的不断发展,Serverless 技术也将迎来更广阔的应用场景和发展场景,未来,可以预见 Serverless 将成为云原生架构的重要组成部分,为开发者提供更简单、更灵活、更高效的开发方式。
Serverless 技术的崛起标志着云原生时代的来临,它将为应用开发带来全新的变革,随着越来越多的开发者和企业采用 Serverless 技术,我相信 Serverless 技术将成为未来云原生架构的重要支柱之一,推动企业数字化转型的进程。