2011-03-22 8 views
10

Quiero utilizar datos globales para la aplicación web MVC que se ejecuta en Windows Azure (por ejemplo, algo así como una lista de usuarios que tienen mensajes nuevos).¿Cómo compartir el estado entre las instancias de Azure?

Para una aplicación web normal, podría usar un poco de almacenamiento por dominio de aplicación como AppDomain.SetData o simplemente variable estática. ¿Qué debería usar para Azure (¿caché? ¿Almacenamiento de blobs? ¿Colas?) Y ¿qué solución sería la más rápida?

Respuesta

5

AppFabric Cache es una excelente opción para compartir datos entre roles (o instancias del mismo rol). Lo interesante de AppFabric Cache es que no se aplica solo al estado de sesión de ASP.NET: simplemente se trata de un proveedor de estado de sesión de ASP.NET listo para usar que se encuentra encima del caché.

Usar el caché es casi trivial. He aquí un fragmento de una demo de aplicación de consola de línea de comandos:

var dataCacheFactory = new DataCacheFactory(); 
DataCache dataCache = dataCacheFactory.GetDefaultCache(); 

Console.Write("Enter a string to cache: "); 
string value = Console.ReadLine(); 

dataCache.Put("key", value); 

string response = (string)dataCache.Get("key"); 
Console.WriteLine("Cached string: " + response); 

Usándolo como un proveedor de estado de sesión requiere cambio de código cero - todo está impulsado por el app.config/web.config.

vtortola hace un buen punto acerca de que AppFabric Cache está en CTP, pero deberíamos ver que en producción a corto plazo.

Table Storage también funcionará, dependiendo de la complejidad de sus consultas. Parece que sus consultas serían relativamente sencillas.

Dado que aún no se ha anunciado el precio de AppFabric Cache, esto podría tener en cuenta su decisión frente a, por ejemplo, Almacenamiento de tabla que ejecuta $ 0.15/GB más transacciones relacionadas (aunque las transacciones probablemente no tengan un impacto notable en su costo, a $ 0.01 por cada 10,000 transacciones).

EDITAR 7 de junio de, 2012 Datos de de precios ha cambiado desde respuesta original:

servicio
  • El caché está en producción, y comienza en $ 45 para 128 MB (detalles de precios completos here).
  • Las transacciones ahora son de $ 0.01 por cada 100.000 transacciones, con un almacenamiento que comienza en $ 0.125 por GB y una disminución en función de la cantidad (consulte here para obtener más información).
  • Ahora hay una nueva capacidad de caché que puede habilitarse en sus instancias de rol Web o Worker, utilizando un porcentaje de RAM disponible y con un costo CERO. También puede crear una función de caché independiente. Ambos son compatibles con el nuevo SDK v1.7. Scott Guthrie blogged sobre las nuevas funciones (incluida la memoria caché).
+1

Offtopic: ¿Cómo AppFabric Cache gestiona la concurrencia? – vtortola

2

Creo que Table Storage funcionará, pero tal vez el servicio de caché de AppFabric sería más adecuado dependiendo de lo que necesite, pero recuerde que este último todavía está en CTP.

Por lo que dices, voy a ir con almacenamiento de tabla. Hacer algo como recuperar los últimos mensajes en una tabla particionada por userId y tecleada por DateTime es muy rápido.

Saludos

8

Por "por los datos del usuario", entonces se podría utilizar el objeto ASP.Net sesión.

Para hacer que la sesión funcione en múltiples roles, debe especificar un proveedor de sesión de proceso cruzado en web.config. Microsoft ha proporcionado un par de proveedores de ejemplo ya

Por "memoria de estado global", entonces definitivamente recomiendo App Fabric Caching o hay algunas contribuciones de la comunidad, por ejemplo memcached http://www.davidaiken.com/2011/01/11/windows-azure-memcached-plugin/

Si la consistencia de los datos no es importante, entonces siempre se puede simplemente utilizar el almacenamiento en caché por instancia en la memoria - esta será la ruta más rápida y estará en consonancia con el tiempo ...

+1

El proveedor de almacenamiento de tablas, la última vez que lo verifiqué, no se compilaría sin modificaciones para el último SDK. No lo recomendaría. –

+2

Manténgase alejado del proveedor de almacenamiento de tablas, es solo una muestra y tiene serios problemas de simultaneidad. Hasta que App Fabric Caching no esté en CTP, use el proveedor de sesión SQL. http://stackoverflow.com/questions/4937544/asp-net-session-state-provider-in-azure – knightpfhor

0

AppFabric Cache es un servicio obsoleto ... para nuevos desarrollos utiliza Azure Redis Cache.

+0

¿Eso es una respuesta o un comentario? – RBT

+0

Esta es una respuesta legítima, Redis es ahora el camino a seguir a través de Azure – Porschiey

Cuestiones relacionadas