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

相关推荐
GJCTYU1 小时前
阿里云多端低代码开发平台魔笔使用测评
低代码·阿里云·云原生·容器·serverless·云计算
YCyjs12 小时前
K8S群集调度二
云原生·容器·kubernetes
Hoxy.R12 小时前
K8s小白入门
云原生·容器·kubernetes
为什么这亚子18 小时前
九、Go语言快速入门之map
运维·开发语言·后端·算法·云原生·golang·云计算
ZHOU西口20 小时前
微服务实战系列之玩转Docker(十八)
分布式·docker·云原生·架构·数据安全·etcd·rbac
牛角上的男孩20 小时前
Istio Gateway发布服务
云原生·gateway·istio
JuiceFS1 天前
好未来:多云环境下基于 JuiceFS 建设低运维模型仓库
运维·云原生
景天科技苑1 天前
【云原生开发】K8S多集群资源管理平台架构设计
云原生·容器·kubernetes·k8s·云原生开发·k8s管理系统
wclass-zhengge1 天前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇1 天前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决