Localidad de datos: relevancia e implementación en Nutanix DSF

Por la física clásica sabemos que todo camino que imponga menos resistencia al movimiento requiere menos esfuerzo para ser transitado. Vamos, que ésto lo sabemos hasta por el sentido común de cualquier caminante Winking smile

Pues bien, ésto también es completamente cierto en el movimiento de datos en una red. Si podemos minimizar el número de “saltos” que un paquete debe dar en la red, reduciremos el costo (esfuerzo) de la comunicación. Es más, si podemos lograr que el paquete no tenga que viajar, consideraríamos a ése dato como local y llevaríamos el costo de la comunicación casi a cero. Un dato que no tiene que desplazarse tiene un riesgo mínimo de ser afectado en el movimiento (corrupción, pérdida) y con seguridad llega más rápido al destino pues origen y destino son el mismo lugar.

Este concepto se conoce como localidad de datos y en éste post pretendo describir con ligero detalle su funcionamiento y particularidades en Nutanix DSF.

Funcionamiento

Consideremos un bloque Nutanix NX-3060 G5 de 3 nodos con un Replication Factor de 2. Con una sola VM ejecutándose en el clúster, una versión muy simplificada de como se vería se ilustra en el siguiente diagrama:

image

Como vimos en un post pasado, los vDisk/VMs se alojarán en DSF en forma de extents de 1MB compuestos por bloques de datos contiguos. Con un RF=2 vamos a tener dos copias de cada extent distribuidas a lo largo del clúster, siendo una de ellas la copia Activa que es entregada por el CVM local en el nodo donde la VM se está ejecutando (“Extent1” en el diagrama). Desde NOS 4.5 y superiores, y si los datos del Extent son de uso frecuente (datos calientes); Nutanix DSF mantendrá en caché solamente la copia local del extent mientras que las copias remotas (y los extent locales de acceso no frecuente) se alojarán en el almacenamiento persistente o SATA tier; ésto para elevar la eficiencia en el uso del precioso espacio de los dispositivos flash.

¿Qué sucede si la VM es migrada o el nodo falla?

Vamos por partes, Jack.

Si la VM del diagrama es migrada al Nodo 02 y debe leer nuevamente el Extent1, la lectura se hará localmente y si la consulta es frecuente, el CVM subirá los metadatos del Extent1 al Unified cache del Nodo 02. ¿Qué sucede si la VM1 va a escribir un nuevo dato en, por ejemplo, Extent2? Esa escritura se hará primero localmente y se replicará luego a otro nodo para cumplir con el RF.

Ahora, ¿qué pasa si la VM requiere leer un dato que estaba originalmente en el nodo 01? Bien, ese dato será migrado a través de la red desde el Nodo 01 al Nodo02 pero en forma de Extents de 1MB. (Este nivel de granularidad en un eventual movimiento de datos es algo digno de anotar porque no está presente en el almacenamiento distribuido de otros fabricantes y beneficia el desempeño, lo cual espero ampliar en éste post). En éste punto, el diagrama se vería ahora así:

image

Inmediatamente luego que la VM se migra al Nodo 02, Nutanix DSF pone en marcha la Gestión de ciclo de vida de la Información (ILM por sus siglas en inglés) y trasladará metadatos entre niveles de caching o desde/hacia el Extent Store (capa persistente a.k.a. SATA tier) aprovechando los recursos y nivelando la utilización de los mismos a lo largo del clúster desde el momento cero.

El comportamiento es similar si el Nodo 01 fallara, con la diferencia que se crearía una nueva copia de los Extent que residían en ese nodo.

¿Qué sucede cuando se agregan nodos al clúster?

Si se agregan nuevos nodos y se migra allí la VM, entonces los datos (extent) que esté utilizando (el Active Working Set que es visible en Prism) se migra inmediatamente al nuevo nodo e ILM hace de ahi en adelante su trabajo para optimizar el uso del espacio de memoria/SSD a lo largo del clúster, mientras que Stargate se encargará también que sólo se modifique una copia del caché al mismo tiempo, para mantener la coherencia de los datos allí alojados (cache coherence).

Ventajas del enfoque Nutanix

Bueno, durante todo éste tiempo he evitado hacer comparaciones con otras plataformas de hiperconvergencia que conozco y seguiré evitándolo en lo posible porque no creo tener toda la visibilidad y autoridad para hacerlo.

Sin embargo, encuentro dos ventajas competitivas que Nutanix DSF brinda en cuanto al manejo de la localidad de datos:

Escalabilidad

Hay dos conceptos importantes en localidad de datos:

  • Localidad temporal: datos referenciados recientemente tienen más probabilidad de ser referenciados en el futuro cercano.
  • Localidad espacial: datos con ubicaciones cercanas entre sí tienden a ser referenciados dentro de cierto rango de tiempo

(Buen recurso académico sobre el tema aquí)

Así como otros productos del mercado, Nutanix DSF hace uso de los dos tipos de localidad sin embargo, su diferenciador se ve en el momento en que se agregan nuevos nodos a la infraestructura. En ese caso y como lo vimos en éste mismo post, Nutanix inmediatamente empezará a hacer uso de los recursos de cómputo, redes y almacenamiento que provean esos nodos y se encargará de mantener la eficiencia y nivelación global en uso de recursos. Sin embargo otras plataformas -que se precian de no mover datos después que una VM ha sido creada-, fallarían en utilizar la capacidad de nuevos nodos pues aunque la VM de nuestro ejemplo se moviera a un nuevo nodo (Nodo 04 digamos), aún así seguiría accediendo de manera remota a sus datos en los nodos originales, dejando esa nueva capacidad de flash y SATA sin utilizar.

Esto no sólo significa un impacto en la eficiencia en uso de capacidad, retorno de la inversión y demás, sino que también puede impactar de manera negativa al desempeño. En el siguiente punto puedo dar más luces sobre ello.

Menor dependencia en Ethernet

La verdad sea dicha: Ethernet es un estándard no construido para servir como transporte de almacenamiento. Se han propuesto e implementado una diversa cantidad de protocolos que buscan en suma lo mismo: atenuar las dificultades del estándard para servir como un medio confiable y que garantice cero pérdidas (lossless), como sí lo promete FiberChannel – que a su vez crea otras limitaciones, etc.

Uno de esos mecanismos es Flow Control que básicamente es un árbitro en el medio, quien notifica al equipo que envía I/O cuando está enviando más contenido del que se puede recibir actualmente en el destino y trata de atenuar gradualmente el volumen, así como de informar cuando se pueden incrementar ése volumen. De ahi incluso, se derivan aún más protocolos cada vez más sofisticados.

Otras plataformas de almacenamiento distribuido temerariamente afirman que es muy seguro depender de la red para mover datos en tamaños de bloques (algunos hasta de 256GB vs 1MB de Nutanix DSF) y moverlos preventivamente a todos los nodos puesto que hoy día lo común es contar con redes a 10G y dentro de poco viene 25G y 40G.

En mi opinión: no. No y no. El problema no se trata de ancho de banda –además que no todas las compañias tienen todo el stack a 10G- sino de la eficiencia de la red en el manejo de datos. Un problema fundamental como éste, no se soluciona simplemente arrojándole ancho de banda.

El enfoque Nutanix muestra una dependencia mucho menor en la red por medio de:

  • Movimiento de datos con menos frecuencia: sólo extents remotos si éstos son solicitados; no se mueven datos “preventivamente”
  • Movimiento de unidades mucho más pequeñas: si realmente es necesario mover un dato, la granularidad del extent reduce considerablemente la posibilidad de estár moviendo datos innecesarios. Es como evitar rentar el camión de mudanzas para trasladar sólo un par de medias, porque las necesitaba.

Conclusión

Quizá no haya un sólo enfoque infalible en cuanto a la localidad de los datos, pero si hablamos de uno que puede involucrar simultáneamente un manejo eficiente del espacio de flash, el aprovechamiento balanceado de los recursos del clúster y una dependencia reducida en las particularidades de la red para beneficiar el desempeño y la gestión de la capacidad; entonces estamos ante un jugador de peso en éste segmento, como lo es el Distributed Storage Fabric de Nutanix.

Espero haber aportado algún contenido de valor.

Saludos!

Advertisements