Design Goals for OpenTelemetry Wire Protocol
We want to design a telemetry data exchange protocol that has the following characteristics:
Be suitable for use between all of the following node types: instrumented applications, telemetry backends, local agents, stand-alone collectors/forwarders.
Have high reliability of data delivery and clear visibility when the data cannot be delivered.
Have low CPU usage for serialization and deserialization.
Impose minimal pressure on memory manager, including pass-through scenarios, where deserialized data is short-lived and must be serialized as-is shortly after and where such short-lived data is created and discarded at high frequency (think telemetry data forwarders).
Support ability to efficiently modify deserialized data and serialize again to pass further. This is related but slightly different from the previous requirement.
Ensure high throughput (within the available bandwidth) in high latency networks (e.g. scenarios where telemetry source and the backend are separated by high latency network).
Allow backpressure signalling.
Be load-balancer friendly (do not hinder re-balancing).