1. Pedido y entrega de mensajes:
* Entrega confiable: El DCMP debe garantizar que los mensajes se entreguen a todos los nodos participantes, incluso frente a fallas de nodo o particiones de red. Esto generalmente involucra mecanismos como reconocimientos, retransmisiones y potencialmente una forma de persistencia de mensajes.
* Orden total: Para muchas aplicaciones, un pedido total de mensajes en todos los nodos es crucial. Esto significa que todos los nodos están de acuerdo en la misma secuencia de mensajes, independientemente del orden en que fueron recibidos. Este es a menudo el aspecto más desafiante de la implementación de DCMP.
* Preservación de la causalidad: El protocolo debe preservar el orden causal de los mensajes. Si el mensaje A causa el mensaje B (por ejemplo, A desencadenantes B), entonces B debe entregarse después de A en todos los nodos.
* Tolerancia a fallas: El protocolo debe continuar funcionando correctamente incluso si algunos nodos fallan o abandonan la red. Esto podría implicar mecanismos para detectar y manejar fallas de nodos, y posiblemente elegir nuevos líderes o coordinadores.
2. Consenso y acuerdo:
* Acuerdo: Todos los nodos honestos eventualmente deben estar de acuerdo en el mismo conjunto de mensajes entregados. Este es el objetivo fundamental de un protocolo de consenso.
* consistencia: La secuencia de mensajes acordada debe ser consistente con el orden causal y los requisitos de orden total.
* terminación: El proceso de consenso eventualmente debe terminar, incluso si algunos nodos están defectuosos.
3. Gestión de membresía:
* Descubrimiento del nodo: El protocolo necesita un mecanismo para que los nodos descubran y se conecten a otros nodos en la red. Esto podría involucrar técnicas como chismes o tablas de hash distribuidas (DHT).
* Membresía dinámica: El protocolo debe manejar la adición y eliminación de nodos dinámicamente, sin interrumpir el proceso de consenso. Esto podría implicar mecanismos para detectar uniones y hojas de nodos, y actualizar la topología de la red en consecuencia.
4. Seguridad:
* Autenticación: El protocolo debe verificar la autenticidad de los mensajes para evitar la inyección o modificación de mensajes no autorizados. Las firmas digitales u otras técnicas criptográficas se utilizan típicamente.
* Integridad: El protocolo debe garantizar la integridad de los mensajes, evitando que se alteren durante la transmisión. Se pueden usar suma de verificación o códigos de autenticación de mensajes (MAC).
* confidencialidad (opcional): Dependiendo de la aplicación, el protocolo podría necesitar proporcionar confidencialidad para proteger el contenido de los mensajes del acceso no autorizado. El cifrado se puede usar para lograr esto.
5. Eficiencia:
* Latencia baja: El protocolo debe entregar mensajes con baja latencia para minimizar los retrasos en la aplicación.
* Consumo de bajo ancho de banda: El protocolo debe minimizar la cantidad de ancho de banda de red consumido.
* escalabilidad: El protocolo debe poder escalar a una gran cantidad de nodos sin una degradación significativa del rendimiento.
Estos son los requisitos funcionales clave. Los detalles de implementación específicos dependerán del algoritmo de consenso elegido (por ejemplo, Paxos, Raft, PBFT) y otras opciones de diseño. La elección del algoritmo influirá en gran medida en las compensaciones entre los diferentes requisitos, particularmente la escalabilidad y la tolerancia a las fallas. Por ejemplo, PBFT es altamente tolerante a fallas, pero no escala bien, mientras que la balsa y los paxos ofrecen una mejor escalabilidad pero con una tolerancia de fallas ligeramente menos en ciertos escenarios.