当前位置: 首页 > 科技观察

看完这篇文章,你再也不用为什么时候实现serverless,什么时候实现容器而烦恼了!

时间:2023-03-22 00:24:21 科技观察

【.com速译】说对了,无服务器计算是解决应用部署问题的完美答案;虚拟机、容器和Serverless架构都各有优缺点,但如果应用程序不能很好地适应Serverless计算,这种部署架构可能会破坏一切。为了防止IT灾难,开发人员对Serverless和容器进行合理评估非常重要,以便他们可以选择一个来部署新的应用程序。确定哪种容器或无服务器计算最适合需要比较每种架构的功能、它将托管的应用程序的用户群以及成功部署所需的条件。虽然超出了本文的范围,但虚拟机是IT部门中最常用和最著名的应用程序托管架构。它是最常用的基础设施抽象方法,但缺点是非常复杂和资源密集型。本文主要比较完全抽象资源的无服务器计划与容器,后者是操作系统之上的轻量级快速隔离层。申请需要什么?Serverless云计算的经济效益在于,企业只需为应用运行时的计算资源和应用执行时间付费,无需为闲置时间付费。无服务器最适合必须始终准备就绪但并非始终运行的应用程序和组件。图1:AmazonWebServices(AWS)上的无服务器计算架构展示了无服务器如何将应用程序与支持它们的硬件隔离开来,例如,当湿度传感器指示土壤干燥并需要浇水时,IoT农业应用程序会生成事件。这种传统部署环境中的应用程序可能会在雨天闲置,等待激活,消耗不必要的资源。容器系统减少了应用程序消耗的资源数量,而无服务器计算则消除了空闲期间的资源。应用程序空闲的时间越长,无服务器的好处就越大。是不是很简单?与往常一样,现实要复杂得多。无服务器架构的好处包括能够在几毫秒内准备好这个示例物联网应用程序,而不是像容器化系统那样需要几十秒,但容器化部署的启动时间较长不太可能影响物联网应用程序程序完成其任务的能力目的。并非每个闲置时间多于活动时间的应用程序都适合无服务器。Serverless系统逻辑不仅比容器系统更昂贵,而且在技术上也不同。无服务器与容器技术如果你深入研究无服务器的细节,你会发现如下术语:FunctionCompute:负责托管云执行按需应用功能,功能即服务;lambda函数:这些匿名C++函数转换传递给它们的数据集合,然后生成新集合;无状态:不使用或不需要来自先前消费事件的数据的应用程序。无服务器云计算旨在实现无上下文处理,并面向无状态应用程序。当无服务器应用程序被事件激活时,它们从完全不记得过去的代码副本开始,依赖于之前发生的或请求有状态的任何事件。如果启动第二个无服务器副本来处理更多工作,第二个副本将不会自动知道第一个副本一直在做什么。有状态应用程序可以在具有客户端或后端状态控制的无服务器环境中运行,但这必须写入应用程序代码中。第三方软件中可能不存在此选项。即使企业的应用程序是内部编写的,在无服务器部署中实现有状态行为也可能需要进行复杂且昂贵的更改。图2:Docker容器托管模型从底层硬件资源中抽象出应用程序代码。容器几乎可以运行任何应用程序或应用程序组件,而无需对代码进行重大更改。无服务器无法做到这一点。大多数业务应用程序执行更新一个或多个数据库的事务处理,这对无状态行为提出了更严峻的挑战。交易处理应用程序中的无状态可能会导致交易冲突:两个独立报告销售或提款的库存或账户余额查询最终会发生冲突,导致余额低于零。组织可以通过结合无状态和事务行为来重新设计或改造应用程序,但这是一个复杂的过程,需要经验和大量工作。容器没有这个要求。连接到现实开发人员将无服务器与容器视为最适合应用程序的问题,但他们还必须权衡每个的部署问题。容器网络是显式的并且基于IP子网划分,这是应用程序部署的最常见模式。容器系统在应用程序中使用专用的IP地址空间,但管理员可以有选择地公开组件地址,以便为虚拟专用网络或Internet上的用户或其他应用程序提供服务。如果使用无服务器计算,其中负载平衡和网络寻址以及其他操作方面由无服务器云框架处理,您可能需要采取特殊步骤将无服务器组件与托管在数据中心的更传统云上的应用程序组件集成起来。容器需要一个长期的托管位置,而无服务器则不需要。容器可以以良好的响应时间支持广泛的应用程序和服务访问社区,但前提是您在每个地理区域部署副本。这种部署模型划分了工作,在应用程序副本之间创造了更多的空闲时间,从而增加了成本。相比之下,只要资源可用,无服务器应用程序就可以在任何地方运行任意数量的工作负载副本。如何托管微服务?微服务是分布式应用程序代码的独立组件,可以独立共享和扩展,适合部署在容器和无服务器云中。差异化因素归结为您拥有的微服务类型。由于微服务是无状态的,因此它们适用于无服务器部署。然而,微服务通常是多个应用程序共享的公共组件。当微服务组合成多个不同的应用程序时,容器托管是比无服务器更好的部署选项。由于请求按需部署无服务器组件,频繁使用无服务器微服务可能会导致应用程序响应时间显着延长。Serverless将继续发展,但Serverless和容器在技术和成本管理方面存在明显差异。在某些情况下,这些差异使企业很容易做出选择。在其他情况下,应用程序规划人员必须采用混合模型,尽管会增加一点复杂性。毕竟,没有一刀切的解决方案。原标题:Knowwhentoimplementserverlessvs.containers,作者:TomNolle