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