无服务器并不意味着“没有服务器”。
尽管名称如此,无服务器计算中的服务器是由云服务供应商 (CSP) 管理的。“无服务器”描述的是开发人员对于这些服务器的体验,他们感受不到这些服务器的存在,不会看到、管理服务器或以任何方式与服务器交互。
开发人员可以利用无服务器计算专注于编写最佳前端应用程序代码和业务逻辑。他们所需要做的就是编写应用程序代码,并将其部署到由 CSP 管理的容器中。
云供应商负责处理其余工作 - 提供运行代码所需的云基础设施,并根据需要扩展或收缩基础设施规模 - 还负责所有日常基础设施管理和维护工作,如操作系统更新和修补、安全管理、容量规划、系统监控等。
此外,开发人员无需为无服务器的闲置容量付费。执行代码时,云供应商会启动并按需配置所需的计算资源,并在执行停止时快速停止计数资源(称为“缩放到零”)。计费从执行开始,到执行停止时结束;定价通常会基于执行时间和所需资源。
与
基础设施即服务 (IaaS)
、
平台即服务 (PaaS)
、
功能即服务 (FaaS)
和
软件即服务 (SaaS)
一起,无服务器已成为领先的云服务产品。根据 SkyQuest Technology 的报告,2022 年全球无服务器架构市场规模为 80.1 亿美元;从 2023 年到 2031 年,预计将从 98.4 亿美元增长到 508.6 亿美元
1
。目前,每个领先的云服务供应商都提供无服务器平台,包括 Amazon Web Services (AWS Lambda)、Microsoft Azure (Azure Functions)、Google Cloud (Google Cloud Functions) 和 IBM Cloud (IBM Cloud Code Engine)。
无服务器计算、
微服务
和
容器
共同构成了
云原生
应用程序开发核心技术的三驾马车。
观看此视频详细了解无服务器和无服务器堆栈 (6:37)。
无服务器起源于 2008 年,当时 Google 发布了 Google App Engine (GAE),这是一个在 Google 管理的
数据中心
开发和托管 Web 应用程序的平台。借助 GAE,软件开发人员可以在 Google 云上创建和发布软件,而不必担心交由 Google 处理的修补或
负载平衡
等服务器管理任务。
“无服务器”一词首次出现在云计算专家 Ken Fromm 于 2012 年撰写的一篇技术文章中
2
。2014 年,Amazon 推出了首个无服务器平台 AWS Lambda。AWS Lambda 是一种 FaaS 模型,以 lambda 演算和编程中的函数命名,它使无服务器计算框架能够在无需服务器管理的情况下执行代码来响应事件,从而帮助无服务器计算框架获得大众市场的青睐,并在软件开发人员中快速采用。2016 年,Microsoft Azure Functions 和 Google Cloud Functions 推出了各自的无服务器平台。
当今无服务器平台市场的其他主要参与者包括 IBM® Cloud Code Engine、Oracle Cloud Infrastructure (OCI) Functions、Cloudflare Workers 和阿里云 Function Compute。
无服务器不仅仅是功能即服务 (FaaS) -
云计算服务,它使开发人员可以运行代码或容器来响应特定事件或请求,而无需指定或管理运行代码所需的基础架构。
FaaS 是无服务器的核心计算模型,两个术语通常可以互换使用。无服务器是完整的服务堆栈,可以响应特定的事件或请求,并在不再使用时缩放到零,其配置、管理和计费工作均由云供应商负责,无需开发人员处理。
除了 FaaS 之外,这些服务还包括数据库和存储、
应用程序编程接口 (API)
网关和事件驱动型架构。
由于无服务器、平台即服务 (PaaS)、容器和
虚拟机 (VM)
在云应用程序开发和计算生态系统方面都发挥着至关重要的作用,所以比较无服务器和其他模式在某些关键属性方面的差异很有帮助。
-
配置时间:
无服务器的配置时间以毫秒计,而其他模式则以分钟或小时计。
-
管理负担:
无服务器没有任何管理负担,相比之下,PaaS、容器和虚拟机的管理负担则分别为较轻、中等和较重。
-
维护:
无服务器架构 100% 由 CSP 管理。PaaS 也是如此,但容器和虚拟机需要大量维护,包括更新/管理操作系统、容器映像、连接等。
-
缩放:
自动缩放(包括自动缩放到零)是无服务器的固有特性,可即时实现。其他模式也提供自动缩放功能,但速度缓慢,需要仔细调整自动缩放规则,并且不能缩放到零。
-
容量规划:
无服务器无需进行容量规划。其他模式则需要混合使用一些自动可扩展性和一些容量规划。
-
无状态:
无服务器的固有特性,意味着缩放不成问题;状态在外部服务或资源中维护。PaaS、容器以及虚拟机可以利用 HTTP,长时间保持打开的套接字或连接,并在两次调用之间将状态存储在内存中。
-
高可用性 (HA) 和
灾难恢复 (DR):
无服务器提供高可用性和
灾难恢复
,无需额外的工作或额外成本。其他模型需要额外的成本和管理工作。基础设施可以通过虚拟机和容器自动重启。
-
资源利用率:
无服务器是 100% 高效的,因为它没有闲置容量 - 只有在请求时才会调用。所有其他模型都或多或少地存在容量空闲情况。
-
计费和节余:
无服务器架构会以 100 毫秒为单位进行计费。PaaS、容器和 VM 则通常按小时或分钟来计费。
Kubernetes
是一个开源容器编排平台,可自动执行容器部署、管理和扩展。其自动化功能极大地简化了
容器化
的应用程序的开发。
无服务器应用程序通常部署在容器中。但是 Kubernetes 只能通过将 Kubernetes 与特定云供应商的无服务器平台集成的专用软件独立运行无服务器应用程序。
Knative
是 Kubernetes 的开源扩展,提供无服务器框架。它使任何容器都能够在运行 Kubernetes 的任何云平台上作为无服务器工作负载运行,无论该容器是围绕无服务器功能还是其他应用程序代码(例如微服务)构建的。Knative 的工作原理是将代码抽象出来,处理网络路由、事件触发器和自动缩放,以实现无服务器执行。
Knative 对开发人员是透明的。他们使用 Kubernetes 构建容器,然后 Knative 完成剩下的工作,并将容器作为无服务器工作负载运行。
无服务器计算可为个人开发人员和企业开发团队提供众多技术优点和业务优点:
-
提高开发人员的工作效率:
如上所述,无服务器可以让开发团队专注于编写代码,而无需管理基础架构。它为开发人员提供了更多时间来创新和优化前端应用程序功能和业务逻辑。
-
仅为执行付费:
计量从发出请求时开始,并在执行完成时结束。将此与 IaaS 计算模型进行比较,在 IaaS 计算模型中,客户需要为运行应用程序所需的物理服务器、虚拟机和其他资源付费,从他们配置这些资源直到明确停用为止。
-
使用任何语言进行开发:
无服务器是一个多语言环境,使开发人员能够使用任何自己习惯的语言或框架(
Java
、Python、JavaScript、node.js)进行编码。
-
简化开发/开发运维周期:
无服务器简化了部署,从更广泛的层面上来说,简化了
开发运维
,因为开发人员不必再花时间定义所需的基础架构,以集成、测试、交付代码以及将代码各版本部署到生产环境中。
-
经济高效的性能:
对于某些工作负载来说(比如困难的并行处理、流处理、某些数据处理任务),无服务器计算相较于其他形式的计算速度更快,也更经济高效。
-
降低延迟:
在无服务器环境中,
代码可以在更靠近最终用户的地方运行,从而降低
延迟
。
-
使用情况可见性:
无服务器平台对于系统和用户时间近乎完全可见,并且可以系统地汇总使用情况信息。
虽然无服务器有很多优点,但也有必要考虑一些缺点:
-
控制较少:
在无服务器环境中,组织将服务器控制权移交给第三方 CSP,从而放弃对硬件和执行环境的管理。
-
供应商锁定:
每个服务供应商都提供与其他供应商不兼容的独特无服务器功能和特性。
-
启动缓慢:
也称为“冷启动”,启动缓慢会影响无服务器应用程序的性能和响应速度,尤其是在实时需求环境中。
-
复杂的测试和调试:
无服务器计算模型的调试可能更加复杂,因为开发人员缺乏对后端流程的可视性。
-
运行长时间应用程序的成本较高:
无服务器执行模式并非为长时间执行代码而设计。因此,长时间运行的进程可能比传统的专用服务器或 VM 环境成本更高。
虽然 CSP 提供安全措施来管理无服务器应用程序,但客户还负责根据共享责任模型保护应用程序代码和数据。无服务器的基于云的安全措施包括自动化安全策略和解决方案,如安全信息和事件管理 (SIEM)、
身份和访问管理 (IAM)
以及威胁检测和响应。
遵循
DevSecOps
实践有助于开发团队保护无服务器技术的安全。DevSecOps 是 Development、
Security 和 Operations 的缩写,是一种应用程序开发实践,可在
软件开发
生命周期的每个阶段(从初始设计到集成、测试、交付和部署)自动集成安全性和安全实践。
可通过以下教程拓展您的无服务器计算技能:
-
运行批处理任务
:
了解如何使用 Code Engine 控制台运行批处理任务。一个任务运行可执行代码的一个或多个实例。与处理 HTTP 请求的应用程序不同,任务设计为运行一次后退出。
1
全球无服务器架构市场报告
,SkyQuest,2024 年 3 月
2
Why The Future Of Software And Apps Is Serverless
,ReadWrite,2012 年 10 月
3
关于 OAuth 2.0,
OAuth
4
使用 Open Liberty InstantOn 加快容器化应用程序的启动
,Open Liberty