Volo新能力

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. Volo 新能力 面向性能和易用性的框架迭代 王杰 Jie Wang
2. 目录 |Contents Part 01 Volo 简介 Part 02 RPC 框架迭代 Part 04 Part 03 HTTP 框架迭代 Rust 生态及展望
3. 01 Volo 简介 致力于 Rust 微服务生态的高性能框架
4. Volo 目标 & 现状 目标 •极致性能 •易用性 •可扩展性 核心抽象 •codec/protocol/net •sd/lb •context
5. Volo 目标 & 现状 目标 • • • 极致性能 易用性 易扩展 实现 • 协议 • • • • 中间件系统 • • • • • 限流 重试 超时 MLT 传输层 • • • volo-thrift volo-grpc volo-http TCP TLS Tokio Runtime
6. Volo 目标 & 现状 目标 •极致性能 •易用性 •易扩展 重要模块 • pilota •thrift •protobuf •metainfo •volo-cli • volo.yml
7. Volo 优势 & 落地 优势 • 统一抽象 •协议 •治理 •传输 •高性能 •微服务工程化 落地 •多业务线 •多服务 •go -> rust 平均 CPU 收益 40% - 50%
8. 02 RPC 框架迭代 Protobuf Unknown Fields、Protobuf Options、Thrift Field Mask
9. RPC 框架迭代 Protobuf Unknown Fields •Google Protobuf 协议扩展 •贴合 Volo-build 现有生态,接入简单 •关注性能,全链路零拷贝 01 Protobuf Options •Google Protobuf 协议扩展 •内置支持了用于控制生成代码的注解,对齐 pilota thrift 的实现 •关注易用性,提供自定义注解解析和获取的易用方法 02 Thrift Field Mask •IDL Request 运行时动态裁剪能力 •对齐 Kitex 生态,支持 Thrift Path 解析器 •支持用户 API,并在生成代码中自适应裁剪 03
10. RPC 框架迭代——PB Unknown Fields • Google PB Unknown Fields Step 1 volo init 创建项目 定义 •老版本兼容新版本定义 •跨链路传递减少强制同步升级 • Volo 用户接入 •volo-cli 一键创建服务 •volo.yml 配置开启 • Volo 接口 • _unknown_fields 字段 • 注意事项 • 新增的透传字段放到最后 Step 2 编辑 volo.yml 开启 keep_unknown_fields
11. RPC 框架迭代——PB Unknown Fields
12. RPC 框架迭代——PB Unknown Fields
13. RPC 框架迭代——PB Unknown Fields 演进方向:短路优化 • 优化思路:当读完所有已知字段后,后续所有的bytes 一次性载入 unknown fields 列表中 • 优化障碍:根据 pb 官方定义,repeated 字段的元素类型为 string、 bytes 或者 message,是不被要求连续出现的,而标量类型也可以标 注为非 packed 编码方式,这样也会允许不连续出现。 • 使用建议:把新增透传字段放在最后,序列号递增
14. RPC 框架迭代——PB Options • PB Options 用途 • • pilota 注解:提供编解码控制能力 用户自定义注解:业务相关数据 • Volo 用户接入 • • • volo-cli 一键创建服务 volo.yml 配置开启 proto idl 中使用注解 • Volo 接口 • • exts_{filename} mod ::pilota::pb::extension::* • 注意事项 • • Step 1 volo init 创建项目 自定义注解需要规避 google 和 pilota 定义的注解 tag id 自定义注解可能需要使用 touch_all 配置 Step 2 编辑 volo.yml 开启 with_descriptor
15. RPC 框架迭代——PB Options PB IDL
16. RPC 框架迭代——PB Options pilota.rust_wrapper_arc_all = true
17. RPC 框架迭代——PB Options pilota.proto 级别注解名(pilota.xxx)类型 作用 servicerust_wrapper_arc_allbool标注是否在生成代码中对所有的方法中的 request 和 response 结构体使用 Arc messageserde_attribute_messagestring为消息添加 serde 的任意 attribute name_messagestring指定生成代码中消息的名字 rust_wrapper_arcbool标注对某个字段是否使用 Arc serde_attribute_fieldstring为字段添加 serde 的任意 attribute name_fieldstring指定生成代码中字段的名字 rust_typestring指定生成代码中字段的类型 optional_repeatedbool指定 repeated 字段为 optional,会生成 Option<Vec> serde_attribute_enumstring为 enum 添加 serde 的任意 attribute name_enumstring指定生成代码中 enum 的名字 serde_attribute_enum_valuestring为 enum value 添加 serde 的任意 attribute field enum enumvalue
18. RPC 框架迭代——PB Options custom options
19. RPC 框架迭代——PB Options PB File Descriptor & Extension Mod
20. RPC 框架迭代——PB Options 演进方向:pb custom options 的性能和可扩展性提升 •pb descriptor 在生成代码中提供更多易用方法 •pb custom options 的使用有些情况需要开启 touch_all,这样会带来 build 阶段 的性能损失,也带来了更大的代码体积,后续会沿用按需生成的方式来处理注解 • 在 pilota 中提供更多 hook 点 • 目前我们仅支持在 rir 层提供 plugin 能力,所以用户仅能在这一层获取自定义 注解,控制生成代码的行为
21. RPC 框架迭代——Thrift Field Mask • Thrift Field Mask • • • 减少传输带宽和编解码开销 gateway/proxy 服务统一 idl 字段权限控制 • Volo 用户接入 • • volo-cli 一键创建服务 volo.yml 配置开启 • Volo 接口 • • ::pilota_thrift_reflect::* ::pilota_thrift_fieldmask::* • 注意事项 • 使用全局缓存,减少 path 计算 开销对主路径的影响 Step 1 volo init 创建项目 Step 2 编辑 volo.yml 开启 with_descriptor 和 with_field_mask
22. RPC 框架迭代——Thrift Field Mask Thrift Field Mask • 构建:thrift path + thrift descriptor • 黑白名单模式 • 全局 cache
23. RPC 框架迭代——Thrift Field Mask Thrift Path 定义
24. RPC 框架迭代——Thrift Field Mask Thrift Descriptor
25. RPC 框架迭代——Thrift Field Mask Thrift Field Mask - 动态裁剪 • 创建 rpc request 时,将对应的 fieldmask 设置到结构体中 • 生成代码中进行动态裁剪
26. RPC 框架迭代——Thrift Field Mask Thrift Field Mask API •path_in_mask •get_path •for_each_child 后续演进 • fieldmask 序列化与传递
27. 03 HTTP 框架迭代 HTTP/2、连接池、Trace
28. HTTP 框架迭代 新功能:HTTP/2 •通过 feature 控制协议版本 •默认 feature 为 http1 01 客户端的易用性与性能 •关注性能,为客户端支持连接池 •优化 Client 封装方式,使用 BoxService 去除复杂泛型带来的编 02 程和调试负担 易用性:Trace • 面向可观测性,提供了 SpanProvider 03
29. 04 Rust 生态与展望 volo、sonic-rs 等 rust 生态的演进方向
30. Rust 生态更新 sonic-rs 0.5 •多架构支持,ARM 支持 •新增 feature,例如 sort_keys, utf8-lossy •提升 object 类型查询性能 01 faststr • 实现 GDB/LLDB 调试插件 02 linkedbytes •支持 io slice •支持 concat 接口获取完整 bytes 03
31. Rust 生态展望 2025 年后续规划 RPC 框架 •协议扩展:Thrift MultiService、Thrift Streaming •性能:Shmipc •易用性:pilota-build 错误重构;完善服务发现和服务治理组件; 01 trace 优化 Rust 生态 •faststr 大小优化 •… 02
32. THANKS

Home - Wiki
Copyright © 2011-2026 iteam. Current version is 2.148.3. UTC+08:00, 2026-01-15 00:06
浙ICP备14020137号-1 $Map of visitor$