部署 openYuanrong 应用#
本章节向您介绍如何构建应用并在 openYuanrong 集群中部署。
环境依赖#
您的应用可能包含除运行时外的其他依赖,例如:
Python 和 Java 程序运行依赖的包,C++ 程序运行依赖的动态库。
openYuanrong 函数中需要读取的环境变量。
openYuanrong 函数中需要读取的数据文件,使用的工具等。
openYuanrong 函数可能运行在集群中的任意节点,因此这些依赖需要在每个 openYuanrong 节点存在并保持一致。在生产环境中,建议预先安装相关的依赖。
Python 应用#
Python 是解释性语言,无需编译过程。您在 openYuanrong 集群中部署 Python 应用时,需要保证集群中所有节点都已经安装应用所需的依赖。
C++ 应用#
C++ 应用需要编译一个二进制 Driver 程序,以及包含所有 openYuanrong 函数的动态库。部署时,将动态库拷贝到 openYuanrong 集群所有节点的相同路径下,并选择如下方式之一配置该路径。
运行 Driver 程序时,使用
--codePath参数指定动态库的绝对路径。Driver 程序中调用
YR::Init(const Config &conf)接口时,配置 Config 的loadPaths参数。
以使用 CMake 构建为例,一个简单的应用工程目录如下。src 目录存放源码,CMakeLists.txt 是 CMake 构建系统使用的配置文件,build 目录用于存放构建生成的二进制和动态库文件。在 build 目录下依次执行命令 cmake .. 和 make,即可完成构建。
yr-cpp-demo
├── src
│ └── demo.cpp
├── CMakeLists.txt
└── build
CMakeLists.txt 文件参考:
cmake_minimum_required(VERSION 3.16.1)
# 指定项目名称,例如:yr-cpp-demo
project(yr-cpp-demo LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 17)
# 指定编译生成文件路径在 build 目录下
set(SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(BINARY_DIR ${SOURCE_DIR}/build)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${BINARY_DIR})
set(CMAKE_CXX_FLAGS "-pthread")
set(BUILD_SHARED_LIBS ON)
# 替换 YR_INSTALL_PATH 的值为 openYuanrong 安装路径,可通过 yr version 命令查看
set(YR_INSTALL_PATH "/usr/local/lib/python3.9/site-packages/yr/inner")
link_directories(${YR_INSTALL_PATH}/runtime/sdk/cpp/lib)
include_directories(
${YR_INSTALL_PATH}/runtime/sdk/cpp/include
)
# 生成可执行文件 cpp-demo,修改 demo.cpp 为您对应的源码文件
add_executable(cpp-demo src/demo.cpp)
target_link_libraries(cpp-demo yr-api)
# 生成动态库文件 cpp-demo-dll,修改 demo.cpp 为您对应的源码文件
add_library(cpp-demo-dll SHARED src/demo.cpp)
target_link_libraries(cpp-demo-dll yr-api)
构建成功将生成二进制文件 cpp-demo 和 动态库文件 libcpp-demo-dll.so。以使用 /opt/openyuanrong/function/demo 作为代码路径为例,需要拷贝 libcpp-demo-dll.so 文件到集群所有节点该路径下。在 build 目录下执行命令 ./cpp-demo --codePath=/opt/openyuanrong/function/demo 即可运行应用。
Java 应用#
Java 应用构建的 jar 包可根据需要自行选择是否包含依赖。部署时,将 jar 包和依赖拷贝到 openYuanrong 集群所有节点的相同路径下,并选择如下方式之一指定该路径。
运行应用时,使用
-Dyr.codePath参数指定 jar 包的绝对路径。应用程序中调用
init(Config conf)接口时,配置 Config 的loadPaths参数。
以使用 Maven 构建为例,一个简单的应用工程目录如下。demo 目录存放源码,pom.xml 是 Maven 构建系统使用的配置文件。在 yr-java-demo 目录下执行命令 mvn clean package,即可完成构建。
yr-java-demo
├── pom.xml
└── src
└── main
└── java
└── com
└── demo
└── Main.java
pom.xml 文件参考:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.demo</groupId>
<artifactId>main</artifactId>
<version>1.0.0</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<!-- 修改版本号为您实际使用版本 -->
<groupId>com.yuanrong</groupId>
<artifactId>yr-api-sdk</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifest>
<mainClass>com.demo.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</plugin>
</plugins>
</build>
</project>
构建成功将在 yr-java-demo/target 目录下生成 jar 包 main-1.0.0.jar。以使用 /opt/openyuanrong/function/demo 作为代码路径为例,需要拷贝 main-1.0.0.jar 文件到集群所有节点该路径下。在 target 目录下执行命令 java -Dyr.codePath=/opt/openyuanrong/function/demo -cp ./main-1.0.0.jar com.demo.Main 即可运行应用。