跳过主要内容

中间件层抽象(MLA)

讨论:中间件(通信)层抽象(MLA)

dora 需要将 MLA 实现为隔离的 crate,以提供一个中间件抽象层,为异步任务、进程内(操作系统线程)、单个计算机节点上的进程间通信或计算机网络中不同节点间的进程间通信实现具有伸缩能力的高性能通信。 MLA 需要支持不同通信模式:

  • 发布-订阅 推送/推送模式 - 发布的信息推送至订阅者
  • 发布-订阅 推送/拉取 模式 - 发布的信息写入存储,后由订阅者拉取
  • 请求 / 应答 模式
  • 点对点 模式
  • 客户端/服务器 模式

MLA 需要 抽象以下细节:

  • 异步间任务(例如,tokio 通道)、进程内(操作系统线程,例如共享内存)、进程间和主机间/网络间通信
  • 不同的传输层实现(共享内存、UDP、TCP)
  • 内置支持多种序列化/反序列化协议,例如 capnproto、protobuf、flatbuffers 等
  • 多种语言绑定 Rust、Python、C、C++等
  • 用于日志、指标、分布式跟踪的遥测工具、实时数据监控(例如,点击实时数据)、记录和回放

Rust 生态系统有大量的代码包来提供底层通信,例如:

  • tokio / crossbeam 提供多种 channel 类型服务于多种用途:MPSC、Oneshot、broadcast、watch 等
  • Tonic 提供 gRPC 服务
  • Tower 提供 请求/应答 服务
  • Zenoh 中间件 提供很多各种 发布/订阅能力

MLA 还需要提供高级 API:

  • publish(topic、value、optinal fields):- optional fields 可以包含发送者的身份以至帮助 MLA 逻辑满足上述要求
  • subscriber(topic, optional fields)-> future streams
  • put(key, value, optional fields)
  • get(key, optional fields) -> value
  • send(key, msg, optional fields)
  • recv(key, optional fields)->value

更多信息在此: #53