原文:https://www.redhat.com/en/topics/cloud-native-apps/what-is-serverless
概述
serverless是一个云原生开发模型,它使得开发者无需管理服务器的情况下能够构建以及运行应用。
serverless中仍然有服务器,但是服务器已经从应用开发中抽象出来。通常由云提供商处理服务器的配置、维护、扩展等常规工作。开发者仅仅简单的将代码打包到容器中进行部署即可。
部署完成后,serverless应用会根据需要自动进行扩容以及缩容。来自于公有云serverless利用事件驱动模型来进行按量收费。当serverless函数空闲时,是没有费用的。
serverless架构一览
serverless应用和其他云计算应用的区别是,云提供商负责云基础设施以及serverless应用的扩缩容。部署在容器中的serverless应用根据需要进行启动。
在标准的Iaas云计算模型下,用于需要预先购买资源。对于应用的扩缩容是由用户负责。即使应用不被使用,云基础设施也需要让应用运行。
相反的,serverless架构是按需启动的。当一个事件触发代码运行,那么公有云提供商会动态的分配资源,从而运行代码。代码结束运行后,用户就没有费用。除了费用和效率的好处,serverless也将开发者从服务器配置以及应用扩展中解脱了出来。
在serverless中,管理操作系统,文件系统,系统安全补丁,负载均衡,容量管理,扩容,日志以及监控等常规工作都由云服务商进行提供。
构建一个完全的serverless应用是完全可能的,或者构建一个部分是serverless,部分是传统的微服务模型的应用。
云提供商的角色
在serverless模型下,云提供商运行物理服务器,并且可以代码用户动态分配资源。
serverless计算通常分为两组,BaaS和FaaS
BaaS让开发者能够获取大量的第三方服务和应用。例如,云提供商可以提供认证服务,加密服务,云数据库。在BaaS中,serverless函数常常被称为APIs
通常情况下,当开发者提到serverless时,他们谈论的是FaaS。在FaaS下,开发者仍然需要编写特定的服务端逻辑,但是代码运行在由云提供商提供的容器中。
大量的公有云提供商提供了很多FaaS产品。包括AWS的AWS Lambda、Azure的Azure Functions、谷歌云的多个产品、IBM云的IBM Cloud Functions。
一些组织选择开源的serverless平台来运行他们的FaaS环境,包括Red Hat的 OpenShift Serverless,它是建立在k8s的Knative项目上。
FaaS是什么
FaaS是一种事件驱动的计算执行模型,开发者编写逻辑,然后运行在由平台完全管理的容器中,按需执行逻辑。
相比于BaaS,FaaS给开发者提供了更大的自由度,开发者能够自己编写应用,而不是依赖已有编写好的应用。
代码在由云厂商提供的容器中运行。特别的,这些容器有以下特点:
- 无状态,从而使得数据完整性更加简单
- 短暂性,允许应用能够运行特别短的时间
- 事件触发,应用能够根据需要自动运行
- 完全由云厂商管理,你仅仅只需要支付你需要的,而不需要支付服务器等
具体使用案例
serverless架构是异步的、无状态应用理想架构,这些应用能够立即启动。同样的,serverless同样适合哪些不可预测消耗的应用。
设想类似于一种处理图片文件的批处理任务,可能不经常运行,但是当一批图片文件来到时,必须立即处理。或者类似时刻关注对于数据库的变化有任务需要运行的应用。
无服务器应用程序也非常适合涉及传入数据流、聊天机器人、计划任务或业务逻辑的用例。
其他一些serverless常见的用例,比如后端API和web应用,serverless 王章等。
Knative和serverless kubernetes是什么
k8s作为运行容器应用的编排设施,那么作为运行serverless环境的平台也不足为奇了。但是k8s没有做好原生的运行serverless 应用的准备。
Knative是一个开源社区项目,它在k8s中增加了部署、允许、管理serverless应用的组件。
Knative serverless环境能够让你将代码部署到k8s平台中。利用Knative,可以将代码打包为镜像,然后提交到系统上,从而创建服务。Knative能够按需启动和关闭你的代码。
Knative由三个主要部分组成:
- Build - 将源代码构建到容器中的灵活方法
- Serving - 根据请求需要,能够快速的部署以及自动扩展容器。
- Eventing - 一种触发应用的基础设施,能够消费以及产生事件。应用能够被各种源触发,例如来自应用的事件、来自云服务的事件等。
不像早期的serverless框架,Knative是专门用来部署现代应用的,包括从单体应用到微服务应用。
Knative能够替代FaaS,而FaaS一般是由专门的云厂商来提供的。Knative能够运行在任何运行k8s的云平台上。
优势与劣势
优势
- serverless计算能够提高开发者的工作效率并且能够降低运维成本。将管理机器、配置等常规工作交给底层平台后,开发者能够更加专注于应用。
- serverless提高了DevOps的使用,因为它降低了开发者描述基础设施的需要
- 通过整合来自第三方BaaS产品,能够简化应用的开发
- 采用serverless模型能够降低运营成本,因为你只需要为计算时间而付费,不需要一直管理服务。
劣势
- 不将应用放到自己的服务器运行或者不能控制服务端逻辑会有缺点
- 云提供商可能对于组件的集成有严格的限制,这会影响到应用的灵活性。在BaaS环境中,开发者可能会对不在控制范围的服务负有责任
- 放弃这些控制,会导致绑定到特定供应商上。更换云供应商可能会导致升级系统从而满足新供应商的要求,而这会增加成本。
serverless的发展
serverless架构和FaaS随着容器以及云产品的流行而发展。
serverless 1.0 阶段有一些限制,使得它不适合通用计算。serverless 1.0 有如下特点:
- HTTP and few other sources
- Functions only
- Limited execution time (5-10 minutes)
- No orchestration
- Limited local development experience
k8s的出现引领了serverless 1.5时代,serverless 1.5有如下特点:
- Knative
- Kubernetes-based auto-scaling
- Microservices and functions
- Easy to debug and test locally
- Polyglot and portable
当前,serverless2.0正在到来,云提供商已经开始添加缺少的部分,以使无服务器适合通用业务工作负载。serverless 2.0有如下特点:
- Basic state handling
- Use of enterprise integration patterns
- Advanced messaging capabilities
- Blended with the enterprise PaaS
- Enterprise-ready event sources
- State and integration