探索云原生世界:Serverless 技术的崛起与应用

在云原生架构的浪潮中,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 技术将成为未来云原生架构的重要支柱之一,推动企业数字化转型的进程。

相关推荐
运维&陈同学16 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
Code_Artist19 小时前
使用Portainer来管理并编排Docker容器
docker·云原生·容器
梅见十柒1 天前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
运维&陈同学1 天前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列
O&REO1 天前
单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
云原生·容器·kubernetes
运维小文1 天前
K8S资源限制之LimitRange
云原生·容器·kubernetes·k8s资源限制
wuxingge1 天前
k8s1.30.0高可用集群部署
云原生·容器·kubernetes
志凌海纳SmartX2 天前
趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
云原生·容器·kubernetes
锅总2 天前
nacos与k8s service健康检查详解
云原生·容器·kubernetes
BUG弄潮儿2 天前
k8s 集群安装
云原生·容器·kubernetes