Una comunicación es confiable, o reliable, si se garantiza integridad, validez, y atomicidad en la entrega de mensajes.

En una comunicación de uno a uno, es trivial si contamos con protocolos como TCP y una red segura.

En una comunicación de uno a muchos, la atomicidad requiere atención especial. Además, debemos definir el Orden de Mensajes que garantizamos.

Atomicidad

Si los mensajes deben entregarse a múltiples procesos de forma atómica, entonces surge la necesidad de tener ACK, y demorar la entrega de los mensajes.

No es lo mismo la recepción de un mensaje (a nivel de capa de transporte), a la entrega del mensaje a la capa de aplicación. La capa de transporte puede demorar o eliminar un mensaje que ya recibió, sin entregarlo a la capa de aplicación.

Perdida de Mensajes

Ante la perdida de un mensaje, tenemos 3 estrategias principales:

  • Sin control: No tenemos certeza de si el mensaje se envió.
  • Reejecución: Volvemos a enviar el mensaje, pero podría haber reejecución.
  • Retransmisión: Implementamos un filtro de duplicados (con un ID, por ejemplo). Aseguramos que no hay reejecución.

Para el reintento, se puede utilizar exponential backoff con jitter para evitar saturar el servidor y agrupamiento de clientes.