2011-06-18 11 views
5

¿Cuál es la mejor manera de actualizar los datos en todas mis instancias de Azure?Actualización de datos en todas las instancias de Azure

Tengo varios casos cada uno ejecutando el mismo papel web. El rol de inicio de datos se lee desde el almacenamiento de blob en la tienda local. Intermitentemente habrá una nueva actualización de los datos utilizados por el sitio. Deseo poder notificar cada instancia mediante programación para obtener los datos actualizados del almacenamiento de blobs en el almacenamiento local de la instancia para que cada instancia se actualice.

Una idea es escribir un programa cliente personalizado para llamar a un servicio web en el papel web, pasando un ID función para actualizar. Si el punto final es la Identificación de rol, la instancia se actualiza a sí misma. Si no, el cliente intenta nuevamente hasta que todas las instancias informen que se actualizan. ¿Es este un buen enfoque o hay un método integrado en Azure para hacer esto?

he considerado un hilo separado que comprueba de forma intermitente durante una bandera de actualización, aunque me preocupa que mis casos se harán fuera de sincronía.

no hay una gran cantidad de datos para que pudiera ponerlo en la memoria caché Azure. Sin embargo, me preocupa la latencia de la red con el uso de la memoria caché. ¿El caché de Azure lo maneja bien?

Otra idea es simplemente reiniciar las instancias uno tras otro (con la operación de actualización se realiza sobre el papel puesta en marcha).

Respuesta

1

Agregando a la respuesta de Stuart, permítanme abordar sus técnicas propuestas:

  • No creo que la técnica de cliente llamando al servicio web es práctico, ya que ahora ha añadido un servicio web, así como un controlador de cliente para llamarlo, y no tiene la capacidad de contactar instancias de rol web individuales: el equilibrador de carga oculta las instancias individuales de usted.
  • Puede almacenar datos en el caché, pero la única forma de actualizar sus datos "ahora" es caducar los elementos en el caché. Si tiene todos sus datos en un solo elemento de caché con una clave conocida, entonces es fácil caducar. Si está en varias teclas, entonces tiene una tarea más compleja y no podrá caducar los elementos de forma atómica (a menos que borre todo el caché). Además, el caché expira por sí solo de todos modos, tendrías que encargarse de volver a cargarlo si eso ocurre.
  • Se puede utilizar un hilo de fondo en sus instancias de rol, que se parece a una burbuja (tal vez con un único archivo zip), y copiar la cremallera hacia abajo para almacenamiento local cuando cambia su identificación (se puede almacenar un identificador único en la década de blob metadatos, por ejemplo). Entonces podrías verificar esto periódicamente (¿quizás cada minuto?).
  • La idea de reinicio tiene un buen lado y un lado malo. Por el lado bueno, evitará los efectos secundarios causados ​​por el cambio de contenido local mientras la instancia de su rol aún se está ejecutando. El lado malo es que la instancia de rol estará fuera de línea durante unos minutos durante el reinicio.

La sugerencia de Stuart de utilizar una configuración es buena.Solo asegúrate de que puedes actualizar tus archivos sin romper tu aplicación. Si esto no se puede hacer de manera segura, no maneje el evento Cambio: solo deje que la instancia de rol se recicle.

3

Creo que una manera posible de hacerlo es usar una configuración (por ejemplo, una marca de tiempo) en una configuración: puede actualizar la configuración mediante programación y usar el evento RoleEnvironment.Changing para hacer un seguimiento del cambio en todos las instancias - http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.serviceruntime.roleenvironment.changing.aspx

Si esta asegurarse de que interceptar el evento en todas sus funciones - y asegúrese de analizar los cambios (en busca de Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironmentConfigurationSettingChange) y return false al parámetro Cancelar para prevenir sus instancias no serán reiniciadas

+0

¿Cómo se programáticamente actualizar la configuración? Parece que no encuentro una forma relativamente simple (aparte de invocar la API de Azure). – Piedone

Cuestiones relacionadas