Computación de alto rendimiento [clúster de alto rendimiento]

  • Independientemente de lo optimizado que esté un servidor, no importa qué tan bueno se utilice el hardware, siempre habrá un límite de rendimiento. Cuando el rendimiento de un solo servidor no puede satisfacer las necesidades comerciales, es necesario diseñar un clúster de alto rendimiento para mejorar el rendimiento de procesamiento general del sistema.
  • La esencia de los clústeres de alto rendimiento es muy simple: aumente la potencia informática general del sistema agregando más servidores. El cálculo en sí tiene una característica: los mismos datos de entrada y la misma lógica, sin importar qué servidor se ejecute, deben obtener la misma salida. Por lo tanto, la complejidad del diseño de clústeres de alto rendimiento se refleja principalmente en la asignación de tareas. Es necesario diseñar una estrategia de asignación de tareas razonable y asignar tareas informáticas a varios servidores para su ejecución.
  • La complejidad de los clústeres de alto rendimiento se refleja principalmente en la necesidad de agregar un asignador de tareas y elegir un algoritmo de asignación de tareas apropiado para la tarea. Para los distribuidores de tareas, el término general más popular es "equilibrador de carga". Sin embargo, este nombre es algo engañoso. Hace que la gente piense inconscientemente que el propósito de la asignación de tareas es mantener la carga de cada unidad de cómputo en un estado equilibrado. De hecho, la asignación de tareas no solo considera el equilibrio de carga de las unidades de cómputo. Los diferentes algoritmos de asignación de tareas tienen diferentes objetivos. Algunos se basan en consideraciones de carga, algunos se basan en el rendimiento (rendimiento, tiempo de respuesta> y otros se basan en consideraciones comerciales. El equilibrio de carga no es solo para que la carga de la unidad informática alcance un estado equilibrado).

Clasificación de equilibrio de carga

Los sistemas de equilibrio de carga comunes incluyen tres tipos: equilibrio de carga de DNS, equilibrio de carga de hardware y equilibrio de carga de software.

Equilibrio de carga de DNS

El DNS es el método más simple y común de equilibrio de carga, y generalmente se usa para lograr un equilibrio a nivel geográfico. Por ejemplo, los usuarios del norte visitan la sala de computadoras en Beijing y los usuarios del sur visitan la sala de computadoras en Shenzhen. La esencia del equilibrio de carga de DNS es que la resolución de DNS del mismo nombre de dominio puede devolver diferentes direcciones IP. Por ejemplo, también es www.baidu.com. La dirección obtenida es 61.135.165.224, y la dirección obtenida por los usuarios del Sur después del análisis es 14.2 15.177.38

Equilibrio de carga de DNS El equilibrio de carga de
Inserte la descripción de la imagen aquí
DNS es fácil de implementar y de bajo costo, pero también tiene desventajas como demasiada granularidad y pocos algoritmos de equilibrio de carga.

  • Simple y de bajo costo: el trabajo de equilibrio de carga lo maneja el servidor DNS, no es necesario desarrollar o mantener el equipo de equilibrio de carga usted mismo
  • Acceso cercano para mejorar la velocidad de acceso: la resolución de DNS puede basarse en la IP de origen de la solicitud y resolverse en la dirección del servidor más cercana al usuario, lo que puede acelerar el acceso y mejorar el rendimiento
  • La actualización no es oportuna: el tiempo de caché de DNS es relativamente largo. Después de modificar la configuración de DNS, debido al almacenamiento en caché, muchos usuarios continuarán accediendo a la IP antes de la modificación. Dicho acceso fallará, lo que no logrará el propósito de equilibrio de carga y también afectará El usuario normalmente usa el negocio
  • Escalabilidad deficiente: el proveedor de nombres de dominio controla el equilibrio de carga de DNS y es imposible realizar funciones más personalizadas y características extendidas para él en función de las características comerciales
  • La estrategia de distribución es relativamente simple: el equilibrio de carga de DNS admite pocos algoritmos: no puede distinguir la diferencia de servidores (la carga no se puede juzgar de acuerdo con el estado del sistema y los servicios); tampoco puede percibir el estado del servidor back-end

En vista de algunas deficiencias del equilibrio de carga de DNS, para los servicios sensibles a retrasos y fallas, algunas empresas han implementado la función de HTTP-DNS por sí mismas, es decir, utilizan el protocolo HTTP para implementar un sistema DNS privado. Este esquema es lo opuesto a las ventajas y desventajas del DNS general.

Equilibrio de carga de hardware

El equilibrio de carga de hardware es lograr la función de equilibrio de carga a través de un dispositivo de hardware separado. Este tipo de dispositivo es similar a un conmutador de enrutador y puede entenderse como un dispositivo de red básico para el equilibrio de carga. Actualmente, existen dos dispositivos de equilibrio de carga de hardware típicos en la industria: FS y A10. Este tipo de equipo tiene un rendimiento sólido y funciones potentes, pero el precio no es barato. Generalmente, solo las empresas "tiranos locales" considerarán el uso de dicho equipo. Las empresas ordinarias de nivel empresarial no pueden pagarlo, y el volumen de negocio no es tan grande, por lo que utilizar estos equipos es un desperdicio.

Las ventajas y desventajas del equilibrio de carga de hardware son las siguientes

  • Funciones potentes: soporte completo para el equilibrio de carga en todos los niveles, soporte para algoritmos integrales de equilibrio de carga y soporte para el equilibrio de carga global
  • Rendimiento potente: en comparación, el soporte de equilibrio de carga de software hasta el nivel 100.000 ya es muy potente, y el equilibrio de carga de hardware puede admitir más de 1 millón de simultaneidad
  • Alta estabilidad: equilibrio de carga de hardware comercial, pasó una prueba buena y rigurosa, después de un uso a gran escala, alta estabilidad
  • Admite protección de seguridad: además de las funciones de equilibrio de carga, el equipo de equilibrio de hardware también tiene funciones de seguridad como firewalls y ataques DDOS
  • Caro: cientos de miles a millones
  • Escalabilidad deficiente: los dispositivos de hardware se pueden configurar de acuerdo con la empresa, pero no se pueden ampliar ni personalizar

Equilibrio de carga de software

  • El equilibrio de carga de software implementa la función de equilibrio de carga a través del software de equilibrio de carga. Los más comunes son Nginx y LVS. Nginx es el equilibrio de carga de 7 capas del software y LVS es el equilibrio de carga de 4 capas del kernel de Linux. La diferencia entre la capa 4 y la capa 7 radica en el protocolo y la flexibilidad. Nginx soporta protocolos HTTP y E-mail, mientras que LVS es un balanceo de carga de 4 capas, independiente del protocolo, se pueden hacer casi todas las aplicaciones, como chat, base de datos, etc.
  • La principal diferencia entre el software y el hardware es el rendimiento. El rendimiento del equilibrio de carga del hardware es mucho mayor que el rendimiento del equilibrio de carga del software. El rendimiento de Ngxin es 10,000, y un Nginx en un servidor Linux general puede llegar a 50,000 por segundo: el rendimiento de LVS es 100,000, que se dice que llega a 800,000 por segundo; y el rendimiento propio es de millones, desde 200 Diez mil por segundo a 8 millones por segundo, por supuesto, la mayor ventaja del equilibrio de carga de software es barata
  • Además de utilizar un sistema de código abierto para el equilibrio de carga, si la empresa es especial, también puede personalizarse en función del sistema de código abierto (por ejemplo, el complemento Nginx) o incluso realizar una autoinvestigación.
    Arquitectura de equilibrio de carga de Nginx
    Inserte la descripción de la imagen aquí

Las ventajas y desventajas del equilibrio de carga de software son las siguientes:

  • Simple: tanto la implementación como el mantenimiento son relativamente simples
  • Barato: solo compre un servidor Linux e instale el software
  • Flexible: el equilibrio de carga de Capa 4 y Capa 7 se puede seleccionar de acuerdo con el negocio; también se puede expandir fácilmente en función del negocio, por ejemplo, el complemento Nginx se puede utilizar para lograr funciones de personalización empresarial
  • Rendimiento medio: un Nginx puede admitir aproximadamente 50.000 simultaneidad
  • No es tan potente como el equilibrio de carga de hardware
  • Generalmente no tienen funciones de seguridad como firewall y ataque anti-DDOS

Arquitectura de equilibrio de carga

Equilibrio de carga de DNS, equilibrio de carga de hardware, equilibrio de carga de software, cada método tiene algunas ventajas y desventajas, pero eso no significa que en las aplicaciones reales solo se pueda elegir uno u otro en función de sus ventajas y desventajas, sino en base a ellas. Las ventajas y desventajas se utilizan en combinación. Específicamente, los principios básicos de la combinación son: el equilibrio de carga de DNS se usa para lograr el equilibrio de carga a nivel geográfico; el equilibrio de carga de hardware se usa para lograr el equilibrio de carga a nivel de clúster; el equilibrio de carga de software se usa para lograr el equilibrio de carga a nivel de máquina

Inserte la descripción de la imagen aquí

Algoritmo de equilibrio de carga

Existe una gran cantidad de algoritmos de balanceo de carga, y se pueden personalizar y desarrollar de acuerdo con algunas características comerciales. Independientemente de las diferencias en los detalles, de acuerdo con los objetivos esperados de los algoritmos, se pueden dividir aproximadamente en las siguientes categorías:

  • Clasificación de nivel de tarea: El sistema de balanceo de carga distribuye equitativamente las tareas recibidas al servidor para su procesamiento. El "promedio" aquí puede ser el promedio de números absolutos o el promedio de proporciones o pesos.
  • Equilibrio de carga: el sistema de equilibrio de carga se distribuye de acuerdo con la carga del servidor. El pozo de carga aquí no es necesariamente el número de conexiones, la tasa de uso de E / S y el rendimiento de la tarjeta de red en el sentido habitual para medir la presión del sistema.
  • Categoría de rendimiento óptimo: el sistema de equilibrio de carga asigna tareas de acuerdo con el tiempo de respuesta del servidor y prioriza las nuevas tareas al servidor con la respuesta más rápida.
  • Tipo de hash: el sistema de equilibrio de carga realiza cálculos de hash basándose en información clave de la tarea y distribuye las solicitudes con el mismo valor de hash al mismo servidor. Hash de dirección de origen común, hash de dirección de destino, hash de identificación de sesión, hash de identificación de usuario, etc.

votación

Una vez que el sistema de equilibrio de carga recibe la solicitud, se asigna al servidor en orden. El sondeo es la estrategia más simple, sin prestar atención al estado del servidor en sí, por ejemplo:

  • Un determinado servidor entra actualmente en un bucle infinito debido a un error del programa, lo que provoca una alta carga de la CPU. El sistema de equilibrio de carga no se da cuenta de ello o continuará enviándole solicitudes continuamente.
  • Hay máquinas nuevas en el clúster con 32 núcleos y máquinas antiguas con 16 núcleos. El sistema de equilibrio de carga no se preocupa. El número de tareas asignadas a las máquinas nuevas y antiguas es el mismo.

Cabe señalar que el sistema de equilibrio de carga no necesita prestar atención al "estado del servidor en sí", la palabra clave aquí es "él mismo". Es decir, mientras el servidor esté en ejecución, el estado de ejecución no se refiere, pero si el servidor está directamente sacudido, o el servidor y el sistema de equilibrio de carga están desconectados, el sistema de equilibrio de carga lo sabe y debe tratarse en consecuencia. . Por ejemplo, es obviamente irrazonable eliminar un servidor de la lista de servidores asignables, de lo contrario, parecerá que los servidores son máquinas de rock y las tareas se le asignan continuamente. Con todo, "simple" es la ventaja y la desventaja del algoritmo de sondeo.

Encuesta ponderada

El sistema de equilibrio de carga asigna tareas en función de los pesos del servidor. Los pesos aquí generalmente se configuran estáticamente en función de la configuración del hardware. Los cálculos dinámicos serán más adecuados para la empresa, pero la complejidad también será mayor. El sondeo ponderado es una forma especial de sondeo y su objetivo principal es resolver el problema de las diferentes capacidades de procesamiento del servidor. Por ejemplo, si hay máquinas nuevas con 32 núcleos en el clúster y máquinas antiguas con 16 núcleos, entonces teóricamente podemos suponer que la potencia de procesamiento de la máquina nueva es el doble que la de la máquina anterior, y el sistema de equilibrio de carga puede basarse en una proporción de 2: 1 Asigne más tareas a la nueva máquina para aprovechar al máximo el rendimiento de la nueva máquina.

El sondeo ponderado resuelve el problema de que el algoritmo de sondeo no puede realizar la asignación de tareas en función de la diferencia en la configuración del servidor, pero también existe el problema de que la asignación de tareas no se puede realizar en función de la diferencia en el estado del servidor.

La carga más baja primero

El sistema de equilibrio de carga asigna tareas al servidor con la carga actual más baja. La carga aquí se puede medir con diferentes indicadores según los diferentes tipos de tareas y escenarios comerciales. P.ej:

  • LVS es un dispositivo de equilibrio de carga de red de 4 capas que puede juzgar el estado del servidor por el "número de conexiones". Cuanto mayor sea el número de conexiones del servidor, mayor será la presión del servidor.
  • Nginx, un sistema de carga de red de 7 capas, puede juzgar el estado del servidor en función del "número de solicitudes HTTP". El algoritmo de equilibrio de carga integrado en CNginx no admite este método y debe ampliarse)
  • Si desarrollamos nuestro propio sistema de equilibrio de carga, podemos elegir indicadores para medir la presión del sistema en función de las características comerciales. Si hace un uso intensivo de la CPU, puede usar "carga de CPU" para medir la presión del sistema: si es intensivo en E / S, puede usar "carga IIO" para medir la presión del sistema

El algoritmo de carga mínima resuelve el problema de la incapacidad de percibir el estado del servidor en el algoritmo de sondeo, y el costo de esto es muy complejo. P.ej:

  • El algoritmo con la menor cantidad de conexiones primero requiere que el sistema de balanceo de carga cuente las conexiones establecidas actualmente por cada servidor. Su escenario de aplicación se limita a cualquier solicitud de conexión recibida por el balanceo de carga que se reenviará al servidor para su procesamiento; de lo contrario, si el sistema de balanceo de carga y el servidor son fijos El método del grupo de conexiones no es adecuado para adoptar este algoritmo. Por ejemplo, LVS puede adoptar este algoritmo para el equilibrio de carga, mientras que un sistema de equilibrio de carga que se conecta al clúster MySQL a través del grupo de conexiones no es adecuado para adoptar este algoritmo para el equilibrio de carga.
  • El algoritmo con la menor prioridad de carga de la CPU requiere que el sistema de equilibrio de carga recopile la carga de la CPU de cada servidor de alguna manera, y es necesario determinar si la carga de 1 minuto es la estándar o la carga de 15 minutos. Si no hay un minuto es definitivamente más de 15 Los minutos son mejores o peores. El intervalo de tiempo óptimo para diferentes negocios es diferente. Un intervalo de tiempo demasiado corto puede causar fluctuaciones frecuentes, y un intervalo de tiempo demasiado largo puede causar una respuesta lenta cuando llegan los picos.

El algoritmo de prioridad de carga más baja básicamente puede resolver las deficiencias del algoritmo de sondeo a la perfección, porque después de adoptar este algoritmo, el sistema de equilibrio de carga necesita percibir el estado de ejecución actual del servidor. Por supuesto, el precio es un aumento sustancial de complejidad. En términos sencillos, el sondeo puede ser un algoritmo que se puede implementar en 5 líneas de código, mientras que el algoritmo de prioridad de carga más baja puede tardar 1,000 líneas en implementarse e incluso requiere el desarrollo de código para el sistema de equilibrio de carga y el servidor. Si el algoritmo de prioridad de carga más baja en sí mismo no está bien diseñado o no es adecuado para las características operativas de la empresa, el algoritmo en sí puede convertirse en un cuello de botella en el rendimiento o causar muchos problemas inexplicables. Entonces, aunque el efecto del algoritmo de prioridad de carga más baja parece muy bueno, de hecho, no hay tantos escenarios de sondeo (incluido el sondeo ponderado) que se utilizan realmente.

Mejor clase de rendimiento

El algoritmo de prioridad de carga más baja se asigna desde la perspectiva del servidor, mientras que el algoritmo de prioridad de mejor rendimiento se asigna desde la perspectiva del cliente. La tarea se asigna primero al servidor con la velocidad de procesamiento más rápida. Manera de lograr la respuesta más rápida al cliente.
De manera similar al algoritmo de prioridad de carga más baja, el algoritmo de prioridad de mejor rendimiento percibe esencialmente el estado del servidor y solo mide el estado del servidor a través del estándar externo de tiempo de respuesta. Por lo tanto, los problemas del algoritmo de prioridad de rendimiento óptimo son similares a los del algoritmo de prioridad de carga más baja, y la complejidad es alta, reflejada principalmente en:

  • El sistema de equilibrio de carga necesita recopilar y analizar el tiempo de respuesta de cada tarea de cada servidor. En una gran cantidad de escenarios de procesamiento de tareas, esta recopilación y las estadísticas en sí consumirán más rendimiento.
  • Para reducir este consumo estadístico, se pueden tomar estadísticas mediante muestreo, es decir, sin contar el tiempo de respuesta de todas las tareas, sino muestreando el tiempo de respuesta de algunas tareas para estimar el tiempo de respuesta de la tarea general, aunque las estadísticas de muestreo pueden reducir el consumo de rendimiento , Pero hace que la complejidad aumente aún más, porque para determinar la frecuencia de muestreo adecuada, la frecuencia de muestreo es demasiado baja dará lugar a resultados inexactos, la frecuencia de muestreo es demasiado alta dará lugar a un consumo de alto rendimiento, encontrar una frecuencia de muestreo adecuada también es un asunto complicado
  • Independientemente de todas las estadísticas o estadísticas de muestreo, debe elegir un período adecuado: el mejor rendimiento en 10 segundos, el mejor rendimiento en 1 minuto o el mejor rendimiento en 5 minutos ... No existe un ciclo único para todos. Es necesario hacer juicios y elecciones basados ​​en el negocio real. Esto también es un asunto relativamente complicado. Incluso después de que el sistema está en línea, debe ajustarse continuamente para lograr el diseño óptimo.

Clase hash

El sistema de balanceo de carga realiza la operación Hash de acuerdo con cierta información clave en la tarea y asigna solicitudes con el mismo valor Hash al mismo servidor, con el propósito de cumplir con los requisitos comerciales específicos. P.ej:

  • El hash de la dirección de origen
    asigna tareas que se originan en la misma dirección IP de origen al mismo servidor para su procesamiento, lo que es adecuado para empresas que tienen transacciones y sesiones. Por ejemplo, cuando ingresamos a la banca en línea a través de un navegador, se generará una información de sesión. Esta sesión es temporal y dejará de ser válida después de cerrar el navegador. No es necesario conservar la información de la sesión en el backend de la banca en línea, solo guardar temporalmente la sesión en un servidor determinado, pero es necesario asegurarse de que el usuario pueda acceder al mismo servidor en todo momento durante la existencia de la sesión. Este tipo de escenario empresarial se puede utilizar Dirección de origen Hash para lograr
  • ID Hash
    asigna un servicio identificado por un ID al mismo servidor para su procesamiento. El ID aquí es generalmente el ID de datos temporales (por ejemplo, el ID de sesión). Por ejemplo, en el ejemplo de inicio de sesión de banca en línea anterior, también se puede usar el hash de ID de sesión Durante la misma sesión, el usuario visita el mismo servidor cada vez

Supongo que te gusta

Origin blog.csdn.net/dawei_yang000000/article/details/108557943
Recomendado
Clasificación