无服务器技术:特性、优势与发展模式
立即解锁
发布时间: 2025-09-05 00:37:32 阅读量: 9 订阅数: 28 AIGC 


无服务器架构实战指南
### 无服务器技术:特性、优势与发展模式
#### 1. 无服务器技术概述
无服务器技术是利用完全托管的云服务来执行任务的概念,它将基础设施的复杂性和服务器维护任务抽象化。早期,特别是在AWS Lambda发布后,很多人将无服务器和函数即服务(FaaS)混为一谈,但如今FaaS只是无服务器生态系统中的一种服务类型。无服务器技术的定义通常反映了无服务器应用的主要特征,随着其发展和广泛应用,这些特征也在不断完善和重新定义。
#### 2. 无服务器技术的特性
- **按使用付费**:这是无服务器最主要的特征,源于早期无服务器与FaaS的等同概念,即按函数调用次数付费。对于像AWS Lambda这样的临时服务,这种计费方式很适用。但如果应用需要处理数据并长期存储,像Amazon DynamoDB和Amazon S3这样的完全托管服务,会根据每月存储的数据量(通常以GiB为单位)收费,不过仍是基于数据量的按使用付费,而非对整个磁盘驱动器或存储阵列收费。例如,一个简单的无服务器应用中,Lambda函数对DynamoDB表中的数据进行操作,Lambda函数按调用次数和内存消耗付费,DynamoDB除了读写数据的API调用按使用付费外,还需为存储数据的空间付费。
- **自动伸缩和缩容至零**:完全托管服务的一个主要特性是能够根据需求自动伸缩,无需人工干预。“缩容至零”是无服务器特有的概念,以Lambda函数为例,AWS Lambda管理运行函数的基础设施。当函数结束且不再使用时,经过一定的闲置期,服务会回收运行该函数的资源,将执行环境数量缩容至零。相反,当对Lambda函数的请求量很大时,AWS会自动扩展基础设施,按需运行多个并发的执行环境实例,以满足需求,这通常被称为无限扩展,但总容量实际上取决于账户的并发限制。此外,还可以通过设置函数的预配置并发值,让一定数量的函数容器保持“热”状态,随时准备运行。
- **Lambda函数执行环境**:当调用Lambda函数时,AWS Lambda服务会在执行环境中运行函数代码。执行环境运行在名为Firecracker的硬件虚拟化虚拟机(MicroVM)上,为函数执行提供安全且隔离的运行时环境,它由函数代码、任何扩展、临时本地文件系统空间和语言运行时组成。一个执行环境与一个Lambda函数关联,不会在函数之间共享。
- **Lambda函数超时**:目前,Lambda函数的最大执行时间为15分钟,这通常被称为超时时间。在开发Lambda函数时,可以将超时时间设置为最长15分钟的任意值,根据函数完成逻辑执行所需的时间来设置该值,并期望函数在超时前完成。如果函数在达到设置的超时时间时仍在执行,AWS Lambda服务将终止它。
- **高可用性**:高可用(HA)应用通过添加冗余来避免单点故障。对于商业应用,服务级别协议(SLA)以百分比形式规定可用性。在无服务器中,由于使用完全托管服务,AWS通过在多个可用区(AZ)分布计算和存储资源来处理冗余和数据复制,从而避免单点故障。因此,采用无服务器技术可以直接获得高可用性。
- **冷启动**:冷启动通常与FaaS相关。例如,当AWS Lambda函数闲置一段时间后,其执行环境会关闭。如果函数在闲置一段时间后再次被调用,AWS会配置一个新的执行环境来运行它,这个初始设置的延迟通常称为冷启动时间。函数执行完成后,Lambda服务会在不确定的时间段内保留执行环境。如果在此期间再次调用该函数,不会产生冷启动延迟,但如果有额外的并发调用,Lambda服务会为每个并发调用配置一个新的执行环境,从而导致冷启动。冷启动的初始延迟受多种因素影响,如函数部署包的大小、编程语言的运行时环境、分配给函数的内存(RAM)、预配置的数量(如静态数据初始化)等。
#### 3. 无服务器技术的独特优势
- **资源的个性化和细粒度配置**:“一刀切”的方式不适用于无服务器。能够在单个级别配置和操作无服务器服务,使我们可以从每个资源的层面看待无服务器应用,而不仅仅是将其作为一个整体。与传统容器应用不同,不再需要在容器级别设置一组通用的操作特性。例如,应用中有多个Lambda函数,一些处理网站的用户请求,另一些在后端执行批处理作业。可以为面向用户的函数提供更多内存,使其能够快速响应,而为后端批处理作业函数选择更长的超时时间,因为这些函数对性能要求不高。对于Amazon Simple Queue Service(SQS)队列,可以配置消息处理的速度,或者决定消息何时可用于处理。每个SQS队列有多个属性,可以根据需要调整这些值来配置队列。当构建使用多个资源(如Lambda函数、SQS队列、DynamoDB表、S3存储桶等)的应用时,可以根据业务和操作需求灵活调整每个资源的行为。
- **服务的成本、性能和可持续性优化能力**
- **深度优化**:无服务器应用由多个托管服务组成,可能包含来自同一托管服务的多个资源。例如,在一个应用中可能有多个来自AWS Lambda服务的函数,不需要以相同的方式优化所有函数,可以根据需求对一个函数进行性能优化,对另一个进行成本优化,或者为一个函数设置比其他函数更长的超时时间,也可以允许不同的并发执行需求。对于其他资源(如队列、表、API等),也可以根据其特性应用相同的原则。如果有多个微服务,每个微服务包含多个无服务器资源,可以对每个
0
0
复制全文
相关推荐





