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

简介: 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项目的部署以及体验测试。

相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
存储 人工智能 Serverless
AI 短剧遇上函数计算,一键搭建内容创意平台
为了帮助更多内容创作者和企业快速实现 AI 短剧创作,函数计算 FC 联合百炼联合推出“AI 剧本生成与动画创作解决方案”,通过函数计算 FC 构建 Web 服务,结合百炼模型服务和 ComfyUI 生图平台,实现从故事剧本撰写、插图设计、声音合成和字幕添加到视频合成的一站式自动化流程。创作者只需通过简单操作,就能快速生成高质量的剧本,并一键转化为精美的动画。
1263 109
|
消息中间件 运维 安全
C5GAME 游戏饰品交易平台借助 RocketMQ Serverless 保障千万级玩家流畅体验
游戏行业蓬勃发展,作为国内领先的 STEAM 游戏饰品交易的服务平台,看 C5GAME 如何利用 RocketMQ Serverless 技术,为千万级玩家提供流畅的游戏体验,同时降低成本并提升运维效率。
1130 148
C5GAME 游戏饰品交易平台借助 RocketMQ Serverless 保障千万级玩家流畅体验
|
人工智能 运维 安全
阿里云 Serverless 助力海牙湾构建弹性、高效、智能的 AI 数字化平台
海牙湾(G-Town)是一家以“供应链+场景+技术+AI”为核心驱动力的科技公司,致力于为各行业提供数字化转型解决方案。通过采用阿里云Serverless架构,解决了弹性能力不足、资源浪费与运维低效的问题。SAE全托管特性降低了技术复杂度,并计划进一步探索Serverless与AI结合,推动智能数字化发展。海牙湾业务覆盖金融、美妆、能源等领域,与多家知名企业建立战略合作,持续优化用户体验和供应链决策能力,保障信息安全并创造可量化的商业价值。未来,公司将深化云原生技术应用,助力更多行业实现高效数字化转型。
800 19
|
运维 Cloud Native Serverless
Serverless Argo Workflows大规模计算工作流平台荣获信通院“云原生技术创新标杆案例”
2024年12月24日,阿里云Serverless Argo Workflows大规模计算工作流平台荣获由中国信息通信研究院颁发的「云原生技术创新案例」奖。
|
存储 人工智能 Serverless
AI 短剧遇上函数计算,一键搭建内容创意平台
AI 短剧遇上函数计算,一键搭建内容创意平台
300 0
|
存储 人工智能 JSON
基于函数计算FC一键部署ComfyUI绘画平台体验
【8月更文挑战第11天】基于函数计算FC一键部署ComfyUI绘画平台体验
513 1
|
Kubernetes Serverless 调度
异步任务处理系统问题之在阿里云函数计算平台上用户提交异步任务的问题如何解决
异步任务处理系统问题之在阿里云函数计算平台上用户提交异步任务的问题如何解决
180 0
|
7月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
769 30
|
8月前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
815 12
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
1377 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用

热门文章

最新文章