部署 openYuanrong 服务类应用

部署 openYuanrong 服务类应用#

本章节向您介绍如何构建并部署使用 openYuanrong 函数服务接口开发的服务类应用,应用通过 REST API 对外提供服务。这里以单个 openYuanrong 函数开发的应用为例展开介绍,多函数应用每个函数都需要单独部署。

环境依赖#

您的应用可能包含除运行时外的其他依赖,例如:

  • Python 和 Java 程序运行依赖的包,C++ 程序运行依赖的动态库。

  • openYuanrong 函数中需要读取的环境变量。

  • openYuanrong 函数中需要读取的数据文件,使用的工具等。

openYuanrong 函数可能运行在集群中的任意节点,因此这些依赖需要在每个 openYuanrong 节点存在并保持一致。函数需要的环境变量可在注册函数时设置,通过上下文获取。在主机集群上部署时,建议预先在主机节点上安装其他依赖;在 K8s 集群上部署时,相关依赖可以和函数代码打包在一起或通过网络共享。

构建部署包#

函数部署在 K8s 集群上时,需要将编译好的代码打成 zip 包,您也可以选择将依赖一起打包。

Python 是解释性语言,无需编译过程,打包时确保函数的 Handler 等方法实现所在源码文件存放在包的根目录。例如源码文件名为 handler.py,使用如下打包命令将生成部署包 demo.zip

zip -j demo.zip handler.py

C++ 函数需要先编译为二进制,编译依赖 openYuanrong C++ SDK。打包时确保函数编译生成的二进制文件存放在包的根目录。例如函数二进制文件为 handler,参考如下打包命令可生成应用代码包 demo.zip

ldd ./handler | awk '/=>/ {print $3}' | grep -v '^$' | tr '\n' '\0' | xargs zip -j demo.zip ./handler

构建 Java 函数的 jar 包依赖 openYuanrong Java SDK。函数及依赖都在一个 jar 包中时,无需打包;分开为多个文件时,函数 jar 包放在根目录,全部文件打成一个 zip 包。

注册函数#

函数需要先注册到 openYuanrong 集群才能被调用。使用注册函数 API 完成函数注册,API 涉及的基础配置项如下:

  • name:函数名称,参考 API 中的 FaaS 函数命名规则填写。

  • runtime:函数使用的运行时类型,枚举值如 Python3.9,和您开发环境的语言版本保持一致。

  • kind:函数类型,配置为 faas

  • cpu:函数运行需要的 CPU 资源量。

  • memory:服务运行需要的内存资源量。

  • timeout:函数处理请求的超时时间。

  • storageType:函数代码包存储类型。在 openYuanrong 主机集群上部署时,建议配置为 local,即存放在主机磁盘上;在 openYuanrong K8s 集群上部署时,建议配置为 s3,即存放在支持 S3 协议的对象存储服务如 MinIO 中。

  • handler:函数中 Handler 方法的定义。

    • Python 语言为 {源码文件名}.{Handler 方法名},例如 python_func.handler。

    • C++ 语言为 {函数二进制文件名},例如 cpp_func。

    • Java 语言为 {包名}.{类名}.{Handler 方法名},例如 com.xxx.MyApp.myHandler。

  • extendedHandler: 函数中 Initializer 和 PreStop 方法的定义,配置方式与 Handler 方法相同。

  • extendedTimeout: 函数中 Initializer 和 PreStop 方法的执行超时时间。

通过函数服务示例工程查看完整示例。

调用函数#

函数支持通过 REST API 同步调用,流式(Server-Send Events)或非流式应答。流式应答数据将被分块,逐步生成并返回。非流式应答一次性返回全部结果。

使用[调用函数服务] API 执行函数调用,API 涉及的主要配置项如下:

  • Header 参数 Accept:在使用流式应答时设置。

  • Header 参数 X-Pool-Label:在 K8s 集群上部署时,函数实例亲和的资源池标签。

  • Header 参数 X-Instance-Label:在具有该标签的函数实例上处理请求。您可以在创建函数预留实例时配置标签。

通过函数服务示例工程查看完整示例。