什么是serverless?
什么是serverless?
一、概述
serverless是一种云原生开发模式,它允许开发人员构建和运行应用程序,而无需管理服务器。
serverless中仍有服务器,但是它们从应用开发中被抽离出来了。云供应商(cloud provider)负责处理服务器基础设施的配置、维护和扩展等日常工作。开发者可以简单地将他们的代码打包到容器中进行部署。
一旦部署,serverless应用程序就会响应需求,并根据需要自动扩大和缩小。公共云供应商提供的serverless产品通常是通过事件驱动的执行模式按需计量的。因此,当serverless功能处于闲置状态时,它不会产生任何费用。
二、serverless架构概述
serverless与其他云计算模式的不同之处在于,云提供商负责管理云基础设施和应用程序的扩展。serverless应用程序被部署在容器中,在被调用时自动按需启动。
在标准的**基础设施即服务(IaaS)**云计算模式下,用户预先购买容量单位,这意味着你要向公共云供应商为永远在线的服务器组件进行支付,以运行你的应用程序。用户有责任在需求旺盛的时候扩大服务器容量,并在不再需要该容量的时候进行缩减。即使在应用程序不被使用时,运行一个应用程序所需的云基础设施也是活跃的。
相比之下,在serverless架构下,应用程序只在需要时才会启动。当一个事件触发应用程序的代码运行时,公共云供应商就会为该代码动态地分配资源。当代码执行完毕后,用户就不再付费。除了成本和效率方面的优势外,serverless还将开发者从与应用扩展和服务器配置相关的常规琐碎的任务中解放出来。
有了serverless,诸如管理操作系统和文件系统、安全补丁、负载均衡、容量管理、扩展、日志和监控等常规任务都被云服务供应商负责。
我们有可能建立一个完全serverless的应用,或者一个由部分serverless和部分传统微服务组件组成的应用。
三、在serverless计算中云供应商扮演的角色
在serverless模式下,云服务供应商运行物理服务器,并代表用户动态地分配其资源,用户可以直接将代码部署到生产中。
serverless计算产品通常分为两类:后端即服务(BaaS)和函数即服务(FaaS)。
BaaS使开发者能够访问各种第三方服务和应用程序。例如,云供应商可以提供认证服务、额外的加密、云端可访问的数据库和高保真的使用数据。通过BaaS,serverless函数通常是通过应用编程接口(API)调用的。
更常见的是,当开发者提到serverless时,他们谈论的是FaaS模式。在FaaS模式下,开发者仍然编写自定义的服务端逻辑,但它是在由云服务供应商完全管理的容器中运行的。
主要的公共云供应商都有一个或多个FaaS产品。它们包括拥有AWS Lambda的亚马逊网络服务,拥有Azure Functions的微软Azure,拥有多种产品的谷歌云,以及拥有IBM Cloud Functions的IBM云,等等。
一些组织选择使用开源的serverless平台来运营自己的FaaS环境,包括红帽的OpenShift Serverless——建立在Knative项目上的Kubernetes。
四、什么是函数即服务(FaaS)
函数即服务(FaaS)是一种事件驱动(event-driven)的计算执行模式,开发者编写的逻辑被部署在由平台完全管理的容器中,然后按需执行。
与BaaS相比,FaaS为开发者提供了更大程度的控制权,他们创建定制的应用程序,而不是依赖预先编写的服务库。
代码被部署到由云供应商管理的容器中。具体来说,这些容器具有以下特点:
- 无状态,使数据整合更简单。
- 短暂的,允许它们在很短的时间内运行。
- 事件触发的,所以它们可以在需要时自动运行。
- 完全由云供应商管理,因此你只需为需要的东西付费,而不是为永远在线的应用程序和服务器付费。
使用FaaS,开发者可以通过API调用serverless应用,FaaS提供商通过API网关处理这些应用。
五、serverless使用案例
serverless架构对可以即时启动的异步、无状态应用来说,是一个理想选择。同样地,serverless也很适合那些需求不频繁、不可预测的激增的用例。
想想看,像批量处理传入的图像文件这样的任务,可能不经常运行,但也必须在大批量图像一次性传入时做好准备。
serverless应用程序也很适合涉及传入数据流、聊天机器人、计划任务或业务逻辑的用例。
其他一些常见的serverless用例是后端API和Web应用、业务流程自动化、serverless网站以及跨多个系统的整合。
六、Knative与serverless Kubernetes
作为一种在自动化基础设施上运行容器化应用的方式,Kubernetes容器编排平台是运行serverless环境的热门选择,这并不奇怪。但Kubernetes本身并没有准备好运行serverless应用程序。
Knative是一个开源社区项目,它增加了在Kubernetes上部署、运行和管理serverless应用程序的组件。

Knative serverless环境让你可以将代码部署到Kubernetes平台,如红帽OpenShift。通过Knative,你可以把你的代码打包成一个容器镜像,并把它交给系统,从而创建一个服务。你的代码只在需要的时候运行,Knative会自动启动和停止实例。
Knative由3个主要部分组成。
- Build —— 一种将源代码构建到容器中的灵活方法。
- Serving —— 通过一个基于需求的工作负载服务的请求驱动模型,实现容器的快速部署和自动扩展。
- Eventing —— 一个用于消费和生产事件以刺激应用程序的基础设施。应用程序可以由各种来源触发,例如来自你自己的应用程序、来自多个供应商的云服务、软件即服务(SaaS)系统和红帽AMQ流的事件。

与早期的serverless框架不同,Knative是为部署任何现代应用工作负载而设计的——从单体应用到微服务和微小功能,无所不包。
作为一个由单一服务提供商控制的FaaS解决方案的替代方案,Knative可以在任何运行Kubernetes的云平台上运行。这可以包括在企业内部的数据中心中运行。这让企业在运行serverless工作负载时有了更多的敏捷性和灵活性。
七、serverless计算的优缺点
优点
- serverless计算可以提高开发人员的工作效率,降低运营成本。通过将配置和管理服务器的常规任务交给云供应商,开发人员有更多时间专注于他们的应用程序。
- serverless计算有助于实现DevOps的采用。
- 通过纳入第三方BaaS产品的整个组件,可以进一步简化应用开发。
- 在serverless模式下,运营成本会降低,因为你可以在需要时为基于云的计算时间付费,而不是一直运行和管理自己的服务器。
缺点
- 不运行自己的服务器或控制自己的服务器端逻辑会存在缺陷。
- 云供应商可能对其组件的交互方式有严格的限制,这反过来又影响了你自己的系统的灵活性和定制化程度。在BaaS环境的情况下,开发者可能会受制于那些代码不受他们控制的服务。
- 放弃对IT堆栈的这些方面的控制也会使您陷入被厂商锁定的境地。决定更换供应商还可能带来升级系统以符合新供应商规范的成本。
八、serverless的演变
serverless架构和FaaS的概念已经与容器和按需供应云产品的普及同步发展。451研究公司与红帽公司合作完成的一份报告,将serverless的发展分为三个阶段
serverless的 "1.0 "阶段伴随着一些限制,使其在一般计算中不太理想serverless1.0的特点是:
- HTTP和少数其他资源
- 只提供函数
- 执行时间有限(5-10分钟)
- 没有协调性
- 本地开发经验有限
Kubernetes的出现迎来了 serverless 1.5 时代,许多serverless框架开始自动扩展容器。serverless 1.5 的特点是:
- Knative
- 基于Kubernetes的自动扩容
- 微服务和函数
- 易于在本地进行调试和测试
- 多语言和可移植性
如今,随着集成(integration)和状态(state)的加入,serverless 2.0 时代正在出现。供应商已经开始添加缺失的部分,使serverless适用于通用的业务工作负载。serverless 2.0的特点是
- 基本的状态处理
- 使用企业集成模式
- 先进的消息传递能力
- 与企业PaaS相融合
- 企业就绪的事件源
- 状态和集成
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)