2010-06-10 9 views
9

Pregunta sobre cómo se puede utilizar la función de caché de AppFabric.Pregunta sobre cómo se puede utilizar la función de caché de AppFabric

Me disculpo por hacer una pregunta que debería ser capaz de responder de la documentación, pero he leído, leído y buscado y no puedo responder a esta pregunta, lo que me lleva a creer que tengo una comprensión fundamentalmente errónea de lo que AppFabric las capacidades de almacenamiento en caché están destinadas para.

Trabajo para una compañía geográficamente dispersa. Tenemos una aplicación particular que se escribió originalmente como una aplicación cliente/servidor. Es tan enorme y crítico para los negocios que queremos convertirlo en una solución mejor diseñada.

Una de las ideas que tuvimos fue convertir la aplicación para leer sus datos utilizando llamadas WCF a un servidor web coubicado que almacenaría en caché la comunicación con la base de datos en los Estados Unidos. La naturaleza de la aplicación es tal que todos tenderán a ver los mismos 2000 registros más o menos con actualizaciones ocasionales y esas actualizaciones serán realizadas por un conjunto limitado de usuarios.

Esperaba que el mecanismo de caché de AppFabric me permitiera configurar un caché global y cuando un usuario en Asia, por ejemplo, solicitara datos que no estaban en el caché o que el servidor web fuera leído de la base de datos en los Estados Unidos, proporcione los datos al usuario, luego actualice la caché que propagaría esos datos a los otros servidores web para que ellos supieran que no volverían a la base de datos ellos mismos.

¿Puede funcionar AppFabric de esta manera o debería simplemente hacer que los servidores recuperen sus propios datos de la base de datos?

Respuesta

11

Así que si he entendido bien, usted tiene:

  • un servidor de base de datos en los servidores web EE.UU.
  • todo el mundo?
  • (potencialmente) una memoria caché de AppFabric en los EE.UU.

AppFabric le da dos posibles maneras de abordar este escenario.

  1. caché local
    En una configuración de AppFabric, los clientes tienen la capacidad de tener una caché local de objetos, donde la primera llamada a la memoria caché para un objeto coloca el objeto en la memoria caché local y las solicitudes subsiguientes de esa objeto se cumplen desde la memoria caché local. Los objetos se eliminan de la memoria caché local debido a un tiempo de espera o porque la memoria caché principal notifica a la memoria caché local que el objeto está obsoleto. Configura esto en su web.config:

    <dataCacheClient> 
        <localCache isEnabled="true" sync="NotificationBased" ttlValue="300" /> 
    </dataCacheClient> 
    

    En su caso, entonces, sus servidores web son los clientes; cuando uno de sus usuarios asiáticos solicita un objeto, la memoria caché local para el servidor web de Asia contendría una copia de ese objeto. Las actualizaciones de ese objeto se propagarían a la memoria caché principal y, en una configuración basada en notificaciones, se invalidarían las copias de ese objeto en cachés locales en los otros servidores web, de modo que la siguiente solicitud se cumpliera desde la memoria caché principal y luego la memoria caché local se actualizaría con el objeto actualizado.

  2. Coloca la caché de AppFabric en los servidores web
    ¡No hay nada que impida que tus servidores web también sean servidores de caché de AppFabric! En esta configuración, no usaría la memoria caché local, porque no tiene sentido cuando la memoria caché principal ya es local para su cliente.Sin embargo, esto garantizaría que su cliente siempre esté extrayendo la última versión de un objeto en caché de la caché.
    Tendría que tener cuidado con las cargas de red, porque esta configuración puede significar que su servidor web en EE. UU. Siempre lee objetos en caché de (digamos) su servidor web europeo, lo que podría ralentizar sus servidores mientras intentan servir solicitudes de caché, así como el tráfico web.

En ambos casos recordar que mientras que sus clientes van a recibir la última versión del objeto en caché, no hay persistencia en AppFabric y que necesita para escribir los cambios en la base de datos al mismo tiempo que se actualiza el el objeto en caché, de lo contrario corre el riesgo de leer datos desactualizados en el caché.

+0

Phil, muchas gracias por su (muy detallada) respuesta. Esto ayuda a solidificar tanto. –

+3

Microsoft no aconseja el uso de hosts no dedicados para los nodos de caché de AppFabric, en particular los hosts IIS, debido a problemas de contención bajo carga. – andrewbadera

+1

"Los objetos se eliminan de la memoria caché local, ya sea debido a un tiempo de espera o porque la memoria caché principal notifica a la memoria caché local que el objeto es obsoleto". - Sin embargo, las memorias cachés locales entran en contacto con las memorias caché principales en función de un intervalo de sondeo (300 segundos por defecto). Cualquier cambio en un objeto en la memoria caché principal entre las encuestas no será recogido por las memorias caché locales, por lo tanto, emitirán copias bloqueadas durante un breve período de tiempo después de las actualizaciones de la memoria caché principal. – redcalx

Cuestiones relacionadas