自助式无服务器架构可以避免云锁定,但代价是云的便利性和易用性
“无服务器”这个词很有吸引力,因为没有什么比服务器更痛苦了。你收件箱里描述的安全漏洞补丁都是百万封邮件里的无数个字吗?想象一下,如果你能去掉服务器,你就能忘记这些补丁。是不是总要记住防火墙上所有端口都关了?这些问题不会再困扰你了。一个没有服务器的世界会让你自由。无论如何,这个词承诺了这么多。
无服务器的世界似乎是自由的,并充分利用时间为你的每一个合法使命服务:你告诉它应该是什么样子。但不要同时被欺骗。你也会为免于苦恼的自由付出代价,就是牺牲这种自由去迁徙。亚马逊、微软和谷歌云的无服务器平台通过专有界面发挥其魔力。每当你把一些烦恼转移到他们等待的手中,你就会上瘾。尤其是通过谷歌的大规模集群管理工具博格这样的工具。“占有”这个词太强大了,你可能会觉得很难逃离它。
程序员反感这种约束,这也是为什么很多程序员尝试开发开源软件包的原因,开源软件包提供了一些甚至大部分基于云的无服务器平台的功能,但是可以在任何地方使用大量代码。这不仅会使调试和测试更加容易,还会增加您整个附件组件和媒体播放器的价格,并有更好的响应时间或其他好处。你甚至可以把它带回家,用你过去称之为服务器房的空钥匙放在储藏室里。
为了了解迅速发展的开源无服务架构世界,我开了几台机器,写了一些简单的逻辑。现在下什么明确的结论还为时过早,因为这些项目喜欢自称“预览版”,但还是有很大希望把我们从桎梏中解放出来。
让我们来看看四个主要的软件——裂变、Fn、无库和Open晶须。当然,更多的软件将很快出现加入他们。
裂变
作为来自平台9的开源无服务器对策,Split将使用一些带有动态加载器的标准容器来连接Kubernetes和内部容器。所使用的函数将被放置在适当的标准容器中,并被加载以回答来自已经在容器中的网络服务器的查询。
标准环境包括主要模型(Node.js,Python和Go)和一些老式的解决方案,比如PHP,。Net,Ruby,甚至Perl。当然也可以用自己喜欢的任何语言浏览自己的语言,只要做一个可以响应HTTP请求的二进制文件。
对于任何想通过容器编排提供的自动缩放选项直接跳到Kubernetes级别的人来说,裂变可能是最有用的。他们可以使用标准工具,如库贝斯、赫尔姆和蒂勒,在库贝斯集群中运行裂变。
使用裂变的命令行界面将简单的函数转换成运行容器的快速五项示例。
如果您不能依靠HTTP来调用这些函数,裂变可以通过Crontab或来自两个支持的排队工具之一(Azure队列存储或NATS流)的信息来触发它们。您还可以选择在YAML文件中定义一个“工作流”,以便按顺序运行多个任务。
裂变提供的最大服务是维护一套动态加载代码的标准容器。这些容器基本上都是预先配置好的,省去了您添加必要代码以便在集群中正确运行的麻烦。
Fn项目
Fn表示Oracle参与了无服务器空,绑定了一些模板,主要语言的标准构建例程和一些标准的开源应用容器引擎Docker。Fn比其他应用程序更以Java为中心,考虑到Oracle拥有Java也就不足为奇了。Fn需要多种语言的组合,可以基于Docker构建例程。一些甲骨文文件说“一个依赖:码头工人”。
更有趣的特性之一是包装器,它允许您运行您的亚马逊云服务匿名代码,而不是您在甲骨文本地堆栈中的代码。使用这些包装器的核心功能是相对容易理解它们的信息,但这往往只是画面的一部分。大多数人使用匿名代码作为其他亚马逊云服务的绑定代码。这些包装器只能帮助你获得匿名代码本身,所以你必须找到其他的解决方案来解决亚马逊云服务应用编程接口API带来的繁重工作。这些包装很棒,但是它们的有用性取决于您如何设计架构以及您的代码用于多少亚马逊服务。
和所有这样的工具一样,Fn的接口是命令行。您输入fn,然后添加命令来创建新模板,生成结果代码,或者最终部署它。你写一个简单的函数,也就是一个单独的文件,然后fn会把它绑定到一个合适的模板,这样它就可以在Docker容器中运行了。
Go、Java、Python、Ruby和Node.js的预建模板被捆绑到Fn开发工具包(FDK)中,但是您不需要专注于它们。他们都要求你创建一个函数,以一个字符串作为自变量,最后返回一个字符串作为结果。没有比这更容易操作的了。
Fn中的这个实验用户界面展示了如何将几个不同的功能链接在一起以进入工作流。
当您部署代码时,Fn将其连接到一个HTTP触发器,该触发器绑定所有参数并将它们提供给在Docker容器中运行的函数。几乎剩下的一切都向你的梦想和设计敞开。是的,Fn可以让你不用为所有的部署头疼,但是你还是需要把这个函数里的代码都写出来。
可以利用Fn的内部机制来做一个微小的改变。管家信息存储在一个基本数据库(SQL3)中,用于跟踪路线和其他部署信息,但您可以打破传统,直接使用MySQL或Postgres。消息队列也有一个可配置的选项,可以帮助不同版本的Fn协调他们的工作。你可能对他们漠不关心,但如果你想要更多,选项就在那里。
Fn经过一些设计,非常轻便简单。它需要一些标准的构建工具和一些标准的Docker模板,并将它们连接在一起,因此更容易编写一段代码,并观察它在其中一个Docker容器中运行。
无库
起源于Bitnami的ku bunce是帮助我们用许多不同类型的手持产品提取云的所有功能的公司之一。像裂变一样,无库旨在将无服务器的所有乐趣带到库本内特集群。这个名字有点搞笑,因为这个技术里没有Kubernetes。如果有什么不同的话,那就是利用Kubernetes的内置功能来创建一个快速的无服务器基础架构。
Kubernetes把你的函数转换成自定义资源,这是Kubernetes设计的一个点,用来根据需要创建和扩展函数。开发人员似乎更喜欢Python,因为这些例子大部分都是用Python写的,但是也有Node.js、Ruby、PHP、Go和的运行时。net。虽然文档的某些部分缺少Java 1.8,但根据安装的版本,它包含在可用的运行时间表中。
这个框架的基本功能比其他框架更复杂。您编写的每个函数都将使用两个参数,一个是参与事件的对象,另一个是参与某个元数据或上下文的对象。与仅将字符串传递给函数的方法相比,该框架允许更复杂的自感知编程模型。最后,您必须返回一个字符串,该字符串将返回任何开始滚动的HTTP请求。(在一些栈中有一些更好的帮助函数,其中一个对象在Node.js运行时被接受并序列化。)
kubundle有一个用户界面,允许您编辑您的函数,然后单击部署它们。
如果不想从HTTP请求中触发函数,可以配置kubundle在特定时间响应卡夫卡或NAT消息或预定呼叫。您也可以通过为事件创建自定义资源来扩展此功能。
对于那些已经完全接受Kubernetes的人来说,Kubernetes的方法非常有吸引力,可以让人在集群和自动缩放的世界中感到舒适。Kubernetes主要是一个快速将一些基本代码转换成响应请求的Kubernetes集群的工具。
open晶须
open晶须是IBM在IBM Cloud中构建云功能的官方工具。也是由Apache软件基金会(仍处于孵化状态)牵头的开源项目。then晶须实际上是几个流行的Apache项目的合成,拼接在一起占用几行代码,然后封装在Docker容器中,通过REST API唤醒它们的执行。这些请求由Nginx发起,转换成卡夫卡信息,然后传递给容器。认证和管理信息存储在CouchDB中。就像一个Apache基金会又联合起来了。
代码本身可以用Java、Java、Python、PHP、Go等编写。,要明白即使是Swift对于那些花时间写iPhone应用的人也是如此。当然,几乎可以使用任何可以绑定到Docker容器的东西,只要函数参数可以被stdin接受,并且结果通过stdout输出。
open晶须开发者基本上已经为各大语言构建了一系列的标准框架,会使用一些预先配置好的语言库,输入一些文本,吐出一些文本。当你写你的简短函数的时候,When晶须会把它粘贴到这个标准容器中,一切都会正常工作——前提是你已经按照说明正确地写好了你的函数。
总会有诡计的。Java代码希望Google GSON库可用。Swift代码的容器会运行开源版本的Swift,所以可能会有,也可能不会有代码和iOS世界体验一模一样的时刻。Java可能是每个人最喜欢的选项,你的Java代码会在节点6或者节点8运行,这是很好理解和预测的。
OpenWhisk请求的路径。当请求到达HTTP网关时,它将通过卡夫卡传播到正确的Docker包。
但是,在IBM精心设计的云平台上使用own晶须和在我自己的机器上运行own晶须有着巨大的区别。IBM的Web界面使得编写几行代码变得容易,并且可以观察到它们成功运行。我花了半个小时从IBM Cloudant数据库中存储的文本中看到运行界面。
当我尝试做类似开源发布的事情时,在经历了配置API主机等障碍之后,还是会遇到障碍。这些文件远未完成。有几个指针指向不同的快速启动路径,您将尝试猜测并填充漏洞。
然而,很快就会清楚,有相当多的布局可以在您自己的机器上运行它们的所有配置。对打包的Swift功能的描述就是一个很好的例子,几行代码运行着大量的配置和脚本。
无服务器与简单
这四个项目都处于一个非常狭窄的细分市场。“无服务器”这个词并没有像预期的那样被广泛使用,在没有“无服务器”这个时髦词汇的情况下,还有许多其他选项可以提供极大的灵活性和自由。数据库通常被认为是最初的无服务器选项,许多开源系统如WordPress、Drupal和Magento都是无服务器的。您可以通过添加适合大型框架的PHP模块来扩展它们。调用插件或模块的内容在某种程度上也是“无服务器的”。
在这种情况下,这些工具并不像任何一代技术那样无忧无虑。这四个无服务器平台更接近于Kubernetes或Docker集群的增强型管理器。它们更像管理工具,可以简化设置和运行这些集群所需的所有配置。或者,像自动生成工具一样,您可以包装您的函数并使其在集群上运行。
它们的作用受到其结构的限制。工具创建者的目标是提供最大的灵活性。他们都有一长串支持的语言,但是他们说他们支持所有符合输入输出标准的二进制数据。所以他们能做的就是把零件粘在一起,吐出一个容器。
事实证明,正确组合容器中的零件是一项巨大的挑战。所有的数据都会说你可以写一个函数来执行这些任务或者动作。但是这个函数能有什么样的作用呢?这时,你就被困在容器里的所有工作中了。在移交控制权之前,您必须正确处理容器中的二进制文件和代码。然后处理所有其他部分,比如数据库和API。
最终,编写代码要比在亚马逊云服务Lambda、IBM云函数或微软Azure和Google Cloud上编写相同的函数困难得多。一切就绪后,云的数据存储或API服务将提供您需要的持久性和分析。这时候你真的只需要写一些简单的函数来编码一些业务逻辑。剩下的就是云在那里继续工作。
云的持久性、API集成等组件都给开源项目带来了一些挑战。所有这些项目都运行良好。但是他们没有解决其他的一切,这意味着你必须重复所有这些其他的事情。如果你远离各大云提供商,你会觉得自己就像一个背着装满果酱馅饼的背包走出家门的孩子,然后发现家不仅仅是食物。它是一张床,一台洗衣机,一台电视机,一个浴室,一只狗等等。
一点想法
在这一点上,开源项目对于云本身来说是一个非常好的营销策略。在对这些开源项目有了初步的了解之后,我很快就开始有了各种各样的问题,这些问题让我在舒适、封闭的云环境之外生存更加困难。然而,随着平台的成熟和程序员推广“无服务器”一词的含义,这种情况可能会改变。
一开始我觉得无服务器主要是云的一个shell脚本。这种方法只需要添加一些逻辑来平滑进出大型服务(如IBM Cloudant或Amazon S3)的数据流。现在人们接受了这个简单的想法,转而在一个无服务器的框架中编写难以置信的复杂函数。一些更大胆的程序员正在将相当复杂的代码转换、机器学习或计算工作放入无服务器调用中,这基本上可以在时间和内存限制内完成工作。
开源工具包为这个更大更宏观的无服务器前景铺平了道路。如果你打算在一个函数中做几乎所有的工作,这些工具将帮助你立即开始。
但是也有一个难点。无服务器可能对许多人来说更便宜的原因是,当您运行代码时,您只需要为服务器付费。在你有足够的工作负载来保证一台服务器全速运行之前,在云中运行你的功能应该会更便宜,因为它会帮助你与其他功能共享硬件。如果你的函数只能产生10%的负载,那么支付10%的负载是很便宜的。这时候你需要支付云服务器100%的价格,花在服务器上的钱90%都浪费了。
这种成本构成非常混乱,涉及电力成本、房产成本、硬件成本。如果你足够聪明,你可以节省很多钱。这些开源项目使您能够在自己的服务器场中复制无服务器的魔力,但这也意味着您必须找到正确的方法来处理所有经济问题和部署复杂性。好消息是,他们在将函数转换成运行容器方面做得非常好。如果这是唯一的任务。
本文由明贝林编撰,原作者彼得·韦纳。
北方森林的风
很多开源项目只能让人模拟一些东西,比如产品功能,但是离实用还很远。甚至一些知名项目。比如OpenStack和Ceph。当然要求不高,还有时间和能力折腾,可以用。很多开源项目最大的用处应该是学习,但是被一些渴望成功的人当成了馅饼。没有免费的午餐。
我说的一切可能都是错的,只是为了给你提个意见。
1.《fission 开源无服务器软件全览:Fission,Fn,Kubeless以及OpenWhisk》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《fission 开源无服务器软件全览:Fission,Fn,Kubeless以及OpenWhisk》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1255751.html