开源无服务器软件全览:Fission,Fn,Kubeless以及OpenWhisk服务器

来源:互联网 / 作者:SKY / 2018-07-10 18:04 / 点击:
难道说所有的安全漏洞补丁都在你的收件箱里用上百万个电子邮件中数不清的词语描述的?设想一下你如果能够摆脱服务器,你可以不去想这些补

无服务器”一词是一个极具诱惑力的流行语,因为再也没有什么比服务器更让人痛苦的了。难道说所有的安全漏洞补丁都在你的收件箱里用上百万个电子邮件中数不清的词语描述的?设想一下你如果能够摆脱服务器,你可以不去想这些补丁。难道说防火墙上的所有端口你都得时刻记着他们是否处于关闭状态?这些问题再也不会使你苦恼了。无服务器的世界将使你重获自由。无论如何,这个词是如此承诺的。

无服务器的世界看起来很无拘无束,并且充分利用时间为你的每一个正当使命效忠:你告诉它的它应该是什么样的。但同时也不要被欺骗了。你也将为从苦恼中获取自由而付出一定代价,那就是牺牲这份自由去进行迁移。亚马逊,微软和谷歌云中的无服务器平台通过专有接口施展他们的魔力,每当你将一些苦恼转移到他们的一直等待着的手中时,你就会慢慢上瘾。特别是被像谷歌的大规模集群管理工具Borg这样的工具所吸收。“拥有”这个词太强大了,强大到你可能会发现很难从它手中逃脱。

开源无服务器软件全览:Fission,Fn,Kubeless以及OpenWhisk

程序员很反感这种束缚,这也就是为什么许多程序员尝试着开发开源软件包,而这些软件包提供基于云的无服务器平台的一些甚至大部分功能,但是却可以在任何地方使用一大堆代码。这不仅可以使调试和测试变得更加容易进行,而且可以让您的整个配套元件和媒体播放器价格上涨,并且有更好反应时间或其余好处。你甚至可以把它带回家,放在你曾经打电话给服务器机房的带空调的储藏室里。

为了了解这个迅速发展的开放源代码无服务架构的世界,我启动了几台机器并编写了一些简单的逻辑。现在就得出任何确定的结论还为时过早,因为这些项目喜欢说称自己是“预览版”,但是将我们从束缚中解放还是很有希望的。

下面让我们来看看为此所做出的努力的四大软件 - Fission, Fn, Kubeless, 和OpenWhisk.。当然,之后会很快出现更多的软件加入他们的行列。

Fission

一个来自九号平台的开源无服务器对策,Fission将使用一些配有动态装载器的标准容器把Kubernetes与内部容器联系在一起。所使用的功能将被放置于适当的标准容器中,并被加载以回答来自已在容器内的Web服务器的查询。

标准环境包括主要模型(Node.js,Python和Go)以及一些老派的解决方案,如PHP,.Net,Ruby甚至Perl。当然,你也可以用你喜欢的任何语言翻阅你自己的语言,只要你制作一个可以回应HTTP请求的二进制文件即可。

对于任何想通过容器编排提供的自动缩放选项直接跳到Kubernetes级别的人来说,Fission可能是最有用的。他们可以使用Kubectl,Helm和Tiller等标准工具在Kubernetes集群内运行Fission。

一个使用Fission的指令行界面将简单功能转换为运行容器的快速五项示例。

如果你不能依靠HTTP来调用这些函数,Fission可以通过Crontab或来自两个得到支持的排队工具之一的信息(Azure队列存储或NATS流)触发它们。还可以选择在YAML文件中定义“工作流”,以便按顺序运行多个任务。

Fission提供的最大服务是维护动态加载代码的一组标准容器。这些容器基本上是预先配置好的,为您节省添加必不可少的代码以便在群集中正确运行的麻烦。

Fn项目

Fn意味着甲骨文公司涉足无服务器空间,将一些模板,主要语言的标准构建例程和一些标准的开源的应用容器引擎Docker粘合在一起。 Fn比其他应用软件更加以Java为中心,当您考虑甲骨文公司拥有Java时,这并不令人意外。 Fn需要使用多种语言的结合体,并且以Docker为基础就可以构建例程。有些甲骨文公司的资料写道“一个依赖: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容器中运行起来会更容易。

Kubeless

Kubeless源于Bitnami,是帮助我们用多种不同类型的手持产品提取云的所有功能的公司之一。同Fission一样,Kubeless的设计宗旨也是将无服务器的所有乐趣带给Kubernetes群集。这个名字有点令人发笑,因为这项技术是没有Kubernetes的。如果要说有的话,那就是利用Kubernetes的内置功能来打造快速无服务器的基础架构。

Kubeless将您的功能转变为自定义资源,这是Kubernetes根据需要创建和扩展的功能被设计出来的一点。开发人员似乎偏爱Python,因为这些例子大部分都是写在里面的,但也有Node.js,Ruby,PHP,Go和.Net的运行时间。尽管文档的某些部分缺少Java 1.8,但根据所安装的版本,它已包含在可用运行时间表中。

阅读延展

1
3