Apache OpenWhisk是一个真正的可移植的无服务器平台

2020-09-23 00:43:13

Apache OpenWhisk是一个真正的可移植的、多平台的无服务器引擎,现在可以在来自多个商业供应商的所有主流云中使用。下面是一个运行的国际象棋引擎:

有关如何在本地和任何Kubernetes群集(例如AWS EKS&;mldr)中运行它的说明,请参阅下面的说明。

Apache OpenWhisk是一个无服务器云平台,由Apache软件基金会作为开源项目开发。它类似于Amazon Lambda、Google Functions或Azure Functions。主要区别在于它是一个开放源码项目,由多个商业供应商提供,并且它具有丰富的无服务器编程模型,可以将功能组合到工作流中。

今天,许多供应商都提供基于OpenWhisk的云功能,并且它可以在所有主要的公共云上运行。然而,并不是所有的供应商都透露他们在哪里运行他们的服务,所以我指的是供应商,而不是运行它的云。它还可以安装在任何Kubernetes集群上,因此您可以安装在任何云中,无论是您喜欢的私有云还是公有云。

在本文中,我将展示OpenWhisk是一个真正的可移植的无服务器解决方案,您可以编写单个无服务器应用程序,然后在多个供应商上运行它。

为了证明我的观点,我编写了一个开源的无服务器应用程序,并在我可以访问的所有OpenWhisk供应商上运行它。我还创建了一个自定义的Kubernetes集群,并在其上安装了OpenWhisk来运行我的应用程序。

这个应用程序是一个用围棋编程语言编写的国际象棋引擎,包括后端和前端。你可以用它通过网络界面下棋,而对手是一种在OpenWhisk中作为无服务器函数运行的AI算法。

对于测试和开发,您可以使用独立的OpenWhisk。它是单节点安装,可以在您的机器上运行,只需要运行Docker即可。您还需要下载适用于您的操作系统的OpenWhisk CLI工具wsk,才能与OpenWhisk交互。

该命令将下载独立OpenWhisk的Docker映像,并启动它。它还将打开操场,您可以使用该操场通过浏览器动态创建和运行功能。

一旦OpenWhisk启动并运行,您就可以配置wsk工具来访问它。OpenWhisk访问受密钥保护,您必须检索该密钥并使用该密钥来配置wsk,如下所示:

AUTH=$(docker exec openwhk wsk property Get--auth|awk';{print$3}';)wsk属性集--AUTH$AUTH--apihost http://localhost:3233。

现在,让我们构建象棋引擎,并使用本地OpenWhisk在本地进行测试。GitHub上提供了国际象棋引擎的源代码。

该代码基于免费提供的名为CounterGo的国际象棋引擎。它是用围棋写的。我将其修改为作为无状态、无服务器的操作运行,并使用Chessboardjs和chess.js库在JavaScript中添加了一个前端。

为了构建动作,您需要像git、make和docker这样的常用工具。一旦有了它们,您就可以使用以下命令下载并构建源代码:

请注意,您不需要Go编译器来构建操作,只需要Docker,因为您可以使用OpenWhisk Go运行时本身编译该操作。结果是文件chess.zip包含一个预编译的GO操作,可以部署。

操作完成后,您可以使用以下命令在OpenWhisk中部署它:

如果您现在在浏览器中键入URL,您将看到我们的国际象棋引擎的用户界面,即一个棋盘,您可以在计算机上下棋。

现在,让我们开始在提供OpenWhisk的各个供应商的服务中部署我们的象棋。

Nimbella提供了一个基于OpenWhisk的无服务器解决方案,专注于提供“令人敬畏的开发体验”。

我认为说我为Nimbella工作是恰当的,但在本文中我试图保持中立,并对我所知道的所有OpenWhisk供应商进行公平的比较。

Nimbella使用其自己的名为NIM的CLI进行部署。Nimbella CLI最近是开源的。您需要注册并登录才能使用他们的服务。一旦您登录,您就可以部署我们的国际象棋操作并获得它的URL。NIM login命令可以方便地进行注册。可下载适用于Mac OS、Windows和Linux的CLI。

如果您愿意,可以将wsk CLI与Nimbella一起使用。您会注意到,这里的命令与前面显示的命令相同,但用NIM替换了wsk。

您需要下载并安装ibmcloud CLI,以便将操作部署到IBM。还有一些要求,比如下载插件和定位空间;所有步骤都在他们的网站上进行了解释。

它们为运行函数提供了慷慨的自由层。你需要在他们的网站上注册才能免费使用大量的函数调用。

下载该工具后,部署国际象棋引擎并获取URL以运行操作的命令如下:

Ibmcloud login-u";$IBMUSER";-p";$IBMPASS";ibmcloud FN action update chess chess.zip--KIND GO:1.11ibmcloud FN action get chess--url。

Naver是一家韩国公司,拥有韩语的主要搜索引擎,但也提供云服务。Naver云平台使用OpenWhisk实现云功能。

目前Naver没有提供用于部署操作的CLI,但是我被告知CLI实际上正在开发中。现在,我使用他们的Web界面部署了国际象棋动作。

Adobe也提供了基于OpenWhisk的无服务器服务。它称为Adobe I/O运行时。

Adobe I/O Runtime目前只支持基于Node.js的运行时,所以如果您选择它们作为无服务器函数提供程序,则必须用JavaScript编写无服务器函数。但是,由于基于OpenWhisk,可以根据请求使用其他运行时,因此我们也可以运行象棋引擎。我感谢Adobe团队在出于演示目的部署我的操作时给予的友好支持和帮助。

最后,您可以在任何支持Kubernetes的集群中运行OpenWhisk。为此,我在AWS上创建了一个EKS集群,并在其上安装了OpenWhisk,然后部署了我的国际象棋应用程序。我将在这里展示如何快速、轻松地做到这一点。

您将需要创建和配置AWS帐户。有关如何执行此操作的信息,请参阅AWS文档。

创建帐户后,我安装了eksctl工具,该工具可以轻松在AWS上创建Kubernetes集群。

此外,您还需要安装Helm部署工具,并使用它实际安装OpenWhisk。您可以从GitHub下载舵图并安装OpenWhisk,如下所示:

一旦一切就绪,您只需使用3个命令即可创建一个Kubernetes集群并安装OpenWhisk:

Eksctl create cluster--name openwhkeksctl create nodegroup--cluster openwhk--node-labesopenwhk-角色=invokerhelm install--set whk.ingress.type=LoadBalanceropenwhk./openwhk。

创建群集将需要一段时间。一旦完成,您将在AWS中运行您的私有OpenWhisk服务,并且您可以将您的国际象棋应用程序部署到其中。

您可以使用wsk或NIM CLI部署到OpenWhisk。您必须检索Apache OpenWhisk入口点的位置和授权密钥,并将它们传递给CLI工具。使用NIM所需的命令包括:

Cd whisk-chessAPIHOST=$(kubectl get svc|awk&39;/openwhk-nginx/{print$4}';)auth=$(cat openwhk/values.yaml|awk&39;/Guest/{print$2}';|TR-d';";';)nim auth login--apihost http://$APIHOST--auth$auth。

需要注意的是,我们配置了一个不安全的设置,因为我们通过未加密的HTTP协议访问OpenWhisk。

在实际设置中,您需要额外的步骤才能使用证书设置HTTPS端点。您可以在舵图GitHub存储库中找到相关详细信息。

一旦您检索到API主机和身份验证密钥,您就可以部署您的象棋应用程序,并获得URL。

在这种情况下,我无法提供URL,因为我在测试后销毁了集群,但是,您可以在段落开头的图像中看到结果。