从零自建FaaS平台(2): OpenWhisk

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: OpenWhisk 是一个开源、无服务(Serverless)的云平台,可以在运行时容器中通过执行扩展的代码响应各种事件,而无需关心相关的基础设施架构。OpenWhisk 是基于云的分布式事件驱动(event-based)的编程服务。

OpenWhisk简介

OpenWhisk 是一个开源、无服务(Serverless)的云平台,可以在运行时容器中通过执行扩展的代码响应各种事件,而无需关心相关的基础设施架构。OpenWhisk 是基于云的分布式事件驱动(event-based)的编程服务。OpenWhisk 提供一种编程模型——将事件处理程序注册到云服务中——以处理各种不同的服务,可以支持数千触发器和调用,可以对不同规模的事件进行响应。

OpenWhisk是由许多组件构建

这些组件,让OpenWhisk成为了一款优秀的开源FaaS平台

OpenWhisk部署

实验机器操作系统:Ubuntu 18.04 Desktop系统。

使用 Apache 提供在 github 上的 incubator-openwhisk 进行安装,如果本机没有安装Git,需要先安装Git:

apt install git

接下来克隆 repo 到本地目录:

git clone https://github.com/apache/incubator-openwhisk.git openwhisk

克隆完成:

进入到OpenWhisk目录,并且执行脚本。Openwhisk 是由 Scala 开发,运行需要安装 Java 环境,下面的脚本实现了 java 环境的安装,以及其它的所需要的软件:

cd openwhisk && cd tools/ubuntu-setup && ./all.sh

对OpenWhisk进行配置,进行基础的配置OpenWhisk 使用 ansible 进行部署,环境变量定义在 ansible/environments/group_vars/all下面:

limits:

invocationsPerMinute: "{{ limit_invocations_per_minute | default(60) }}"

concurrentInvocations: "{{ limit_invocations_concurrent | default(30) }}"

concurrentInvocationsSystem:  "{{ limit_invocations_concurrent_system | default(5000) }}"

firesPerMinute: "{{ limit_fires_per_minute | default(60) }}"

sequenceMaxLength: "{{ limit_sequence_max_length | default(50) }}"

上面的值定义了 OpenWhisk 在系统中的限制,分别为:

  • invocationsPerMinute表示同一个 Namespace 每分钟的调用 action 数量,
  • concurrentInvocations表示同一个 Namespace 的并发调用数量,
  • concurrentInvocationsSystem表示系统中所有 Namespace 的并发调用数量,
  • firesPerMinute表示同一 Namespace 中每分钟调用 trigger 的数量,
  • sequenceMaxLength表示 Action 的最大序列长度。

如果需要修改上述的默认值,可以把修改后的值添加到文件 ansible/environments/local/group_vars/all的末尾。例如, Action 的最大序列长度为 100,可以将 sequenceMaxLength: 120 添加到文件的末尾。

接下来,为 OpenWhisk 配置一个持久存储的数据库,有CouchDB和Cloudant可选,以CouchDB为例,配置环境

export OW_DB=CouchDB

export OW_DB_USERNAME=root

export OW_DB_PASSWORD=PASSWORD

export OW_DB_PROTOCOL=http

export OW_DB_HOST=172.17.0.1

export OW_DB_PORT=5984

openwhisk/ansible目录下,运行脚本:

ansible-playbook -i environments/local/ setup.yml

接下来使用 CouchDB 部署 OpenWhisk,确保本地已经有了 db_local.ini 并配置完毕。在openwhisk/目录下执行部署命令:

./gradlew distDocker

如果部署过程中出现问题:

可能是没有安装npm导致的,可以执行:

apt install npm

稍等片刻,可以看到BUILD SUCCESSFUL:

接下来进入到openwhisk/ansible目录:

ansible-playbook -i environments/local/ couchdb.yml

ansible-playbook -i environments/local/ initdb.yml

ansible-playbook -i environments/local/ wipe.yml

ansible-playbook -i environments/local/ apigateway.yml

ansible-playbook -i environments/local/ openwhisk.yml

ansible-playbook -i environments/local/ postdeploy.yml

部署成功后,OpenWhisk 会在系统中启动几个 docker 容器。可以通过 docker ps 来查看,如下所示:

docker ps --format "{{.Image}} \t {{.Names }}"

开发者工具

OpenWhisk 提供了一个统一的命令行接口 wsk。生成的 wsk 在 openwhisk/bin 下。有两个属性需要配置:

  • API host 部署 OpenWhisk 的主机名或 IP 地址
  • Authorization key 用户名或密码用来授权操作 OpenWhisk 的 API。

设置 API host,在单机配置中的 IP 应该为 172.17.0.1。

./bin/wsk property set --apihost '172.17.0.1'

设置 key。

./bin/wsk property set --auth `cat ansible/files/auth.guest

OpenWhisk 将 CLI 的配置信息存储在~/.wskprops 中。这个文件的位置也可以通过环境变量 WSK_CONFIG_FILE 来指定。

可以验证CLI:

wsk action invoke /whisk.system/utils/echo –p message hello –result

{

   "message": "hello"

}

体验测试

创建简单的动作 (action),代码如下:

# test.py

def main(args):

   num = args.get("number", "30")

   return {"fibonacci": F(int(num))}



def F(n):

   if n == 0:

       return 0

   elif n == 1:

       return 1

   else:

       return F(n - 1) + F(n - 2)


创建动作:

/bin/wsk action create myfunction ./test.py  --insecure

触发动作:

./bin/wsk -i action invoke myfunction --result --blocking --param nember 20

得到结果:

至此,我们完成了OpenWhisk项目的部署以及体验测试。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
2天前
|
运维 Cloud Native Serverless
Serverless Argo Workflows大规模计算工作流平台荣获信通院“云原生技术创新标杆案例”
2024年12月24日,阿里云Serverless Argo Workflows大规模计算工作流平台荣获由中国信息通信研究院颁发的「云原生技术创新案例」奖。
|
29天前
|
消息中间件 运维 安全
C5GAME 游戏饰品交易平台借助 RocketMQ Serverless 保障千万级玩家流畅体验
游戏行业蓬勃发展,作为国内领先的 STEAM 游戏饰品交易的服务平台,看 C5GAME 如何利用 RocketMQ Serverless 技术,为千万级玩家提供流畅的游戏体验,同时降低成本并提升运维效率。
103 11
C5GAME 游戏饰品交易平台借助 RocketMQ Serverless 保障千万级玩家流畅体验
|
5月前
|
存储 人工智能 JSON
基于函数计算FC一键部署ComfyUI绘画平台体验
【8月更文挑战第11天】基于函数计算FC一键部署ComfyUI绘画平台体验
151 1
|
5月前
|
Cloud Native Java Serverless
一键上天!如何将Spring PetClinic瞬间迁移到云端函数计算平台
【8月更文挑战第8天】在现代云原生开发中,将Spring应用迁移到Serverless环境正成为趋势。本文通过对比传统部署与函数计算,指导如何快速部署Spring PetClinic应用。传统部署需手动配置服务器和中间件,而函数计算则免除了这些步骤,仅需上传代码。首先,准备好Spring PetClinic源码或jar包;接着选择函数计算平台,本文以阿里云为例;随后对应用进行适配,并使用Maven构建部署包;登录阿里云控制台上传jar包并配置HTTP触发器;最后测试应用确保正常运行。
53 3
|
5月前
|
Kubernetes Serverless 调度
异步任务处理系统问题之在阿里云函数计算平台上用户提交异步任务的问题如何解决
异步任务处理系统问题之在阿里云函数计算平台上用户提交异步任务的问题如何解决
|
5月前
|
监控 Java Serverless
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
美团 Flink 大作业部署问题之想在Serverless平台上实时查看Spring Boot应用的日志要怎么操作
|
5月前
|
运维 安全 Serverless
Serverless 平台问题之面临的挑战如何解决
全托管Serverless计算平台优势包括:免运维一站式应用管理降低运营成本;精益成本按实际用量计费;支持毫秒级弹性伸缩确保业务连续性;简化容器化部署流程;内置微服务治理功能;集成多种云服务便于Web应用管理;支持开源任务调度框架;基于标准容器接口易于集成第三方工具;提供安全隔离的应用环境;以及与云生态产品的自动集成提供全面解决方案。
87 0
|
4月前
|
人工智能 自然语言处理 Serverless
阿里云函数计算 x NVIDIA 加速企业 AI 应用落地
阿里云函数计算与 NVIDIA TensorRT/TensorRT-LLM 展开合作,通过结合阿里云的无缝计算体验和 NVIDIA 的高性能推理库,开发者能够以更低的成本、更高的效率完成复杂的 AI 任务,加速技术落地和应用创新。
183 13
|
13天前
|
人工智能 Serverless API
尽享红利,Serverless构建企业AI应用方案与实践
本次课程由阿里云云原生架构师计缘分享,主题为“尽享红利,Serverless构建企业AI应用方案与实践”。课程分为四个部分:1) Serverless技术价值,介绍其发展趋势及优势;2) Serverless函数计算与AI的结合,探讨两者融合的应用场景;3) Serverless函数计算AIGC应用方案,展示具体的技术实现和客户案例;4) 业务初期如何降低使用门槛,提供新用户权益和免费资源。通过这些内容,帮助企业和开发者快速构建高效、低成本的AI应用。
58 12
|
5月前
|
Serverless API 异构计算
函数计算产品使用问题之修改SD模版应用的运行环境
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。