Volo调研
Volo 是字节跳动服务框架团队研发的轻量级、高性能、可扩展性强、易用性好的 Rust RPC 框架,使用了 Rust 最新的 GAT 特性。
特色-易用性
具体来说,这个框架使用了motore中间件, 而其使用GAT语法完成了高效的异步接口
Rust不支持一个async trait
, 一般的解决方法是使用Box(类似智能指针)来完成这件事情, 但这会带来额外的开销并且降低代码可读性. 有一个使用宏完成用Box实现异步接口的Crate
具体细节可能需要进一步理解一些Rust的语言特性
架构图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| ├─volo RPC框架的通用组件 │ └─src │ ├─discovery #服务发现:一些接口,一种简单实现(返回静态单链表) │ ├─loadbalance #负载均衡:同上(加权随机) │ ├─net #网络链接: probe创建套接字,dial建立连接,incomming进行监听,conn进行读写 │ └─util #工具: buf_reader | # ├─volo-build #编译用 │ └─src ├─volo-cli #用户界面 │ └─... ├─volo-grpc #grpc框架 │ └─src │ ├─client #客户端底层组件 │ ├─codec #编解码器 │ ├─layer #待调研,类似某种封装tonic/src/metadata │ │ └─loadbalance │ ├─metadata │ ├─server #服务端底层组件 │ └─transport ... #从tonic/src/中copy并修改了一些文件,完成rpc的请求响应相关工作 ├─volo-macros #宏 │ └─src └─volo-thrift #thrift框架 └─src ├─client │ └─layer ├─codec ├─protocol └─transport ├─pingpong └─pool
|
如何用Volo的特色实现grpc

erpc
传输层(串口),嵌入式,代码生成(结合nanopb)
erpc项目地址及其详细文档
侧重点
嵌入式,轻量化
框架图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| ├─erpcgen #代码生成工具 ├─erpcsniffer │ └─src ├─erpc_c #基础架构 │ ├─config #config.h配置文件 │ └─infra | ├─ erpc_arbitrated_client_manager.cpp | ├─ erpc_arbitrated_client_manager.hpp | ├─ erpc_basic_codec.cpp #基础编解码器 | ├─ erpc_basic_codec.hpp | ├─ erpc_client_manager.cpp | ├─ erpc_client_manager.h | ├─ erpc_client_server_common.hpp | ├─ erpc_codec.hpp #编解码器抽象定义 | ├─ erpc_common.h #状态码枚举类型的定义 | ├─ erpc_crc16.cpp | ├─ erpc_crc16.hpp | ├─ erpc_framed_transport.cpp | ├─ erpc_framed_transport.hpp | ├─ erpc_manually_constructed.hpp | ├─ erpc_message_buffer.cpp | ├─ erpc_message_buffer.hpp | ├─ erpc_message_loggers.cpp | ├─ erpc_message_loggers.hpp | ├─ erpc_pre_post_action.cpp | ├─ erpc_pre_post_action.h | ├─ erpc_server.cpp | ├─ erpc_server.hpp #Service和Server的抽象接口,注册移除服务,处理信息等 | ├─ erpc_simple_server.cpp # | ├─ erpc_simple_server.hpp | ├─ erpc_static_queue.hpp #数组实现的队列 | ├─ erpc_transport.hpp #Transport | ├─ erpc_transport_arbitrator.cpp | ├─ erpc_transport_arbitrator.hpp | ├─ erpc_version.h | ├─ infra.dox │ ├─port #便于移植 │ ├─setup #C语言接口 │ └─transports #支持不同通信方法的工具类 ├─erpc_python │ └─erpc ...
|
- rtos上的 protobuf-c
- erpc 传输层 nanopb
- volo 语法特性
- motan dubbo 事件逻辑