Rerun项目架构深度解析:从数据可视化到核心技术实现
项目概述
Rerun是一个专注于数据可视化的开源项目,它提供了一套完整的解决方案,用于记录、传输和可视化丰富的数据类型(如点云、图像等)。作为一个现代化的可视化工具,Rerun采用了多项前沿技术,包括Apache Arrow、wgpu和WebAssembly等,构建了一个跨平台、高性能的数据可视化系统。
核心组件架构
1. 日志记录API层
Rerun提供了两种语言的SDK用于数据记录:
- Python SDK:面向数据科学和机器学习领域
- Rust SDK:为需要更高性能的场景设计
这些SDK使用Apache Arrow作为底层数据编码格式,确保了数据的高效序列化和跨语言兼容性。记录的数据可以通过两种方式处理:
- 写入本地
.rrd
文件(Rerun专有数据格式) - 通过gRPC协议传输到Rerun Viewer或Rerun Server
2. 可视化查看器(Viewer)
Rerun Viewer是项目的核心可视化组件,具有两种运行模式:
原生应用模式
- 通过
rr.init("app_name", spawn=True)
直接启动 - 也可作为独立应用运行,查看本地
.rrd
文件
Web浏览器模式
- 基于WebAssembly技术
- 支持拖放
.rrd
文件到浏览器中查看 - 支持通过gRPC接收实时数据流
3. 数据存储格式(.rrd文件)
.rrd
文件是Rerun的专有数据格式,特点包括:
- 简单的日志消息追加结构
- 当前版本不保证向后/向前兼容性
- 使用Apache Arrow作为底层编码
关键技术解析
1. Apache Arrow的应用
Rerun深度集成了Apache Arrow技术栈:
- 跨语言数据格式:作为SDK和Viewer之间的通用数据语言
- 内存存储:
re_chunk_store
模块使用Arrow格式进行内存数据管理 - 高效查询:支持列式存储和向量化处理
2. 图形渲染系统
Rerun Viewer的渲染系统基于现代图形API:
- wgpu抽象层:统一Vulkan、Metal、Direct3D等不同图形API
- re_renderer模块:Rerun自研的高性能渲染引擎
- Web支持:自动在WebGPU和WebGL之间切换
3. 用户界面框架
Viewer的GUI采用egui框架,特点包括:
- 即时模式(Immediate Mode)GUI范式
- 跨平台支持(原生和Web)
- 响应式设计,无状态管理负担
4. WebAssembly集成
Rerun的Web版本充分利用Wasm技术:
- 单线程优化设计
- 受限的系统访问(通过JS桥接)
- 未来将支持WASI标准
架构设计理念
即时模式(Immediate Mode)哲学
Rerun Viewer采用了全面的即时模式设计:
- 每帧重建:GUI和可视化内容每帧完全重建
- 无状态优势:消除状态同步问题,简化代码逻辑
- 性能优化:强制持续优化,确保流畅交互体验
未来计划在保持即时模式优点的前提下,引入:
- 查询缓存
- 渲染任务缓存
- 后台线程处理大数据集
模块化架构详解
Rerun采用高度模块化的Rust crate架构,主要分为:
1. SDK与CLI层
rerun-cli
:命令行接口re_sdk
:核心日志记录功能rerun_py
:Python绑定rerun_c
:C语言绑定
2. 可视化查看器核心
- UI组件:如时间面板(
re_time_panel
)、蓝图树(re_blueprint_tree
)等 - 视图类型:支持空间视图、图表视图、张量视图等多种可视化形式
- 渲染引擎:
re_renderer
提供底层图形能力
3. 数据存储与处理
- 应用层存储:
re_entity_db
管理内存中的实体数据 - 底层存储:
re_chunk_store
基于Arrow的时序数据库 - 类型系统:
re_types
定义核心数据类型
4. 数据流处理
- 文件加载(
re_data_loader
) - gRPC通信(
re_grpc_client/server
) - Web服务(
re_web_viewer_server
)
5. 工具与基础设施
- 构建工具(
re_build_tools
) - 分析工具(
re_analytics
) - 各种实用工具库
开发与构建建议
对于想要深入了解或参与Rerun开发的开发者,建议:
- 使用
cargo depgraph
生成项目依赖图,理解模块关系 - 通过
cargo doc
查阅详细的API文档 - 重点关注
re_
前缀的核心模块
总结
Rerun项目通过精心设计的模块化架构,结合多项现代技术,构建了一个高性能、跨平台的数据可视化系统。其即时模式的设计哲学和基于Arrow的数据处理方式,使其在响应性和效率方面表现出色。随着项目的持续发展,Rerun有望成为数据可视化领域的重要工具。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考