Consenso con Raft en cada rango
Cada rango es un grupo Raft propio, con su líder, sus réplicas y su log.
Cada rango de TeselaDB es un grupo Raft propio. Las réplicas de un rango acuerdan el orden de sus escrituras entre ellas, sin pasar por un coordinador central.
Cómo funciona
rango 42 rango 43
┌─────────────┐ ┌─────────────┐
│ líder n1 │ ──log─▶ │ líder n2 │ ──log─▶ ...
│ réplica n2 │ │ réplica n3 │
│ réplica n3 │ │ réplica n1 │
└─────────────┘ └─────────────┘La líder de cada rango propone las escrituras en su log. Si cae, las réplicas que quedan eligen otra. Una entrada se aplica cuando la tiene en disco la mayoría de las réplicas, de modo que una réplica lenta o caída no frena la escritura mientras las otras respondan a tiempo. Con su lease, la líder responde lecturas sin preguntar a las demás, y un seguidor puede servir lecturas hasta su marca cerrada sin pasar por la líder.
Cada núcleo de cada nodo lleva muchos grupos a la vez. Su log de Raft hace también de log de escritura del almacenamiento. Por encima de todos ellos está Group 0, el grupo Raft que guarda los metadatos del clúster: la lista de nodos, el catálogo de colecciones, el mapa de rangos con sus réplicas y la configuración que comparten todas las máquinas.
Qué implica para tu aplicación
Una escritura confirmada con w: "majority" sobrevive a la caída de cualquier minoría de réplicas de su rango. Los rangos son independientes, así que un problema en uno no frena a los demás.
Límites
Un rango necesita la mayoría de sus réplicas para aceptar escrituras. Una escritura espera al disco de la mayoría, así que réplicas lejanas añaden latencia.