Comparación entre SAN y NAS
Una de las mayores confusiones que he visto en los últimos años es la que existe entre NAS y SAN. Comprender qué es cada uno contribuirá en gran medida a entender dónde resultan útiles y apropiados.
Nuestra primera tarea es despojarnos de los términos de marketing y pasar a los técnicos. NAS son las siglas de Network Attached Storage (almacenamiento conectado a la red) pero no significa exactamente eso, y SAN son las siglas de Storage Area Network (red de área de almacenamiento) pero generalmente se utiliza para referirse a un dispositivo SAN, no a la red en sí. En su forma más propia, una SAN es cualquier red dedicada al tráfico de almacenamiento, pero en el mundo real no es así como se utiliza normalmente. En este caso estamos aquí para hablar de los dispositivos NAS y SAN y de cómo se comparan, así que no utilizaremos la definición que incluye la red en lugar del dispositivo. En realidad, tanto NAS como SAN son términos de marketing y, por ello, resultan un poco difusos en los bordes. Son lo bastante precisos como para usarlos en una conversación técnica normal, siempre que todas las partes sepan lo que significan, pero al discutir su significado deberíamos despojarnos de los nombres que suenan atractivos y atenernos a las descripciones más técnicas. Ambos términos, cuando se usan a través del marketing, se emplean para dar a entender que son una determinada tecnología que ha sido “convertida en aparato”, lo que hace que el uso de los términos sea innecesariamente complicado pero no más útil.
Así que nuestra primera tarea es definir qué significan estos dos nombres en un contexto de dispositivo. Ambos dispositivos son servidores de almacenamiento, simple y llanamente, solo que con dos formas distintas de exponer ese almacenamiento al mundo exterior.
El más simple de los dos es la SAN, que propiamente es un dispositivo de almacenamiento por bloques. Cualquier dispositivo que exponga su almacenamiento externamente como un dispositivo de bloques entra en esta categoría y puede utilizarse de forma intercambiable según cómo se use. Los dispositivos de almacenamiento por bloques son los discos duros externos, el DAS (Direct Attach Storage, almacenamiento de conexión directa) y la SAN. Todos ellos son en realidad lo mismo. Lo llamamos disco duro externo cuando lo conectamos a un equipo de escritorio. Lo llamamos DAS cuando lo conectamos a un servidor. Lo llamamos SAN cuando añadimos alguna forma de red, generalmente un conmutador, entre el dispositivo y el dispositivo final que consume el almacenamiento. No hay ninguna diferencia tecnológica entre estos dispositivos. Una SAN tradicional puede conectarse directamente a un equipo de escritorio y usarse como un disco duro externo. Un disco duro externo puede conectarse a un conmutador y ser utilizado por varios dispositivos de una red. La interfaz entre el dispositivo de almacenamiento y el sistema que lo utiliza es el bloque. Los protocolos habituales para el almacenamiento por bloques incluyen iSCSI, Fibre Channel, SAS, eSATA, USB, Thunderbolt, IEEE1394 (también conocido como Firewire), Fibre Channel over Ethernet (FCoE) y ATA over Ethernet (AoE). Un dispositivo que se conecte a un dispositivo de almacenamiento por bloques siempre verá el almacenamiento presentado como una unidad de disco, nada más.
Un NAS, también conocido como “filer”, es un dispositivo de almacenamiento de archivos. Esto significa que expone su almacenamiento como un sistema de archivos de red. De modo que cualquier dispositivo que se conecte a este almacenamiento no ve una unidad de disco, sino que ve un sistema de archivos montable. Cuando un NAS no se empaqueta como un aparato, simplemente lo llamamos servidor de archivos, y casi todos los dispositivos informáticos, desde los equipos de escritorio hasta los servidores, tienen incorporado cierto grado de esta funcionalidad. Los protocolos habituales para los dispositivos de almacenamiento de archivos incluyen NFS, SMB / CIFS y AFP. No obstante, hay muchos otros y, técnicamente, existen protocolos de almacenamiento de archivos de casos especiales como FTP y HTTP que también deberían calificar. Como ejemplo extremo, un servidor web tradicional es una forma muy especializada de dispositivo de almacenamiento de archivos.
Lo que separa a los dispositivos de almacenamiento por bloques de los de almacenamiento de archivos es el tipo de interfaz que presentan al mundo exterior o, dicho de otro modo, dónde se produce, dentro de la pila de almacenamiento, la división entre el dispositivo servidor y el dispositivo cliente.
Hoy en día se ha vuelto extremadamente común que los dispositivos de almacenamiento incluyan tanto almacenamiento por bloques como almacenamiento de archivos desde el mismo dispositivo. Los sistemas que hacen esto se denominan almacenamiento unificado. Con el almacenamiento unificado, que puedas decir que se comporta como un dispositivo de almacenamiento por bloques o de almacenamiento de archivos (SAN o NAS en el lenguaje común) o ambos, se basa en el comportamiento que configures para el dispositivo, no en lo que compras. Esto es importante, ya que recalca el hecho de que se trata de una distinción puramente de protocolo o de interfaz, no de tamaño, capacidad, fiabilidad, rendimiento, funciones, etc.
Ambos tipos de dispositivos tienen la opción, pero no la obligación, de proporcionar funciones ampliadas por debajo del “punto de demarcación” en el que entregan el almacenamiento al exterior. Ambos pueden proporcionar, o no, RAID, gestión de volúmenes lógicos, monitorización, etc. El almacenamiento de archivos (NAS) también puede proporcionar funciones del sistema de archivos, como las ACL de Windows NTFS.
La principal ventaja del almacenamiento por bloques es que a los sistemas que se conectan a él se les brinda la oportunidad de manipular el sistema de almacenamiento como si fuera una unidad de disco tradicional. Esto significa que el RAID y la gestión de volúmenes lógicos, que tal vez ya se estuvieran realizando en la “caja negra” del dispositivo de almacenamiento, pueden ahora volver a realizarse, si se desea, a un nivel superior. Los dispositivos cliente no son conscientes de qué tipo de dispositivo están viendo, solo de que aparece como una unidad de disco. Así que puedes elegir confiar en él (asumir que tiene un RAID de nivel adecuado, por ejemplo) o puedes combinar varios dispositivos de almacenamiento por bloques en un RAID, igual que si fueran discos locales normales. Esto es extremadamente poco frecuente, pero es una opción interesante, y existen productos diseñados para usarse de esta forma.
Más habitualmente, la gestión de volúmenes lógicos como LVM de Linux, ZFS de Solaris o los discos dinámicos de Windows se aplica sobre el almacenamiento por bloques expuesto por el dispositivo y, después, sobre eso, se emplearía un sistema de archivos. Esto es importante recordarlo: con los dispositivos de almacenamiento por bloques el sistema de archivos lo crea y gestiona el dispositivo cliente, no el dispositivo de almacenamiento. El dispositivo de almacenamiento es felizmente ajeno a cómo se utiliza el almacenamiento por bloques que está presentando y permite al usuario final usarlo como mejor le parezca, con control total. Esto se extiende incluso hasta el punto de que puedes encadenar dispositivos de almacenamiento por bloques, con uno proporcionando el almacenamiento al siguiente para que se combinen, quizá, en grupos RAID – los dispositivos de almacenamiento por bloques pueden apilarse, más o menos, de forma indefinida.
Por el contrario, un dispositivo de almacenamiento de archivos contiene toda la parte de bloques del almacenamiento, de modo que cualquier posibilidad de RAID, gestión de volúmenes lógicos y monitorización debe gestionarla el dispositivo de almacenamiento de archivos. Después, sobre el almacenamiento por bloques, se aplica un sistema de archivos. Habitualmente este sería EXT4 de Linux, ZFS de FreeBSD y Solaris, NTFS de Windows, pero otros sistemas de archivos como WAFL, XFS, JFS, BtrFS, UFS y más son ciertamente posibles. En este sistema de archivos se almacenarán los datos. Para luego compartir estos datos con el mundo exterior se utiliza un sistema de archivos de red (también conocido como sistema de archivos distribuido) que proporciona una interfaz de sistema de archivos habilitada para la red – siendo NFS, SMB y AFP los más comunes pero, como en cualquier familia de protocolos, hay numerosas posibilidades de casos especiales y exóticas.
Un dispositivo remoto que quisiera usar el almacenamiento del dispositivo de almacenamiento de archivos lo vería a través de la red igual que vería un sistema de archivos local y es capaz de montarlo de manera idéntica. Esto hace que el almacenamiento de archivos sea especialmente fácil y evidente de usar para el consumidor final, ya que resulta muy natural en todos sus aspectos. Usamos sistemas de archivos de red todos los días para la informática de escritorio normal. Cuando “mapeamos una unidad” en Windows, por ejemplo, estamos usando un sistema de archivos de red.
Una diferenciación crítica entre el almacenamiento por bloques y el almacenamiento de archivos que debe distinguirse es que, si bien ambos pueden potencialmente situarse en una red y permitir que varias máquinas cliente se conecten a ellos, solo los dispositivos de almacenamiento de archivos tienen la capacidad de arbitrar ese acceso. Esto es muy importante y no puede pasarse por alto.
El almacenamiento por bloques aparece como una unidad de disco. Si simplemente conectas una unidad de disco a dos o más equipos a la vez, puedes imaginar lo que sucederá – cada uno no sabrá nada del otro y será ajeno a los nuevos archivos que se creen y a los que otros modifiquen, y los sistemas comenzarán rápidamente a sobrescribirse entre sí. Si tu sistema de archivos es de solo lectura en todos los nodos, esto no es un problema. Pero si algún sistema está escribiendo o modificando los datos, los demás tendrán problemas. Esto generalmente provoca corrupción de datos con mucha rapidez, normalmente en cuestión de minutos. Para ver esto en acción extrema, imagina tener dos o tres sistemas cliente que crean tener acceso exclusivo a una unidad de disco y haz que todos la desfragmenten al mismo tiempo. Todos los datos de la unidad quedarán revueltos en segundos.
Un dispositivo de almacenamiento de archivos, por otro lado, tiene un arbitraje natural, ya que el sistema de archivos de red gestiona las comunicaciones para el acceso al sistema de archivos real y los sistemas de archivos, por su naturaleza, son multiusuario de forma natural. Así que si un sistema conectado a un dispositivo de almacenamiento de archivos realiza un cambio, todos los sistemas son inmediatamente conscientes del cambio y no se “pisarán los pies unos a otros”. Incluso si intentan hacerlo, el sistema de archivos del dispositivo de almacenamiento de archivos arbitra el acceso y tiene la última palabra y no deja que esto suceda. Esto hace que compartir datos sea fácil y transparente para los usuarios finales. (Aquí uso el término “usuarios finales” para incluir a los administradores de sistemas.)
Esto no significa que no haya forma de compartir el almacenamiento desde un dispositivo de bloques, pero el arbitraje del mismo no puede gestionarlo el propio dispositivo de almacenamiento por bloques. Los dispositivos de almacenamiento por bloques se hacen “compartibles” utilizando lo que se conoce como un sistema de archivos en clúster. Estos tipos de sistemas de archivos se originaron antaño, cuando los clústeres de servidores compartían recursos de almacenamiento teniendo dos servidores conectados con un controlador SCSI en cada extremo de un único cable SCSI y con las unidades compartidas conectadas en medio del cable. El único medio por el cual los servidores podían comunicarse era a través del propio sistema de archivos, por lo que se desarrollaron sistemas de archivos en clúster especiales que permitían que hubiera comunicaciones entre los dispositivos, alertando a cada uno de los cambios realizados por el otro, a través del propio sistema de archivos. Esto en realidad funciona sorprendentemente bien, pero los sistemas de archivos en clúster son relativamente poco comunes, siendo GFS de Red Hat y OCFS de Oracle algunos de los más conocidos en el mundo tradicional de los servidores, y el mucho más reciente VMFS de VMware habiéndose vuelto extremadamente conocido por su uso en el almacenamiento para virtualización. Los usuarios normales, incluidos los administradores de sistemas, pueden no tener acceso a sistemas de archivos en clúster o pueden tener necesidades que no permitan su uso. De importante mención es también que el arbitraje se gestiona mediante confianza, no mediante imposición, como ocurre con un dispositivo de almacenamiento de archivos. Con un dispositivo de almacenamiento de archivos, el propio dispositivo gestiona el arbitraje del acceso y no hay forma de eludirlo. Con los dispositivos de almacenamiento por bloques que usan un sistema de archivos en clúster, cualquier dispositivo que se conecte al almacenamiento puede ignorar el sistema de archivos en clúster y simplemente saltarse el arbitraje pasivo – esto es tan simple que normalmente sucedería de forma accidental. Puede ocurrir al montar el sistema de archivos y especificar el tipo de sistema de archivos incorrecto, o a través de una unidad que se comporte mal o de cualquier acción maliciosa. Por eso la seguridad del acceso es crítica a nivel de red para proteger el almacenamiento a nivel de bloques.
El concepto subyacente que se expone aquí es que los dispositivos de almacenamiento por bloques son dispositivos tontos (piensa en una unidad de disco glorificada) y los dispositivos de almacenamiento de archivos son dispositivos inteligentes (piensa en un servidor tradicional). Los dispositivos de almacenamiento de archivos deben contener un “ordenador” completo y funcional con CPU, memoria, almacenamiento, sistema de archivos y red. Los dispositivos de almacenamiento por bloques pueden contener estas cosas, pero no es necesario. En su forma más simple, los dispositivos de almacenamiento por bloques pueden no ser más que una unidad de disco con un adaptador USB o Ethernet conectado a ella. En realidad, no es raro que no sean más que un controlador RAID al que se conectan adaptadores Ethernet o Fibre Channel.
En ambos casos, dispositivo de almacenamiento por bloques y dispositivos de almacenamiento de archivos, podemos escalar hacia abajo hasta dispositivos trivialmente simples o podemos escalar hacia arriba hasta sistemas masivos de ultra alta disponibilidad de “clase mainframe”. Ambos pueden ser rápidos o lentos. Uno no es mejor ni peor, uno no es superior ni inferior, uno no es más ni menos empresarial – son distintos y sirven, en general, a propósitos distintos. Y hay funciones avanzadas que cualquiera de los dos puede contener o no. El reto está en saber cuál es el adecuado para cada trabajo.
Me gusta pensar en los protocolos de almacenamiento por bloques como una corriente de “salida estándar”, muy parecida a la de una línea de comandos. Así que el nivel base de cualquier “canalización” de almacenamiento es siempre un dispositivo de bloques y pueden existir numerosos dispositivos de bloques o transformaciones, canalizándose cada uno hacia el otro siempre que la salida siga siendo un protocolo de almacenamiento por bloques. Solo terminamos la cadena cuando aplicamos un sistema de archivos. De esta manera, el RAID por hardware, el RAID por red, la gestión de volúmenes lógicos, etc., pueden aplicarse en múltiples combinaciones según sea necesario. El almacenamiento por bloques no son verdaderamente solo bloques de datos, sino bloques de construcción de los sistemas de almacenamiento.
Un punto muy interesante es que, dado que los dispositivos de almacenamiento por bloques pueden encadenarse y dado que los dispositivos de almacenamiento de red deben aceptar el almacenamiento por bloques como su “entrada”, en realidad es bastante común que un dispositivo de almacenamiento por bloques (SAN) se utilice como el almacenamiento de respaldo de un dispositivo de almacenamiento de archivos (NAS), especialmente en los sistemas de gama alta. Pueden coexistir dentro de un único chasis o pueden trabajar de forma cooperativa en la red.
