asp.net-mvc - vista - mvc c# tutorial
¿Cómo resuelven las personas los problemas de reciclaje de grupos de aplicaciones en la implementación con aplicaciones grandes? (7)
De forma predeterminada, si cambia 15 archivos en una aplicación ASP.NET a la vez (incluso a través de FTP), el grupo de aplicaciones se recicla automáticamente. Puede cambiar la cantidad de archivos, pero tan pronto como se cambien los archivos web.config y bin, deberá reciclarlos. Entonces, en mi opinión, la solución ideal para un entorno como el tuyo sería el siguiente:
4 servidores web (este es un número arbitrario) cada servidor tiene un status.aspx que el equilibrador de carga observa: use TeamCity para desconectar 2 de estos servidores (fuera del equilibrador de carga) y espere 20 segundos para que el tráfico filtrar a través de Un caché distribuido ayudará a mantener los problemas de experiencia del usuario
Utilice TeamCity para implementar en esos 2 servidores: ejecute sus pruebas automatizadas, etc., y una vez que esté satisfecho, vuelva a ponerlas en la granja y desconecte las otras 2 e instálelas
Todo esto puede ser escrito / automatizado. El único problema con esto es que cualquier cambio de esquema que no sea compatible con versiones anteriores puede no permitir ejecutar el sitio de la nueva versión en paralelo con la versión antigua del sitio durante los 20 segundos para que el equilibrador de carga retroceda
Esta es una versión antigua de Canary Releasing: hay algunos patrones aquí http://continuousdelivery.com/patterns/ para ayudar a tener en cuenta. También sugiero una copia de ese libro de entrega continua - es como una biblia de entrega continua y me ha sacado de algunas situaciones :)
Actualmente, después de una compilación / implementación de nuestra aplicación (58 proyectos, el gran número de aplicaciones de asp.net MVC 3) toma ~ 15-20secs para cargar a medida que pasa por todo el ''reciclaje del grupo de aplicaciones'' (configuración de la versión).
Tenemos una granja de servidores web si eso altera las respuestas de las personas, pero la pregunta realmente es:
¿Qué hacen las personas en aplicaciones a gran escala donde una ventana de mantenimiento no es viable (somos un sitio web muy activo las 24 horas del día, los 7 días de la semana) para minimizar el "primer golpe" inicial en el reciclaje del grupo de aplicaciones después de una implementación?
Hemos utilizado una serie de herramientas para analizar el tiempo de inicio y realmente no parece haber ninguna manera de reducirlo, así que lo que busco son qué técnicas emplean las personas para minimizar el impacto de una gran empresa. despliegue de aplicaciones que afecta a los usuarios.
En la misma base, podría ejecutar un script de tinyget contra la aplicación después de completar la implementación, lo que "calentará" la aplicación, sin embargo, si un cliente accede a su sitio antes de que el script pueda ejecutarse, aún enfrentará un retraso. ¿Qué tiene implementado actualmente, qué pasos posteriores a la implementación ha implementado?
En un entorno de granja, también puede realizar implementaciones, así que saque un servidor del equilibrio de la carga, actualícelo y luego en línea después de la implementación y saque el otro, complete la implementación y luego vuelva a introducirlo en la granja. ¿Cómo es su configuración de SQL Server - agrupado?
En primer lugar, a menos que esté ejecutando Google o algo más grande, ¿un tiempo de carga de 15-20s a las 3am para un puñado de usuarios realmente afecta tanto? Yo diría que el esfuerzo invertido en eliminar el retraso ocasional superaría con creces el inconveniente de 15-20s de un par de usuarios.
Considero que es un mal necesario de usar ASP.NET desafortunadamente. El uso de un sitio precompilado (.DLLs en lugar de los archivos de código subyacente) disminuirá el tiempo pero no lo eliminará necesariamente.
Lo mejor que puede hacer es usar algo como una barra de notificación de estado para advertir a los usuarios que pueden experimentar algunos "problemas" durante el "mantenimiento esencial".
Pero incluso entonces, diría que en términos de experiencia de usuario, sería mejor quedarse callado y que un puñado de personas culpe a su "Internet lento" cuando su sitio demora 20 segundos en cargarse en una ocasión, que anunciar a todos que va a ser lento
También puede probar este enfoque: http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx
sin saber nada acerca de su sitio, lo primero que pensé es que podría ser capaz de dividirlo en sitios más pequeños para que comiencen más rápido individualmente.
en segundo lugar, con su conjunto de servidores web, asumo que tiene algún tipo de dispositivo de equilibrio de carga frente al que puede sacar las máquinas del grupo cuando se están implementando. no los vuelva a poner en la piscina hasta que haya enviado una solicitud contra el sitio para iniciarla. Debería poder realizar una secuencia de comandos de tal manera que esté haciendo clic en un botón que saca una máquina, se despliega en ella y envía una solicitud después de que esté de vuelta y feliz.
copiar y pegar desde mi post aquí
Operamos una estrategia de implementación Azul / Verde en una arquitectura de 4 niveles que tiene un sitio web sobre 4 servidores en el nivel superior. Debido a la complejidad de la arquitectura introducida para las implementaciones, necesitábamos una forma de implementación sin molestar el tráfico al sitio "en vivo". Siguiendo los consejos de Fowler, pero no exactamente de la misma manera, se nos ocurrió una solución que significa que tenemos 2 sitios en cada servidor (un azul y un verde, o en nuestro caso el sitio A y el sitio B). El sitio en vivo tiene el encabezado de host apropiado, y una vez que hemos implementado y probado en el sitio que no está en vivo, luego volteamos los encabezados de los 2 sitios para que lo que una vez estuvo en vivo ahora sea el sitio que no está en vivo, y viceversa . El efecto es un despliegue robusto que se puede realizar en horario comercial y con el más alto nivel de confianza.
Esto, por supuesto, complica un poco su configuración e implementación, pero vale la pena el esfuerzo. Supongo que no hace falta decir que desea crear una secuencia de comandos tanto para la implementación como para el intercambio del encabezado del host.
Puede considerar el uso de aspnet_compiler.exe
para precompilar su aplicación, porque creo que el retraso después de la implementación es causado por la fase de compilación en lugar de "reciclar todo el grupo de aplicaciones".