entendiendo balanceo de carga en asp.net
performance load-balancing (3)
Estoy escribiendo un sitio web que comenzará a usar un equilibrador de carga y estoy tratando de envolver mi cabeza alrededor de él.
- ¿IIS solo hace todo el balance por ti?
- ¿Tiene una capa web independiente que se encuentra en el servidor distribuido que hace algún trabajo antes de enviar al servidor secundario, como autenticación u otro trabajo?
Parece que muchos de los artículos que sigo leyendo no me dan una respuesta directa, o simplemente no los estoy entendiendo correctamente. Me gustaría saber cómo funciona el verdadero equilibrio de carga desde un punto de vista técnico. y si alguien tiene algún código para compartir eso también sería bueno.
Entiendo que el almacenamiento en caché será un problema, pero ese es un tema diferente, sesión también.
¿IIS solo hace todo el balance por ti?
Sí, si configura el enrutamiento de solicitud de aplicación :
¿Tiene una capa web separada que se encuentra en el servidor distribuido?
Sí.
¿Eso funciona antes de enviarlo al servidor secundario, como autenticación u otro trabajo?
No , ARR es bastante ''tonto'':
IIS ARR no proporciona ninguna autenticación previa. Si la autorización previa es un requisito, puede consultar Proxy de aplicación web (WAP) disponible en Windows Server 2012 R2.
Simplemente actúa como un proxy transparente que acepta y reenvía solicitudes, al tiempo que agrega algo de almacenamiento en caché cuando se configura.
Para la autenticación, puede consultar el Proxy de aplicación web de Windows Server 2012.
Algunos consejos, y quizás elementos para familiarizarse completamente con:
ARR ya que todas las respuestas anteriores del estado anterior son un "proxy" que maneja el tráfico de sus usuarios a sus servidores.
Puede manejar el estado como señala Konrad, o puede hacer que ARR realice sesiones "pegajosas" (asegúrese de que un cliente siempre vaya a "este servidor", probablemente el servidor que mantiene el estado para ese cliente específico ). Ver la discusión / comentarios sobre esa respuesta - es genial.
No he usado un sombrero de TI / servidor durante tanto tiempo y, francamente, no he tocado las manos de clustering (siempre "manejado por mí automáticamente" por algún proveedor), así que hice esta pregunta a nuestro anfitrión, "qué / cómo es replicación entre nuestro grupo / granja "¿hecho?" - La pregunta cubre cosas como
- Solo estoy trabajando / configurando cosas en 1 servidor, ¿eso se replica en X VM en nuestro clúster / granja? ¿Cuánto tiempo?
- ¿Qué hay de los archivos generados dinámicamente, de código y / o de usuario (sistema de archivos)? Si está en el sistema de archivos de VM1, y tengo 10 máquinas virtuales con carga equilibrada, y el cliente puede golpear cualquiera de ellas en cualquier momento, entonces ...
- ¿Qué pasa con el cifrado? por ejemplo, si usa DPAPI para cifrar cosas de web.config (por ejemplo, cadenas / secciones de conn), cuál es el impacto de eso (porque se basa en la clave de la máquina), y lo obvio es que ahora tiene máquinas o VM ( s ). RSA reescribir ....?
SSL : ARR puede manejar esto por ti también , ¡y eso es genial! Pero como con toda la potencia, aparece una "con": si marca / valida en su código, por ejemplo, HttpRequest.IsSecureConnection , bueno, siempre será
false
. Sus servidores / máquinas virtuales no tienen el certificado, ARR tiene. La conexión encriptada es entre el cliente y ARR . ARR a sus servidores / máquinas virtuales no es. Como lo explica el enlace, si lo prefiere al revés (sin descarga), puede ... pero eso significa que todos sus servidores / máquinas virtuales deben tener un certificado (y cómo eso corresponde a la "replicación" de arriba comienza a aparecer en su cabeza).
No pretende ser exhaustivo, solo hacer una lista de cosas de memoria ... Hth
IIS no tiene un equilibrador de carga de forma predeterminada, pero puede usar al menos dos tecnologías de Microsoft:
- Solicitud de enrutamiento de solicitud que se integra con IIS, idealmente debería tener una capa web separada para realizar el trabajo de enrutamiento.
- El equilibrio de carga de red que está integrado con Microsoft Windows Server, allí puede unirse a los servidores existentes en el clúster NLB.
Ambas tecnologías no requieren ningún código per se , es una cuestión de infraestructura. Pero, por supuesto, debe recordar sobre el entorno de carga equilibrada durante el desarrollo. Por ejemplo, para que los sitios web sean realmente equilibrados, deben ser sin estado. De lo contrario, tendrá que proporcionar la llamada " adherencia" entre el cliente y el servidor, de modo que el mismo cliente se conectará siempre al mismo servidor.
Para hacer que el servicio sea sin estado, no se debe mantener ningún estado (sesión, por ejemplo, en el caso del sitio web ASP.NET) en el servidor, sino en un servidor externo compartido entre todos los servidores de la granja. Por lo tanto, es común, por ejemplo, utilizar un servidor de sesión ASP.NET externo (modos StateServer o SQLServer) para todos los sitios en el clúster.
EDITAR:
Solo para aclarar algunas cosas, unas pocas palabras sobre las dos tecnologías mencionadas:
- NLB funciona a nivel de red (como un controlador de red de hecho), así que sin ningún conocimiento sobre las aplicaciones utilizadas. Usted crea los llamados clústeres que consisten en algunas máquinas / servidores y los expone como una sola dirección IP. Luego, otra máquina puede usar esta IP como cualquier otra IP, pero las conexiones se enrutarán a una de las máquinas del clúster automáticamente. Se configura un clúster en cada servidor, no hay una máquina de enrutamiento adicional externa. Dependiendo de la configuración de los clústeres, como ya hemos mencionado, se puede habilitar o deshabilitar la adherencia (llamada aquí afinidad única o ninguna ). También hay un parámetro de peso de carga , por lo que puede configurar la distribución de carga pesada, por ejemplo, enviando más conexiones a la máquina más rápida. Pero este parámetro es estático, no puede basarse dinámicamente en la red, la CPU o cualquier otro uso. De hecho, a NLB no le importa si la aplicación de destino se está ejecutando, simplemente enruta el tráfico de red a la máquina seleccionada. Pero advierte que los servidores se desconectaron, por lo que no habrá enrutamiento allí. Las ventajas de NLB es que es bastante ligero y no requiere máquinas adicionales.
- ARR es mucho más sofisticado, está construido como un módulo sobre IIS y está diseñado para tomar las decisiones de enrutamiento a nivel de aplicación. El equilibrio de carga de la red es solo una de sus características, ya que es una solución de enrutamiento más completa. Tiene "enrutamiento basado en reglas, afinidad de nombre de cliente y host, equilibrio de carga de las solicitudes del servidor HTTP y almacenamiento en caché de disco distribuido", según Microsoft. Usted crea comunidades de servidores con muchas opciones, como el algoritmo de equilibrio de carga, la distribución de carga y la adherencia del cliente. Puede definir las pruebas de estado y las reglas de enrutamiento para reenviar la solicitud a otros servidores. La desventaja de todo esto es que debe haber una máquina dedicada donde ARR está instalado, por lo que requiere más recursos (y costos).
- NLB y ARR : como el uso de una sola máquina ARR puede ser el único punto de falla, Microsoft afirma que vale la pena considerar la creación de un clúster NLB de máquinas ARR.