Me he estado preguntando durante mucho tiempo si hay sistemas que tienen que "escalar" (en un servidor más potente y más costoso) en lugar de "escalar" al dividirse en muchos servidores más pequeños.
¿Existen tales sistemas, y si es así, hay algo en particular que tiende a hacer que los sistemas deban ser ampliados, en lugar de ampliarse? (Por ejemplo, tal vez las transacciones de la base de datos de reclamos de ACID u otros requisitos de integridad de datos sólidos creen esta necesidad).
Dado que la ampliación parece generar costos de hardware mucho más altos que la ampliación, parece que es algo que querría evitar, si es posible, pero no estoy seguro de si siempre es evitable o no.
Entonces, ¿hay sistemas que no se puedan escalar y que se tengan que escalar? ¿Qué puede causar esto y cómo identificaría un sistema así? (¿Generalmente comparten algunas características en común que podrían hacerlos más fácilmente identificables?)
Respuestas:
Principalmente trabajo con una aplicación que tiene cero potencial de escala horizontal . Aunque se ejecuta en Linux, la aplicación, las estructuras de datos y los requisitos de E / S me obligan a "escalar" en sistemas progresivamente más grandes para acomodar mayores cargas de trabajo de los usuarios.
Muchas aplicaciones de línea de negocio y transacciones heredadas tienen este tipo de restricciones. Es una razón por la que enfatizo que el enfoque de la industria en soluciones en la nube y arquitecturas de escala web impulsadas por DevOps ignora un buen porcentaje del mundo de la informática.
Desafortunadamente, los sistemas de ampliación que describo son realmente poco atractivos , por lo que la industria tiende a ignorar su valor o a enfatizar las habilidades necesarias para abordar sistemas grandes y críticos (por ejemplo, ganado versus mascotas ).
fuente
Desde la perspectiva del desarrollador, puedo decir que casi todos los motores tradicionales de bases de datos tradicionales solo pueden escalar y escalar es una idea posterior.
En los últimos años, con la necesidad de una mayor escalabilidad y sistemas de alta disponibilidad, se han realizado esfuerzos para que las bases de datos existentes se escalen. Pero debido a que los diseños se ven obstaculizados por el código heredado, en gran medida se atornilla en lugar de ser fundamental para el diseño. Encontrará esto si intenta escalar la mayoría de los motores de bases de datos conocidos. Agregar servidores esclavos puede ser bastante difícil de configurar y notará que viene con limitaciones significativas, algunas de las cuales pueden requerir volver a ajustar las tablas de su base de datos.
Por ejemplo, la mayoría de ellos son diseños maestro / (multi-) esclavo en lugar de diseños multimaestro. En otras palabras, es posible que solo tenga un servidor completo sentado allí y que no pueda procesar consultas. Algunos lo hacen, pero con limitaciones ... por ejemplo, solo lectura de diseño de esclavos múltiples. Por lo tanto, es posible que tenga un servidor que tome escrituras y todos los demás proporcionen datos de solo lectura. Notarás que cuando configuras estos sistemas, no siempre es un proceso sencillo y es difícil que funcione bien. En muchos casos, se siente como un perno adicional.
Por otro lado, hay algunos motores de bases de datos más nuevos que se están desarrollando con concurrencia y diseño multimaestro desde el principio. NOSQL y NewSQL son la nueva clase de diseño.
¡Entonces parece que la mejor manera de obtener un mejor rendimiento de un servidor SQL tradicional es escalar! Mientras que con NOSQL y NewSQL es tanto escalable como escalable.
La razón por la cual los sistemas RDBMS tradicionales están estrechamente acoplados es porque todos necesitan una vista consistente de los mismos datos. Cuando tiene varios servidores que aceptan actualizaciones a los mismos datos de diferentes clientes, ¿en cuál confía? Cualquier método que intente garantizar que los datos sean consistentes a través de algún tipo de mecanismo de bloqueo requiere la cooperación de otros servidores que perjudiquen el rendimiento o afecten la calidad de los datos, ya que los datos leídos de un cliente pueden estar desactualizados. Y los servidores deben decidir entre ellos qué datos son más recientes al escribir en el mismo registro. Como puede ver, es un problema complejo que se vuelve más complejo por el hecho de que la carga de trabajo se distribuye entre los servidores y no solo entre procesos o subprocesos donde el acceso a los datos aún es bastante rápido.
fuente
En mi opinión, la demarcación de escala hacia arriba / hacia afuera se determina en qué tan paralelo puede ser un flujo de trabajo y qué tan estrechamente deben coordinarse los hilos paralelos entre sí.
Subproceso único
Por cualquier motivo, este flujo de trabajo solo puede funcionar en un subproceso único.
Uno de los medios de rosca uno de los medios sistema de pesaje hasta para hacer que vaya más rápido.
Paralelismo
estrechamente acoplado Este es un sistema de subprocesos múltiples en el que los hilos deben estar estrechamente acoplados entre sí. Quizás la comunicación entre procesos debe ser muy rápida, o todo debe gestionarse a través de un único administrador de memoria. La mayoría de los sistemas RDBMS son este tipo de computación paralela.
En su mayor parte, estos sistemas son los que escala hasta mejor que fuera , aunque hay excepciones. Por ejemplo, los flujos de trabajo que funcionarían en un clúster de estilo de Imagen de sistema único, espacio de memoria único pero alta latencia entre subprocesos, pueden facilitar el escalado horizontal. Pero es muy difícil trabajar con estos sistemas SSI, por lo que la mayoría de los ingenieros simplemente hacen una caja más grande.
Paralelismo acoplado libremente
Este es un sistema multiproceso / proceso donde los subprocesos están bien con altas latencias entre sí. O no necesitan hablar entre ellos en absoluto. Los servidores web y las granjas de renderizado son ejemplos clásicos de este tipo de sistema. Sistemas como estos son mucho más fáciles de hacer más grandes que el paralelismo estrechamente acoplado, razón por la cual hay mucho entusiasmo sobre este estilo de sistema.
Este es el estilo donde la escala a cabo es mucho más fácil.
fuente