Un grupo Raft por rango
Por qué cada rango de TeselaDB acuerda sus escrituras con sus propias réplicas y qué ganas con ello.
TeselaDB
Equipo de TeselaDB
2 min de lectura
- Raft
- rangos
- replicación
En TeselaDB, cada rango de claves es un grupo Raft propio. Sus réplicas acuerdan el orden de sus escrituras entre ellas, sin pasar por un coordinador central. Aquí tienes cómo funciona y qué implica para tu aplicación.
Qué es un rango
Un rango es un intervalo [inicio, fin) del espacio de claves ordenado. Una colección empieza en un rango y se divide
cuando supera 64 MiB de datos vivos o 512 MiB en disco con sus versiones, o cuando recibe demasiada carga. Cada rango
tiene sus réplicas en varios nodos y es la unidad que el clúster replica y reparte, que es también la unidad que se
divide cuando cruza uno de esos límites.
Cómo se confirma una escritura
Una réplica de cada rango es la líder. Propone las escrituras en su log, y una entrada se aplica cuando la tiene en disco la mayoría de las réplicas. Con su lease, la líder responde lecturas sin preguntar a las demás. Un seguidor puede servir lecturas hasta su marca cerrada, que la líder publica 3 segundos por detrás de su reloj.
rango 42 rango 43
┌─────────────┐ ┌─────────────┐
│ líder n1 │ │ líder n2 │
│ réplica n2 │ │ réplica n3 │
│ réplica n3 │ │ réplica n1 │
└─────────────┘ └─────────────┘Muchos grupos en cada núcleo
Un nodo lleva muchos rangos. Cada núcleo de cada nodo lleva muchos grupos a la vez, y su log de Raft es también el log de escritura del almacenamiento, así que una escritura no se guarda dos veces en disco. Los metadatos del clúster, como los nodos, el catálogo y la lista de rangos, viven en otro grupo Raft, Group 0.
Qué ganas
Los rangos son independientes. Un problema en uno no frena a los demás. Si cae un nodo, cada rango que lideraba elige
una líder nueva entre sus réplicas y sigue aceptando escrituras mientras responda la mayoría. Una escritura confirmada
con w: "majority" sobrevive a la caída de cualquier minoría de réplicas de su rango.
Lo que cuesta
Un rango necesita la mayoría de sus réplicas para aceptar escrituras, así que cada escritura espera al disco de esa mayoría. Si repartes las réplicas entre centros de datos lejanos, esa espera se nota en la latencia. Más detalles en Consenso con Raft en cada rango y Rangos y réplicas.