毕业论文
您现在的位置: 版本控制 >> 版本控制前景 >> 正文 >> 正文

无服务器云进入成熟期

来源:版本控制 时间:2025/1/23
白癜风公益援助 http://nb.ifeng.com/a/20180605/6631976_0.shtml

编者按:作者Justin详细介绍无服务器云的两种产品形态及各自的利弊,并指出:为真正实现无服务器计算的理想,我们需要重新思考当前的计算和安全模型。虽然挑战很大,但回报更大。希望本文能帮您的团队用好「知晓云」作为无服务器云计算的优势。

每年软件工程行业都会出现数十种新工具和新趋势。现在我已经有一段时间了,我想我应该继续发表一些预测,类似一个像样的雷达:哪些趋势将对哪些趋势产生持久影响,哪些趋势会失败。可以肯定的是,我已经做出了一些令人尴尬的预测,例如:曾和我的一个朋友打赌说Git会输给Mrcurial,因为Git的用户体验太可怕了。我们都知道结果如何。

但总的来说,我认为我非常清楚哪些技术将成为赢家,哪些技术将成为输家。当谈到无服务器计算时,我不需要使用任何专业知识。

等等,你在说什么?

是的,你没看错。无需预言家就能看到无服务器计算是未来。没有人愿意管理服务器。管理服务器是想要执行代码的一个令人讨厌的副作用。我需要一个安全的环境来运行代码,并且由于我们的计算都基于「冯诺依曼架构」,我需要一些内存、一些磁盘空间和一个处理器。只要我有足够的东西,这些东西采取什么形式组合起来跑业务软件并不重要。我的业务代码需要这三者中的一部分,并且我需要一个环境来托管这些业务软件。就这么简单。

我希望实现这一点并不意味着我想管理服务器或它所运行的环境。理想情况下,我会去找云服务商并说:「这是我的应用程序,麻烦帮我运行它。」

什么是无服务器?

在我们开始之前,让我们一起来了解一下无服务器到底是什么。你会看到一些无服务器的定义,说它根据需要提供计算资源。虽然这是一个纯粹的定义,但更常用的更广泛的定义是:它是以一种不需要您考虑管理服务器的方式提供计算资源的方式。

无服务器云计算产品形态

无服务器容器

Hroku、Ntlify、AWSECS/EKSFargat、GooglKubrntsEngin和AzurKubrntsSrvic等无服务器容器服务为您提供了一个环境,您可以在其中构建容器并将其推送到管理容器部署和执行的服务中。您不必担心运行托管您的控制服务器、节点服务器等资源如何组合为集群,您只需推送一个包含一些元数据的容器,其余的运维任务交给服务商平台处理。

无服务器函数

AWSLambda、GooglCloudFunctions或AzurFunctions等无服务器函数是提供软件运行环境的服务,您可以在其中推送具有特定接口的代码块,然后再调用该代码。

无服务器与虚拟机

许多人不认为无服务器容器是真正的无服务器,因为当您构建和推送容器时,您实际上是将整个服务器捆绑在一个漂亮的软件包中。虽然我倾向于同意它们不是「真正的」无服务器,但与运行完整的虚拟机相比,它们绝对具有巨大的优势,并且在某些情况下与无服务器功能相比具有明显的优势。

无服务器容器的优点

与传统服务器相比,无服务器容器有很多优势。这里有几个:

很少的服务器管理——无需管理、修补或排除故障的服务器。您仍然在容器内有一个操作系统,但这可能是一个非常小的安装,并且需要你亲自管理的系统依赖对比(虚拟)服务器要小得多。通常是无状态的——在构建为容器设计的应用程序时,您通常会构建一个「1要素应用程序」或遵循类似的模式。你的容器是牛,不是宠物。如果您的容器崩溃,则会自动启动一个新容器。轻松的水平可扩展性——虚拟机本身在可扩展性方面没有任何限制,但容器将您推向一个方向,允许无服务器容器服务根据需要轻松扩展您的软件。根据负载、时间和请求计数等因素,无服务器容器服务可以运行一个容器实例或10,个容器实例,同时透明地处理存储分配、负载平衡、路由等。安全性——安装在容器中的操作系统通常是短暂的、非常小的,有时是只读的。因此,与典型的通用和长期服务器环境相比,它的可进行网络攻击的总面积要小得多。源代码控制环境——您的容器定义在可以放入源代码控制的文件中进行描述。虽然这在当今几乎任何情况下都是最佳实践,但与传统的服务器环境相比,它仍然是一个明显的优势,在传统服务器环境中,别人时不时还可以登录进入并更改服务器配置导致意外的配置不一致。应用程序和环境捆绑——您将应用程序与其运行的环境结合起来,并将其部署为一个单元。这样,如果您的软件的新版本使用更新的库、操作系统版本或新的语言版本,它都可以作为一个单元进行部署和回滚。成本——您可以轻松地向上和向下扩展工作负载。虽然运行无服务器容器可能会贵一些,但通过一些服务平台工具协助,您可以在灵活性上获得弥补。与传统的虚拟机选项相比,无服务器容器通常为您提供更大的灵活性,可以将资源分割成更小的单元。例如,一个ECTnano实例提供个vCPU,但您可以请求一个只有0.5个vCPU的容器。

无服务器函数云的优点

无服务器函数云计算具有无服务器容器的所有优点,但将其提升到另一个层次。

几乎零管理——在大多数情况下,您根本不需要考虑操作系统。您可以将代码向上推送,然后运行它。在操作系统级别没有什么需要修补,也没有什么需要维护——只需推送并忘记它。默认情况下是无状态的——无服务器函数迫使你以无状态的方式编写代码,因为你不能依赖不同的调用之间留下的任何东西。这使得它们可以轻松扩展,因为您的函数可以在任何服务器上启动,而无需依赖于本地状态。几乎完美的水平可扩展性——某些东西会调用你的函数,然后它就会运行。如果它被调用一次,那么它运行一次。如果它被调用,次,那么它会运行,次。当然,有一些平台限制可能会发挥作用,但这些通常是防止您意外花费10,美元的保障措施,而不是平台的限制。成本——无服务器函数计算仅在执行时才会计费和扣费。因此,如果您的功能很少执行或者非常突发,您可以节省大量云计算费用。

无服务器容器与无服务器函数

无服务器容器的优势

轻松迁移——如果你有一个现有的应用程序,它可能需要运行一些计算任务,但你可以让它在容器内运行。稳定的工作负载且更便宜——如果你有一个一致的工作负载,那么无服务器容器可能会比无服务器函数的等效调用更便宜。灵活性——您的操作系统、二进制文件、语言、版本等没有任何限制。您可以控制整个容器。无服务器函数服务将限制您使用特定的运行时和版本。一些无服务器函数服务允许自定义运行时,但您仍将被锁定在操作系统中。故障排除——容器让您可以轻松进入并排除实时环境中发生的问题。它们还允许您在本地运行大部分环境,从而更容易调试正在发生的事情。长时间运行的任务——无服务器容器是始终运行的,最适合长时间运行计算任务。大多数无服务器函数都会对函数的执行时间有限制。例如,在撰写本文时,AWSLambda有15分钟的限制。

无服务器函数的优势

降低突发工作负载的成本——无服务器函数是按调用付费的,这意味着您只需在代码实际执行时付费。这意味着对于不经常运行的工作负载,与典型的服务器或容器相比,它们可以便宜得多。快速扩展——无服务器函数服务可以创建一个新的函数实例,并在几秒钟内(有时只需几分之一秒)就可以为流量提供服务。这有一定的限制,您可以在下面的「扩展无服务器函数」部分中看到有关这些限制的更多讨论。细粒度的可扩展性——假设你有一个由几十个不同的无服务器函数组成的应用程序,其中一个函数的调用次数是其它函数的1倍。该功能将独立于您的其它功能进行缩放,您甚至不必考虑它。

无服务器容器的缺点

更重的部署——无服务器容器通常需要一个大的构建步骤,然后您必须将数百兆字节的容器推送到您在云端的存储库。然后你必须在你的集群中部署你的容器,如果你有大型部署,这可能需要一段时间。这个周转时间比推动单个云函数并在几秒钟内启动并开始服务请求要长得多。粗略的可扩展性——当你部署一个无服务器函数时,你实际上只是部署了一个函数。该函数可以执行多项任务,但通常您正在部署一个单一用途的函数,该函数可以独立于所有其它函数进行扩展。当您部署无服务器容器时,您通常会部署整个应用程序或微服务。该应用程序或微服务中的所有功能都将部署到单个容器中,因此为了扩展它,您必须启动该容器的更多实例。这意味着整个软件模块都可以作为一个单元进行扩展。如果您的部分应用程序突然出现大量访问,那么您必须扩展整个模块以增加您可以服务的流量。

无服务器函数云的缺点

缺乏控制——有人管理你的代码运行的服务器。您的代码在操作系统中运行,而不是您可以控制的操作系统。专有的——无服务器函数没有任何真正的行业标准。因此,您通常使用特定服务商的工具和接口来编写无服务器应用程序。使用AWSstp函数之类的工具可以与服务商建立强大的联系,因为跨无服务器函数的编排现在根本不是标准的。这可以让您更深入地了解特定服务商的生态系统,并使其更难切换。重写——使用现有应用程序并使其在无服务器功能中运行通常是不可能的。您几乎总是必须从头开始编写应用程序才能利用无服务器功能。可追溯性——无服务器功能与微服务具有相同的挑战,但被带到了极端。在您的系统中跟踪单个请求可能涉及数十个无服务器函数。您需要确保使用AWSX-ray、GooglCloudTrac或Azur中的DistributdTracking等工具。调试/测试——您可以使用无服务器、GooglFunctionFramwork或AWSSAM等工具在本地计算机上相当轻松地运行云函数,但获得真实的调用和反馈可能是一个挑战,因为云函数通常以自动化和专有的方式与云生态系统集成。此外,AWSstp函数等服务在lambda之间引入了一个编排层,这会使调试实时环境中发生的情况变得更加困难。部署——无服务器函数的部署可能是一个挑战,但主要是因为它们提供了鼓励不良行为的工具(如IDE)。使用无服务器框架可以使您的部署自动化和可管理,但您需要确保您努力维护好代码设置并保持其井井有条,否则版本控制和维护数十或数百个函数将成为真正的痛苦。

扩展无服务器函数(软件)

在这里扩展无服务器函数需要额外注意,因为人们通常认为AWSLambda或GCPCloudFunctions等工具是可扩展性的灵丹妙药。他们假设您只需提升您的云函数并获得几乎即时的可扩展性。但这远非事实。这些无服务器函数服务使扩展变得非常容易,但平台存在一些限制,这些限制会影响函数的扩展速度和规模。

例如,AWSLambda的初始每个区域限制为1个并发函数调用(这是该区域中的所有函数)。此限制是作为安全限制来防止意外资源使用的,并且可以通过联系AWS客服来提高。

基于此,您可能认为您只需调用AWS客服并请求将并发调用增加到0,个,然后您可以将一堆请求推送到您的Lambda函数并让它快速扩展到该级别以满足您的需求服务。不幸的是,这种情况并非如此。

即使在获得AWS客服支持以将您的并发调用限制增加到0,之后,AWSLambda仍会将您限制为每分钟个额外的并发调用,这意味着如果您从零开始,将需要将近40分钟才能扩展到0,个并发调用能力。同时,所有无法定向到运行中的函数的访问请求都将收到49错误。

如果您的流量需要更多的并发扩容服务,您可以购买亚马逊所谓的「预配置并发」。这将使一定数量的Lambda函数保持活跃并随时可用,但随后您将放弃无服务器函数的一些好处,因为您需要为保持它们始终运行而付费。但是,在某些情况下,这是值得权衡的。

还有人担心单个函数会耗尽特定区域可用的所有并发服务资源。您可以为特定函数配置「保留并发」,以确保它们的并发不会被其它函数完全消耗。但是,假设您的总并发数为5,并且您将函数的保留并发数设置为1,那么您将只剩下4并发数用于该区域中的其余函数。

虽然其中许多设置对于提供安全和可用的软件运行环境是必要的,但它可以让刚接触无服务器函数的开发者们感到意外。

供应商锁定

几乎所有的云平台都会抓住一切机会锁定你,Srvrlss也不例外。但是,与无服务器容器相比,无服务器函数更

转载请注明:http://www.0431gb208.com/sjsbszl/8616.html