andrewjstone/rabble

Use a backwards/forwards compatible serialization format

Opened this issue · 0 comments

We need to support rolling upgrade of nodes. And this means backwards and forwards compatibility of messages. We could do version negotiation, but this gets dirty real fast, so instead we want this supported in the serialization format ala protobuf. But the format also must support serde and be fast.

Currently msgpack is used, but the implementation doesn't allow fields to be added to messages and for them to be ignored by old nodes. Similarly, new nodes can't fill in default fields for old messages without those fields.

Bincode is the fastest solution that I've benchmarked but it also doesn't support this.

JSON support in serde is very fast and would probably work here. CBOR takes up less space on the wire but the implementation is at least 5x slower from my prior measurements.