Serverless是一种cloud-native云本地开发模型,允许开发人员构建和运行应用程序,而无需管理服务器。
serverless中仍然有服务器,但它们被抽象出应用程序开发。云提供商处理服务器基础设施的供应、维护和扩展等日常工作。开发人员可以简单地将代码打包到容器中进行部署。
一旦部署,无服务器应用程序将响应需求,并根据需要自动上下扩展。公共云提供商提供的无服务器服务通常通过事件驱动的执行模型按需计量。因此,当一个无服务器的函数处于空闲状态时,它不会花费任何费用。
Serverless体系结构概述
Serverless与其他云计算模型的不同之处在于,云提供商负责管理云基础设施和应用程序的扩展。无服务器应用程序部署在容器中,在调用时可按需自动启动。
在标准的基础设施即服务(IaaS)云计算模式下,用户预先购买容量单位,这意味着您需要向公共云提供商支付运行应用程序的始终在线服务器组件的费用。用户有责任在高需求时扩大服务器容量,在不再需要该容量时缩小服务器容量。运行应用程序所需的云基础设施处于活动状态,即使应用程序未被使用。
相比之下,在Serverless无服务器架构下,应用程序只在需要时启动。当一个事件触发应用程序代码运行时,公共云提供商会动态地为该代码分配资源。代码执行完毕后,用户停止付款。除了成本和效率方面的好处外,serverless还使开发人员从与应用程序扩展和服务器资源调配相关的常规和琐碎任务中解放出来。
使用Serverless无服务器,日常任务(如管理操作系统和文件系统、安全修补程序、负载平衡、容量管理、扩展、日志记录和监视)都由云服务提供商承担。
可以构建一个完全Serverless的应用程序,或者一个由部分Serverless和部分传统微服务组件组成的应用程序。
云提供商在Serverless计算中的角色是什么?
在Serverless模式下,云提供商运行物理服务器,并代表可以直接将代码部署到生产中的用户动态分配其资源。
Serverless无服务器计算产品通常分为两组,后端即服务(BaaS)和功能即服务(FaaS)。
BaaS允许开发者访问各种第三方服务和应用程序。例如,云提供商可以提供身份验证服务、额外加密、云可访问数据库和高保真使用数据。对于BAA,无服务器函数通常通过应用程序编程接口(API)调用。
更常见的是,当开发人员提到Serverless时,他们谈论的是FaaS模型。在FaaS下,开发人员仍然编写自定义服务器端逻辑,但它运行在完全由云服务提供商管理的容器中。
主要的公共云提供商都有一个或多个FaaS产品。其中包括带有AWS Lambda的Amazon Web服务、带有Azure功能的Microsoft Azure、带有多种产品的Google Cloud以及带有IBM Cloud功能的IBM Cloud等。
一些组织选择使用开源无服务器平台运行自己的FaaS环境,包括Red Hat®OpenShift®serverless,它是基于Kubernetes的Knative项目构建的。
什么是功能即服务(FaaS)?
功能即服务(Function-as-a-Service,FaaS)是一种事件驱动的计算执行模型,在该模型中,开发人员编写逻辑,该逻辑部署在完全由平台管理的容器中,然后按需执行。
与BAA不同,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平台,如Red Hat OpenShift。使用Knative,您可以通过将代码打包为容器映像并将其传递给系统来创建服务。您的代码只在需要时运行,而Knative会自动启动和停止实例。
Knative由3个主要组件组成:
- 构建—将源代码构建到容器中的灵活方法。
- 服务—通过请求驱动的模型实现容器的快速部署和自动扩展,以根据需求为工作负载提供服务。
- 事件-用于消费和制作事件以刺激应用程序的基础设施。应用程序可以由多种来源触发,例如来自您自己的应用程序的事件、来自多个提供商的云服务、软件即服务(SaaS)系统和Red Hat AMQ流。
与早期的Serverless框架不同,Knative设计用于部署任何现代应用程序工作负载,从单片应用程序到微服务和微小功能。
作为单一服务提供商控制的FaaS解决方案的替代方案,Knative可以在运行Kubernetes的任何云平台上运行。这可以包括在内部数据中心运行。这使组织在运行Serverless工作负载时更加灵活。
Serverless计算的优缺点是什么?
优势
- Serverless计算可以提高开发人员的生产率并降低运营成本。通过减轻配置和管理服务器的常规任务,开发人员有更多的时间专注于他们的应用程序。
- Serverless通过减少开发人员明确描述为他们提供操作所需的基础设施的需要,帮助实现DevOps的采用。
- 通过整合第三方BaaS产品的全部组件,可以进一步简化应用程序开发。
- 在Serverless模式下,运营成本会降低,因为您可以根据需要支付基于云的计算时间,而不是一直运行和管理自己的服务器。
不足
- 不运行自己的服务器或控制自己的服务器端逻辑可能会有缺点。
- 云提供商可能对其组件的交互方式有严格的限制,从而影响您自己的系统的灵活性和定制程度。在BaaS环境中,开发人员可能会对代码不在其控制范围内的服务感兴趣。
- 放弃对IT堆栈这些方面的控制也会使您面临供应商锁定。决定更换供应商还可能带来升级系统以符合新供应商规范的成本。
Serverless系统的发展
随着容器和按需云产品的流行,无服务器体系结构和FAA的概念也随之发展。与Red Hat合作完成的一份451研究报告将serverless的发展分为三个阶段。
serverless的“1.0”阶段有一些限制,这使得它不太适合一般计算。Serverless1.0的特点是:
- HTTP和其他来源很少
- Functions only
- 有限的执行时间(5-10分钟)
- No orchestration
Kubernetes的出现开创了“Serverless1.5”时代,许多Serverless框架开始自动扩展容器。Serverless1.5的特点是:
- Knative
- 基于Kubernetes的自动缩放
- 微服务和功能
- 易于本地调试和测试
- 多语言和便携式
今天,“Serverless2.0”时代随着集成和状态的增加而出现。提供商已经开始添加缺少的部分,以使服务器不适合一般用途的业务负载。Serverless2.0的特点是:
- 基本状态处理
- 企业集成模式的使用
- 高级消息传递功能
- 与企业PaaS融合
- 企业就绪事件源
- 国家与一体化
除特别注明外,本站所有文章均为老K的Java博客原创,转载请注明出处来自https://javakk.com/2313.html
暂无评论