Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Goal is to design a communication protocol that able to work supports messages exchange between nodes with different Ignite versions.

...

  1. It's an internal communication protocol between Ignite nodes:
    1. There is a limited amount of peers, and all peers are aware of versions of each other.
    2. All peers are aware of messages schemas.
    3. At most time peers use schemas of same version. In short period of time (during RU) schemas might differ, but not much (few messages might differ with few fields only).
  2. It is proposed to provide compatibility between versions that differ by 1 minor version, for example between 2.20.X and 2.19.X (but not between 2.20.X and 2.18.X).
  3. Messages can be pretty big, contains cache entries (putAll, historic rebalance).
  4. Code changes should be minimal.

...

  • Order of fields is guaranteed → it send sends messages as byte stream serializing fields one by one, no delimiters are used between fields and messages.
  • There is API for sending field names for schema resolving.

...

  1. Writes field names like json. Suppose that received doesn't have a schema.

Kafka

https://kafka.apache.org/protocol.html

  1. All messages are size delimited
  2. Fields order is preserved, no field numbers or tags are used.
  3. Clients and brokers are aware of versions of each other and send messages in the form for specific versions known by each others