Introducción
Ante la enorme cantidad de datos que se generan en el mundo de hoy y que aumentan constantemente, los arquitectos de software deben prestar especial atención a la escalabilidad de sus soluciones. Así mismo, deben diseñar sistemas que puedan manejar, cuando sea necesario, miles de usuarios concurrentes. No es fácil, pero diseñar esta enorme escalabilidad es totalmente necesario.
Los arquitectos de software tienen varias opciones para diseñar sistemas escalables. Pueden escalar verticalmente utilizando máquinas más grandes con decenas de núcleos. Pueden usar técnicas de distribución de datos (replicación) para escalar horizontalmente por la cantidad de usuarios en aumento. Y pueden escalar volúmenes de datos horizontalmente mediante el uso de una estrategia de partición de datos. En la práctica, los arquitectos de software emplearán varias de estas técnicas, cambiando los costos de hardware, la complejidad del código y la facilidad de implementación acorde a sus necesidades particulares.
Este documento aborda cómo InterSystems IRIS Data PlatformTM permite escalabilidad vertical y horizontal, tanto de usuarios como de volúmenes de datos. Se mostrarán varias opciones para distribuir y particionar los datos y/o el volumen de usuarios, ofreciendo escenarios en los que cada opción sería particularmente útil. Finalmente, este artículo explicará cómo InterSystems IRIS ayuda a simplificar la configuración y el aprovisionamiento de los sistemas distribuidos.
Escalamiento Vertical
Quizás la forma más simple de lograr un escalamiento es hacerlo de forma “vertical”: implementar en una máquina más grande con más CPUs y memoria. InterSystems IRIS soporta el procesamiento paralelo de SQL e incluye tecnología para la optimización del uso de CPUs en máquinas con múltiples núcleos.
Sin embargo, existen límites prácticos para lo que se puede lograr solo mediante un escalamiento vertical. Primero, hasta la máquina más grande disponible podría no ser capaz de manejar los enormes volúmenes de datos y cargas de trabajo requeridos por las aplicaciones modernas. Asimismo, los “fierros” pueden ser extremadamente costosos. Muchas organizaciones creen que es más rentable comprar, por ejemplo, cuatro servidores de 16 núcleos que una máquina de 64 núcleos.
La planificación de capacidad en arquitecturas de un servidor único puede ser difícil, en especial para soluciones que probablemente tendrán cargas de trabajo muy variables. Tener la capacidad de manejar cargas máximas puede dar como resultado un excesivo desaprovechamiento en tiempos muertos. Por otra parte, tener muy pocos núcleos puede causar que el rendimiento sea muy lento durante los periodos de mucho uso. Además, aumentar la capacidad de una arquitectura basada en un único servidor implica comprar una máquina nueva completa. Añadir capacidad “en el momento” es imposible.
En resumen, aunque es importante que el software aproveche el potencial completo del hardware en el que está implementado, la escalabilidad vertical por sí sola no es suficiente para satisfacer mucho más que las cargas de trabajo estáticas.
Escalamiento Horizontal
Debido a las razones mencionadas anteriormente, la mayoría de las organizaciones que buscan una gran escalabilidad implementarán en sistemas en red, escalando cargas de trabajo y/o volúmenes de datos “horizontalmente” mediante la distribución de trabajo en servidores múltiples. Generalmente, cada servidor en la red será una máquina asequible, pero se pueden usar servidores más grandes si es necesario para aprovechar también la escalabilidad vertical.
Los arquitectos de software reconocerán que no existen dos cargas de trabajo iguales. Cientos de miles de usuarios pueden acceder a algunas aplicaciones modernas de forma simultánea, alcanzando cifras muy altas de pequeñas transacciones por segundo. Otros pueden tener solo un número reducido de usuarios, pero pueden consultar petabytes de datos. Ambas cargas de datos son muy exigentes, pero requieren diferentes métodos de escalabilidad. Comenzaremos por considerar cada escenario por separado.
Escalamiento Horizontal de Volumen de Usuarios
Para dar soporte a un gran número de usuarios (o transacciones) simultáneamente, InterSystems IRIS cuenta con una tecnología única de caché llamada Enterprise Cache Protocol (ECP).
Dentro de una red de servidores, uno se configurará como el servidor de datos donde se almacenará la información. Los otros se configurarán como servidores de aplicación. Cada servidor de aplicación activa una instancia de InterSystems IRIS y presenta datos a la aplicación como si fuese una base de datos local. Los datos no se almacenan en los servidores de aplicaciones. Estos existen para proporcionar caché y poder de procesamiento de la CPU.
Las sesiones de usuario se distribuyen entre los servidores de aplicaciones, generalmente mediante un balanceador de carga y las consultas se resuelven desde el caché del servidor de aplicaciones local, cuando es posible. Los servidores de aplicaciones obtienen datos desde el servidor de datos solo cuando es necesario. InterSystems IRIS sincroniza automáticamente los datos entre todos los participantes del clúster.
Ya que los servidores de aplicaciones se encargan de las tareas de cálculo, el servidor de datos se puede dedicar principalmente a almacenar resultados de transacciones. Los servidores de aplicaciones se pueden agregar o eliminar fácilmente del clúster a medida que las cargas de trabajo varían. Por ejemplo, en un caso de uso para retail, podría ser conveniente agregar algunos servidores de aplicaciones para manejar la carga excepcional generada durante el Black Friday y volver a desconectarlos una vez que hayan terminado las promociones.
Los servidores de aplicaciones son especialmente útiles para las aplicaciones en que se deben llevar a cabo grandes cantidades de transacciones, pero cada transacción solo afecta una porción relativamente pequeña del conjunto de datos completo. Las implementaciones que cuentan con servidores de aplicaciones con ECP han demostrado ser capaces de soportar muchos miles de usuarios simultáneos en diversas industrias.
Escalamiento Horizontal de Volumen de Datos
Cuando las consultas (generalmente de tipo analítico) deben acceder a una gran cantidad de datos, el “conjunto de datos en funcionamiento” que se debe dejar en caché para poder dar soporte de forma eficiente a la carga de trabajo de la consulta podría exceder la capacidad de memoria de una sola máquina. InterSystems IRIS proporciona una función llamada fragmentación, la cual crea particiones físicas de tablas de la base de datos entre múltiples instancias de servidores. Las aplicaciones aún acceden a una tabla lógica única, en una instancia denominada como el shard maestro. El shard maestro divide las consultas entrantes y las envía a los servidores de shardss, y cada uno de ellos obtiene una porción distinta de los datos de la tabla y sus índices asociados. Los servidores de shards procesan consultas locales de shards de forma paralela y envían de vuelta sus resultados al servidor de shards para la recopilación.
Los datos se dividen entre los servidores de shards con una llave shard, que el sistema puede gestionar automáticamente o la puede definir el arquitecto de software basándose en columnas seleccionadas de la tabla. Mediante una cuidadosa selección de las llaves para el shard, las tablas que a menudo están unidas se pueden cofragmentar, para que así las filas de dichas tablas que generalmente estarían juntas se almacenen en el mismo servidor de shards, lo que permite que la unión se realice de forma completamente local en cada servidor de shards y así maximizar la paralelización y el rendimiento.
A medida que los volúmenes de datos crecen, se pueden agregar shards fácilmente. La fragmentación es completamente transparente para la aplicación y para los usuarios.
No todas las tablas se deben fragmentar. Por ejemplo, en aplicaciones de análisis, las tablas de informaciones (ej. órdenes en un escenario de retail) generalmente son muy grandes y se fragmentarán. Las tablas de dimensiones, que son mucho más pequeñas (ej. productos, puntos de venta, etc.), no se dividirán. Las tablas no fragmentadas se almacenan en el shard maestro. Si una consulta requiere combinaciones entre tablas fragmentadas y no fragmentadas, o si se deben unir los datos de dos shards distintos, InterSystems IRIS utiliza un mecanismo muy eficiente basado en ECP para satisfacer de manera correcta y eficaz dicha solicitud. En estos casos, InterSystems IRIS solo compartirá las filas necesarias entre los shards, en vez de transmitir tablas completas a la red, como lo harían otras tecnologías. InterSystems IRIS mejora de forma transparente la eficiencia y el rendimiento de las cargas de trabajo de consultas de big data mediante la fragmentación, sin limitar los tipos de consultas que se pueden satisfacer.
La arquitectura de InterSystems IRIS permite realizar uniones complejas de múltiples tablas cuando se consultan conjuntos de datos distribuidos y particionados, sin necesidad de hacer una cofragmentación, sin replicar los datos y sin que sea necesario transmitir tablas completas entre las redes.
Escalamiento de Volúmenes de Usuarios y de Datos
Muchas soluciones modernas deben procesar simultáneamente tasas de transacción altas (volumen de usuarios) y análisis de grandes volúmenes de datos. Un ejemplo: una aplicación privada de gestión de activos o patrimonio que entrega paneles de control que resumen las carteras y riesgos de los clientes en tiempo real, basados en datos de mercado actuales.
InterSystems IRIS permite la función de estas aplicaciones de Procesamiento Híbrido Transaccional y Analítico (HTAP, por sus siglas en inglés) mediante el uso combinado de los servidores de aplicaciones y la fragmentación. Los servidores de aplicaciones se pueden agregar a la arquitectura que se muestra en la Figura 2 para distribuir la carga de trabajo en el shard maestro. Las cargas de trabajo y los volúmenes de datos se pueden escalar de forma independiente entre sí, dependiendo de las necesidades de la aplicación.
Cuando las aplicaciones requieren lo último en escalabilidad (por ejemplo, si un modelo predictivo debe anotar cada registro de una tabla de gran tamaño a medida que se ingresan y se consultan nuevos registros al mismo tiempo), cada shard de datos individual puede actuar como el servidor de datos de un modelo ECP. Nos referimos a los servidores de aplicaciones que comparten las cargas de trabajo en shards de datos como “shards de consulta”. Esto, combinado con los mecanismos transparentes para garantizar una alta disponibilidad de un clúster de InterSystems IRIS, proporciona a los arquitectos de soluciones todo lo que necesitan para satisfacer los requerimientos únicos de escalabilidad y confiabilidad de su solución.
El rendimiento comparativo y la eficiencia del método de InterSystems IRIS para la fragmentación ha sido demostrado y documentado en una prueba comparativa validada por una empresa líder en tecnología de análisis. (Lea el informe aquí).1 En las pruebas correspondientes a un caso de uso de servicios financieros misión-crítico, InterSystems IRIS demostró ser más rápido que varias otras bases de datos especializadas, a la vez que requiere menos hardware y accede a más datos.
Implementación Flexible
InterSystems IRIS entrega a los desarrolladores de software una gran flexibilidad cuando se trata de diseñar una solución altamente eficiente y escalable.
Sin embargo, la escalabilidad puede conllevar el costo de un aumento en la complejidad, ya que se añaden a la arquitectura servidores adicionales que interpretan diversos roles.
InterSystems IRIS permite el uso de scripts simples para configurar los contenedores de InterSystems IRIS como servidores de datos, servidores de shards, shards maestros, servidores de aplicaciones, etc. Los contenedores se pueden implementar fácilmente en nubes públicas o privadas. También se pueden deshabilitar fácilmente, para que las arquitecturas escalables se puedan diseñar para expandirse o contraerse según cambien las necesidades.
Conclusión
Una gran escalabilidad es indispensable para las aplicaciones modernas, en especial para las aplicaciones de Procesamiento Híbrido Transaccional y Analítico que deben manejar cargas de trabajo y volúmenes de datos muy grandes de forma simultánea. InterSystems IRIS Data Platform entrega a los arquitectos de software las opciones de escalamiento más rentables para sus aplicaciones. Soporta escalamiento vertical, servidores de aplicaciones para el escalamiento horizontal de volumen de usuarios y un método altamente eficiente de fragmentación para el escalamiento horizontal de volúmenes de datos que elimina la necesidad de la transmisión a las redes. Todas estas tecnologías se pueden utilizar de forma independiente o en conjunto para personalizar la arquitectura escalable de los requerimientos específicos de una aplicación.
Para más información sobre InterSystems IRIS Data Platform, visite InterSystems.com/IRIS.
Acerca de InterSystems
InterSystems es el motor detrás de las aplicaciones más importantes del mundo. En salud, finanzas, gobierno y otros sectores donde la vida y la subsistencia de las personas estén en juego, InterSystems es el poder detrás de lo que es importanteTM. Fundada en 1978, InterSystems es una compañía de capitales privados, con sede en Cambridge, Massachusetts, EE. UU. y con oficinas en todo el mundo. Millones de personas en más de 80 países utilizan sus productos de software diariamente. Para más información, visite InterSystems.com.
1 - InterSystems IRIS Data Platform: A Unified, Efficient Data Platform for Fast Business Insight, Kerry Dolan, Senior IT Validation Analyst, Enterprise Strategy Group, March 2018.