Skip to content

MLA - Middleware Layer Abstraction #37

@heyong4725

Description

@heyong4725

Middleware (communication) layer abstraction (MLA)

We need to implement MLA as a separate crate to provides a middleware abstraction layer that enables scalable, high performance communications for inter async tasks, intra-process (OS threads), interprocess communication on a single computer node or between different nodes in a computer network. MLA needs to support different communication patterns:

  • publish-subscribe push / push pattern - the published message is pushed to subscribers
  • publish-subscribe push / pull pattern - the published message is write to storage and later pulled by subscribers
  • Request / reply pattern
  • Point-to-point pattern
  • Client / Server pattern

The MLA needs to abstract following details:

  • inter-async tasks (e.g., tokio channels), intraprocess (OS threads, e.g., shared memory), interprocess and inter-host / inter-network communication
  • different transport layer implementations (shared memory, UDP, TCP)
  • builtin support for multiple serialization / deserialization protocols, e.g, capnproto, protobuf, flatbuffers etc
  • different language bindings to Rust, Python, C, C++ etc
  • telemetry tools for logs, metrics, distributed tracing, live data monitoring (e.g., tap a live data), recording and replay

Rust eco-system has abundant crates to provide underlaying communications, e.g.,:

  • tokio / crossbeam provides different types of channels serving different purpose: mpsc, oneshot, broadcast, watch etc
  • Tonic provides gRPC services
  • Tower provides request/reply service
  • Zenoh middleware provides many different pub/sub capabilities

MLA also needs to provide high level APIs:

  • publish(topic, value, optional fields):- optional fields may contain senders' identify to help MLA logics to satify above requirements
  • 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions