2012-02-18 20 views
19

¿Es posible implementar varias funciones en la misma instancia?Varias funciones en la misma instancia en Windows Azure

Tengo tres roles web (sitio web en asp.net mvc3 y dos instancias de servicios WCF) y dos roles de trabajador (servicios de Windows).

La carga de esta aplicación es muy pequeña, por lo que no quiero crear tantas instancias en Windows Azure y pagar ahora todas las instancias. En su lugar, quiero implementar toda mi aplicación en la misma instancia y cambiarla más adelante si obtengo algún ingreso de mis aplicaciones.

que Google y encontró algunos mensajes en el foro de lo que es posible y unos que no es posible ... pero no puedo encontrar información de cómo hacerlo ...

Así que dos preguntas: ¿Es posible ? ¿Cómo puedo hacerlo?

Respuesta

14

Una respuesta ligeramente diferente a la de @ Simon ... Una función es en realidad una plantilla para una máquina virtual de Windows Server 2008 (consulte también mi respuesta en this SO question). Cada función tiene una o más instancias, y puede ejecutar lo que desee en cualquier función.

Puede ejecutar absolutamente su sitio web y todos sus servicios WCF en un solo rol. Ahora escalará su aplicación hacia arriba/abajo (tamaño de VM) y hacia afuera/adentro (número de instancias) como una unidad de escala única. Si, por ejemplo, los servicios de WCF requieren un uso intensivo de la CPU, lo que hace que las instancias de VM se ralenticen para los visitantes de su sitio web, tendrá que escalar lo suficiente para manejar a esos visitantes.

Una vez que alcanza una carga de tráfico significativa, vale la pena considerar roles separados. De esta forma, puede decidir sobre el tamaño de VM y la cantidad por rol. Tal vez tenga 2 o 3 instancias pequeñas de un rol web para manejar su tráfico de usuarios en el sitio web, y quizás 2 instancias medianas de un rol de trabajador para manejar servicios WCF (solo como un ejemplo). Cuantos más roles tenga, la escala de grano más fino que tiene, pero debe ejecutar al menos una instancia de cada rol, lo que eleva su costo inicial de "sistema en reposo".

+0

Si implemento todos mis sitios web y servicios wcf como webrole en una instancia, ¿no puedo volver a implementar partes del sistema? ¿Correcto? Por ejemplo, si deseo hacer cambios en los servicios de WCF, tengo que volver a implementar todos los servicios y el sitio web de wcf. –

7

No, los roles son instancias y cada uno ocupa una VM completa. Sin embargo, puede implementar un número de sitios web en un solo rol, lo que le permitirá implementar todas sus aplicaciones MVC y WCF en un único rol web. Necesita agregar sitios web al sites element in the ServiceDefinition. Parece que hay algunas publicaciones en el blog sobre cómo se hace esto: here y here.

Para roles de trabajador, le sugiero que cree un rol de trabajador único y combine el trabajo realizado en esos roles, como iniciar un hilo separado para cada cola que se monitorea. Esto StackOverflow answer por Eugenio Pace.

No recomendaría intentar combinar la funcionalidad del rol de trabajador en el rol web. Aparte de que no tiene sentido arquitectónico, sentido para la infraestructura física (IIS vs no IIS), hay problemas potenciales como la terminación de la ejecución de subprocesos cuando las funciones de los trabajadores se reciclan (un hilo no iniciado por IIS puede terminar abruptamente)

+0

Esto no es cierto strcitly. como 'user728584' señaló que un rol web siempre es también un rol de trabajador. ahora, no necesariamente creo que sea una buena idea combinar los dos, pero ciertamente es posible porque cada función web es un método Run() - http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com /2010/12/how-to-combine-worker-and-web-role-in.html –

+0

Combinar funciones web y de trabajadores es un truco. ¿La definición de un rol es el ensamblado de .NET o cómo lo maneja Azure Fabric? Si bien los ejemplos muestran que * parece * funcionar, debe comprender cómo maneja la estructura los cierres, recicla, supervisa, etc. No entiendo esos detalles, pero sospecho que hay, em, 'problemas' –

+2

La definición de Rol es "máquina virtual." Y no hay truco, combinando funcionalidad en un único servidor (ya sea físico o virtual). La gente ha estado haciendo eso por años. En Windows Azure, se reduce a su grado de escalabilidad y disponibilidad. No es un truco ejecutar un sitio web y tareas en segundo plano en una única función con varias instancias, al igual que no es un truco para separar la funcionalidad en máquinas virtuales separadas, cada una de ellas escalada de forma independiente. –

Cuestiones relacionadas