¿Qué tipos de sistemas tienen que "escalar" en lugar de "escalar"?


12

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?)



77
La ampliación a menudo es mucho más fácil si su software no ha sido diseñado para escalar. Rediseñar el software es costoso o imposible si no posee la fuente o si tiene influencia sobre los desarrolladores.
Zoredache

Escribir tales sistemas es un problema muy difícil. Especialmente diseños master / master que pueden ir y venir donde varios maestros escriben en los mismos registros al mismo tiempo. ¿Quién escribe gana?
Matt

3
Te puede interesar el teorema de CAP . Básicamente, un servicio que requiere consistencia y disponibilidad como se define en el teorema no será tolerar la partición. La mayoría de los requisitos del mundo real pueden sacrificar cierta consistencia por la consistencia eventual (manejar manualmente o automáticamente la inconsistencia después del hecho) o sacrificar la disponibilidad al negarse a procesar una solicitud cuando algunos de los participantes no están disponibles. Por lo tanto, los sistemas que requieren consistencia absoluta y disponibilidad absoluta se ven forzados a escalar.
Lie Ryan

1
Si por "LAN confiable" te refieres a "nunca tiene una falla", entonces no estás diseñando para el mundo real.
mfinni

Respuestas:


18

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 ).


1
"Lo más fácil es lanzar hardware al problema". ¡Por favor, la Ley de Moore, no dejes de trabajar!
cjc

2
@Demetri: Microsoft SQL Server es el producto más "de alto perfil" que se me ocurre, es una típica "ampliación" en lugar de "escalamiento horizontal". Escalarlo es casi imposible a menos que cumpla con un conjunto muy específico de criterios para la replicación de fusiones.
Mark Henderson

3
O si puede descomponer la solución en múltiples problemas. Por ejemplo, no ejecute informes en su base de datos de transacciones; golpear una réplica que se ejecuta en otro hardware. \
mfinni

1
-1. Creo que te perdiste el corazón del problema. Su problema no se ve obligado a escalar si puede reescribir el sistema para un sistema de escalado horizontal. Esta pregunta sobre los sistemas cuyo dominio del problema es tal que no es posible una escala horizontal incluso cuando se diseña desde cero.
Lie Ryan

1
@LieRyan Comprensión. Estoy afirmando que la aplicación que apoyo no se puede escalar (es un sistema similar a una base de datos) ... incluso si se rediseña, debido a restricciones arquitectónicas.
ewwhite

8

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.


¿No había estado Oracle RAC proporcionando escalado desde 10 g?
Dani_l

Tiene. Pero tener un RAC y tener un RAC que funcione perfectamente son dos cosas diferentes: esto realmente requiere un cuidado especial para seguir funcionando. Sin embargo, es un buen diseño. Si lo necesita, es probable que esté dispuesto a pagar el precio.
TomTom

Y tenga en cuenta el sistema de almacenamiento compartido necesario para Oracle RAC. Eso podría presentar un problema de escala dependiendo de cómo se implemente.
Matt

7

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.


La razón por la que los RDBMS están estrechamente acoplados es porque están estrechamente acoplados a los datos. es decir, múltiples servidores que acceden al mismo recurso.
Matt
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.