Apache OpenWhisk 是一个无服务器、开源的云平台,允许您根据任何规模的事件执行代码。Apache OpenWhisk 为开发者提供了一个基于四个概念的简单编程模型:动作、包、触发器和规则。
动作 是在 Apache OpenWhisk 平台上运行的无状态代码片段。您可以通过 JavaScript、Swift、Python、PHP、Java 或任何二进制兼容的可执行文件(包括打包为 Linux 容器的 Go 程序和自定义可执行文件)来开发动作(或函数)。动作可以显式调用或响应事件运行。在任何一种情况下,每次运行动作都会产生一个激活记录,该记录由唯一的激活 ID 标识。动作的输入和动作的结果都是键值对字典,其中键是字符串,值是有效的 JSON 值。
包 提供事件源;任何人都可以创建新的包供他人使用。
与这些源关联的触发器在事件发生时触发,开发者可以使用规则将动作(或函数)映射到触发器。
以下命令用于在 Apache OpenWhisk 中创建、更新、删除和列出动作
Usage:
wsk action [command]
Available Commands:
create create a new action
update update an existing action, or create an action if it does not exist
invoke invoke action
get get action
delete delete action
list list all actions in a namespace or actions contained in a package
设置 OpenWhisk
让我们探索一下它是如何在实践中工作的。首先,下载 Minishift 以在您的工作站上创建一个单节点本地 OKD(Kubernetes 的社区发行版,为 Red Hat OpenShift 提供支持)集群
$ minishift start --vm-driver=virtualbox --openshift-version=v3.10.0
一旦 Minishift 启动并运行,您可以使用 admin /admin 登录并创建一个新项目(命名空间)。OpenShift 上的 OpenWhisk 项目提供了部署 Apache OpenWhisk 所需的 OpenShift 模板
$ eval $(minishift oc-env) && eval $(minishift docker-env)
$ oc login $(minishift ip):8443 -u admin -p admin
$ oc new-project faas
$ oc project -q
$ oc process -f https://git.io/openwhisk-template | oc create -f -
Apache OpenWhisk 由许多组件组成,这些组件必须启动并相互同步,此过程可能需要几分钟才能稳定。以下命令将等待组件 pod 运行
$ while $(oc get pods -n faas controller-0 | grep 0/1 > /dev/null); do sleep 1; done
您还可以使用以下命令观看状态
$ while [ -z "`oc logs controller-0 -n faas 2>&1 | grep "invoker status changed"`" ]; do sleep 1; done
开发一个简单的 Java 动作
Maven archetype 是一个 Maven 项目模板工具包。为了创建一个示例 Java 动作项目,您不会引用中央 Maven archetype,但您需要首先生成您自己的 Maven archetype,如下所示
$ git clone https://github.com/apache/incubator-openwhisk-devtools
$ cd incubator-openwhisk-devtools/java-action-archetype
$ mvn -DskipTests clean install
$ cd $PROJECT_HOM
现在让我们创建一个简单的 Java 动作,将其部署到本地 Minishift 上的 OpenWhisk,最后,调用它以查看结果。如下所示创建 Java 动作
$ mvn archetype:generate \
-DarchetypeGroupId=org.apache.openwhisk.java \
-DarchetypeArtifactId=java-action-archetype \
-DarchetypeVersion=1.0-SNAPSHOT \
-DgroupId=com.example \
-DartifactId=hello-openwhisk \
-Dversion=1.0-SNAPSHOT \
-DinteractiveMode=false
接下来,构建 Java 应用程序并将其部署到本地 Minishift 上的 OpenWhisk
$ cd hello-openwhisk
$ mvn clean package
$ wsk -i action create hello-openwhisk target/hello-openwhisk.jar --main com.example.FunctionApp
创建函数 hello-openwhisk
后,通过调用它来验证该函数
$ wsk -i action invoke hello-openwhisk --result
由于所有 OpenWhisk 动作都是异步的,因此您需要添加 --result
以在控制台上显示结果。成功执行命令将显示以下输出
{"greetings": "Hello! Welcome to OpenWhisk" }
结论
借助 Apache OpenWhisk,您可以使用常用语言(如 NodeJS、Swift、Java、Go、Scala、Python、PHP 和 Ruby)编写函数,并使用容器构建组件。它轻松支持多种部署选项,包括本地部署和云基础设施(如 Kubernetes 和 OpenShift)内的部署。
评论已关闭。