news 2026/8/11 23:38:14

openYuanrong:多语言运行时独立部署以库集成简化 Serverless 架构 拓扑感知调度:提升函数运行时性能

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
openYuanrong:多语言运行时独立部署以库集成简化 Serverless 架构 拓扑感知调度:提升函数运行时性能

一、传统 Serverless 的痛点

在传统的 Serverless 架构中,运行时通常采用独立进程或容器化的部署方式。这种模式存在以下问题:

1. 架构复杂
2. 通信开销大
3. 运维门槛高

二、openYuanrong 的设计理念

2. 核心优势
零通信开销:
  • 函数调用直接在进程内完成
  • 无需序列化/反序列化
  • 无进程间通信(IPC)
简化运维:
  • 无需管理独立的运行时进程
  • SDK 随用户程序一起启动和停止
  • 资源由用户进程统一管理
部署简单:
Python 部署步骤

我的系统是Ubuntu 24.04 的 Python 是系统管理的,安装了

# 1. 激活 conda 环境source~/miniconda/etc/profile.d/conda.sh conda activate yr

查看 Python 版本

python3--version


安装 openYuanrong

pip install https://openyuanrong.obs.cn-southwest-2.myhuaweicloud.com/release/0.7.0/linux/x86_64/openyuanrong-0.7.0-cp311-cp311-manylinux_2_34_x86_64.whl

验证 yr 命令 yr version 查看 Python SDK 路径 python-c"import yr; import os; print(os.path.dirname(yr.__file__))"

C++ 部署步骤
查看 C++ SDK 结构
ls-la/home/test/miniconda/envs/yr/lib/python3.11/site-packages/yr/inner/runtime/sdk/cpp/

创建项目目录
mkdir-p~/cpp_democd~/cpp_demo

创建 CMakeLists.txt和创建 main.cpp
cat>CMakeLists.txt<<'EOF' cmake_minimum_required(VERSION 3.10) project(cpp_demo) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # openYuanrong SDK 路径 set(YR_INSTALL_PATH "/home/test/miniconda/envs/yr/lib/python3.11/site-packages/yr/inner/runtime/sdk/cpp") include_directories(${YR_INSTALL_PATH}/include) link_directories(${YR_INSTALL_PATH}/lib) set(CMAKE_INSTALL_RPATH "${YR_INSTALL_PATH}/lib") set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) add_executable(demo main.cpp) target_link_libraries(demo yr-api functionsdk datasystem litebus) EOFcat>main.cpp<<'EOF' #include <iostream> #include <yr/yr.h> int main() { std::cout << "openYuanrong C++ Demo" << std::endl; YR::Config conf; conf.mode = YR::Config::LOCAL_MODE; YR::Init(conf); std::cout << "openYuanrong initialized successfully!" << std::endl; YR::Finalize(); std::cout << "Demo completed!" << std::endl; return 0; } EOF

# 编译mkdir-pbuild&&cdbuild cmake..make# 运行exportLD_LIBRARY_PATH=/home/test/miniconda/envs/yr/lib/python3.11/site-packages/yr/inner/runtime/sdk/cpp/lib:$LD_LIBRARY_PATH./demo


运行成功输出

Java SDK 部署教程
# 查看 Java SDK 文件ls-la/home/test/miniconda/envs/yr/lib/python3.11/site-packages/yr/inner/runtime/sdk/java/

# 创建 Java 项目mkdir-p~/java_democd~/java_demo

# 创建 Java 源文件mkdir-psrc/main/java/democat>src/main/java/demo/Demo.java<<'EOF' package demo; import org.yuanrong.YR; import org.yuanrong.Config; public class Demo { public static void main(String[] args) { System.out.println("openYuanrong Java Demo"); // 配置本地模式 Config config = new Config(); config.setMode(Config.Mode.LOCAL_MODE); // 初始化 YR.init(config); System.out.println("openYuanrong initialized successfully!"); // 清理 YR.finalize(); System.out.println("Demo completed!"); } } EOF

我这里用的nano,你们用linux也可以

# 设置 SDK 路径SDK_PATH=/home/test/miniconda/envs/yr/lib/python3.11/site-packages/yr/inner/runtime/sdk/java# 编译javac-cp$SDK_PATH/yr-api-sdk-0.7.0.jar:$SDK_PATH/faas-function-sdk-0.7.0.jar\src/main/java/demo/Demo.java# 运行java-cp$SDK_PATH/yr-api-sdk-0.7.0.jar:$SDK_PATH/faas-function-sdk-0.7.0.jar:src/main/java demo.Demo
三种语言 SDK 对比
特性Python SDKC++ SDKJava SDK
形式Python 模块 + .so 库头文件 + 动态库JAR 包
大小约 100MB97MB15MB
安装方式pip installCMake 链接Maven 依赖
初始化yr.init()YR::Init()YR.init()

openYuanrong 拓扑感知调度:提升函数运行时性能

一、什么是拓扑感知调度

1. NUMA 架构基础

现代多核服务器通常采用 NUMA(Non-Uniform Memory Access) 架构,即"非统一内存访问"架构。

核心特点:
  • 每个 NUMA 节点有自己的本地内存
  • 访问本地内存速度快
  • 跨 NUMA 访问内存速度慢(延迟高 2-3 倍)
2. 拓扑层级

openYuanrong 支持多级拓扑感知:

3. 为什么需要拓扑感知调度

问题场景:

二、openYuanrong 的拓扑感知调度

层级说明示例
NodeNUMA 节点node0, node1
SocketCPU 插槽socket0, socket1
Core物理核心core0 - core19
L1/L2/L3 Cache缓存层级共享或独立
1. 调度亲和性 API

openYuanrong 提供了丰富的调度亲和性 API:

from yr.affinityimport(Affinity, AffinityKind, AffinityType, AffinityScope, LabelOperator, OperatorType)
亲和性类型:
类型说明使用场景
PREFERRED优先满足尽量调度到指定节点
REQUIRED必须满足必须调度到指定节点
PREFERRED_ANTI优先避开尽量避开指定节点
REQUIRED_ANTI必须避开必须避开指定节点
亲和性作用域:
作用域说明
PODPOD 级别实例亲和
NODENODE 级别实例亲和
2. 使用示例

示例 1:优先调度到特定 NUMA 节点

importyr from yr.affinityimport(Affinity, AffinityKind, AffinityType, LabelOperator, OperatorType)# 初始化yr.init()# 创建拓扑亲和性affinity=Affinity(affinity_kind=AffinityKind.RESOURCE,affinity_type=AffinityType.PREFERRED,label_operators=[LabelOperator(OperatorType.LABEL_IN,"numa_node",["node0"])])# 定义分布式函数@yr.invoke(affinities=[affinity])def compute(data):returndata *2# 调用result=compute.invoke(10)value=yr.get(result)print(f"Result: {value}")# 清理yr.finalize()


结果:

示例 2:必须调度到有 GPU 的节点

importyr from yr.affinityimport(Affinity, AffinityKind, AffinityType, LabelOperator, OperatorType)yr.init()# 标签存在:gpugpu_affinity=Affinity(affinity_kind=AffinityKind.RESOURCE,affinity_type=AffinityType.REQUIRED,label_operators=[LabelOperator(OperatorType.LABEL_EXISTS,"gpu",[])])@yr.invoke(affinities=[gpu_affinity])def gpu_compute(data):# GPU 计算任务returnprocess_on_gpu(data)

运行结果:

示例 3:实例亲和(函数间通信优化)

importyr from yr.affinityimport(Affinity, AffinityKind, AffinityType, LabelOperator, OperatorType, AffinityScope)yr.init()# 让多个函数实例运行在同一节点,减少网络通信instance_affinity=Affinity(affinity_kind=AffinityKind.INSTANCE,affinity_type=AffinityType.PREFERRED,label_operators=[LabelOperator(OperatorType.LABEL_EXISTS,"same_node",[])],affinity_scope=AffinityScope.NODE)@yr.invoke(affinities=[instance_affinity])def process(data):returndata


这个是三个示例的全部结果。

python affinity_demo.py → Result: 20 python gpu_affinity_demo.py → Result: 20 python instance_affinity_demo.py → Result: 20

总结

多语言运行时独立部署

openYuanrong 的多语言运行时独立部署方案,通过库集成的设计理念,有效解决了传统 Serverless 架构的痛点:

对比项传统 ServerlessopenYuanrong
架构复杂度多进程协作单进程集成
通信开销IPC + 序列化零开销
运维门槛高(需管理运行时)低(SDK 随程序启动)
冷启动延迟毫秒~秒级微秒级
部署方式容器/VM库依赖
核心优势:
  1. 零通信开销 - 函数调用直接在进程内完成,无需序列化/反序列化
  2. 简化运维 - SDK 随用户程序一起启动和停止,无需管理独立进程
  3. 多语言支持 - Python、C++、Java 三种 SDK,满足不同开发需求
  4. 轻量部署 - Python 约 100MB、C++ 97MB、Java 仅 15MB

这种设计特别适合:

  • 高性能计算(HPC):需要低延迟的函数调用
  • 边缘计算:资源受限,需要轻量级部署
  • 企业应用:希望简化运维复杂度的场景
拓扑感知调度

openYuanrong 的拓扑感知调度功能,通过感知底层硬件拓扑结构,智能地将函数调度到最优的计算节点:

优化点效果
减少跨 NUMA 内存访问降低内存延迟
提升缓存命中率提高计算效率
减少网络通信降低函数间调用延迟
核心特性:
  1. 多级拓扑感知 - 支持 Node、Socket、NUMA node 等层级
  2. 灵活的亲和性配置 - PREFERRED/REQUIRED/PREFERRED_ANTI/REQUIRED_ANTI 四种类型
  3. 多种作用域 - 支持 POD 级别和 NODE 级别实例亲和
  4. 多语言 API - Python 和 C++ 均提供完整的调度亲和性 API
适用场景:
场景推荐配置
HPC 高性能计算绑定到特定 NUMA 节点(REQUIRED)
AI 推理调度到有 GPU 的节点(REQUIRED + LABEL_EXISTS)
大数据处理函数和数据在同一节点(INSTANCE + NODE 作用域)
微服务服务间频繁通信,部署在同一节点(INSTANCE + PREFERRED)

这对于 HPC 高性能计算、AI 推理、大数据处理 等场景尤为重要,可以显著提升函数运行时性能

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:41:29

Phi-3-vision-128k-instruct惊艳案例分享:128K上下文下的复杂图表深度推理

Phi-3-vision-128k-instruct惊艳案例分享&#xff1a;128K上下文下的复杂图表深度推理 1. 模型能力概览 Phi-3-Vision-128K-Instruct是目前最先进的轻量级开放多模态模型&#xff0c;专为处理复杂图文推理任务而设计。这个模型最引人注目的特点是支持长达128K的上下文窗口&am…

作者头像 李华
网站建设 2026/7/14 15:41:29

DIY智能无极调速风扇:基于EspHome固件与Home Assistant的完美融合

1. 从普通风扇到智能无极调速的华丽变身 去年夏天我被家里那台老旧风扇折磨得不轻——要么全速运转吵得人心烦&#xff0c;要么完全关闭热得睡不着。直到发现用EspHome和Home Assistant改造风扇的方法&#xff0c;才真正体会到什么叫"科技改变生活"。现在我的风扇能根…

作者头像 李华
网站建设 2026/7/14 15:41:30

从图片到Word:数学公式的高效转换技巧

1. 数学公式转换的痛点与解决方案 每次看到论文里那些复杂的数学公式就头疼吧&#xff1f;特别是当我们需要在Word文档里重新输入这些公式时&#xff0c;简直是一场噩梦。想象一下&#xff0c;你要输入一个带分式、积分符号和上下标的复杂公式&#xff0c;用Word自带的公式编辑…

作者头像 李华
网站建设 2026/7/14 15:41:43

保姆级教程:YOLOv10镜像零基础入门,从安装到预测全流程详解

保姆级教程&#xff1a;YOLOv10镜像零基础入门&#xff0c;从安装到预测全流程详解 你是不是对YOLOv10这个最新的目标检测模型很感兴趣&#xff0c;但一看到复杂的安装配置就头疼&#xff1f;别担心&#xff0c;今天这篇教程就是为你准备的。我们将手把手带你使用官方预制的YO…

作者头像 李华
网站建设 2026/7/14 15:41:42

【Ubuntu】3种方式实现永不息屏与dconf-editor故障排除指南

1. 为什么需要永不息屏&#xff1f; 很多朋友在用Ubuntu做开发或者演示的时候&#xff0c;都遇到过这样的尴尬&#xff1a;正调试代码到关键步骤&#xff0c;突然屏幕黑了&#xff1b;给客户演示产品时&#xff0c;讲到一半显示器自动休眠。这种时候不仅要重新唤醒屏幕&#xf…

作者头像 李华