Este artículo proviene de un motor de traducción automática.

Progreso

Crear mejores controlado por datos aplicaciones con almacenamiento en caché distribuida

Aaron Dunnington

Descarga de código de la Galería de código de MSDN
Examinar el código en línea

Este artículo se basa en una versión preliminar de velocidad de Microsoft.Toda la información está sujeta a cambios.

En este artículo se describen:

  • Introducción a la velocidad
  • Clasificar los datos de caché distribuida
  • Una aplicación básica de cliente de progreso
  • Integración con el estado de sesión de ASP.NET
En este artículo se utilizan las siguientes tecnologías:
Velocidad de Microsoft, ASP.NET

Contenido

Aplicaciones de datos de centrado en actual
Cómo ayuda velocidad
Clasificación de datos
Jerarquía lógica
Caché de particiones y local
Almacén de configuración
Introducción a la velocidad
Implementación de clúster
Una aplicación de cliente de velocidad básico
Diseño de la memoria caché
Caché con nombre
Organizar la memoria caché
Organizar los informes
Organizar la sesión
Programación de un nivel de caché
Integración con el estado de sesión de ASP.NET
Ir adelante

Aplicaciones impulsadas por datos han pasado a ser dominante.Datos fluyen desde un sinfín de orígenes incluidas orígenes relacionales, aplicaciones orientadas al servicio, las fuentes de información y documentos centrados en datos y los mensajes.Las arquitecturas de aplicaciones siguen evolucionar para aprovechar esta gran cantidad de accesibilidad de datos.Además, las tendencias de hardware subyacente y avances tecnológicos a través de procesamiento, almacenamiento, memoria y conectividad han habilitado arquitecturas de aplicaciones aprovechar económicos, hardware de consumo escalar eficazmente estas aplicaciones.

Un nuevo proyecto de Microsoft, cuyo nombre en código es la velocidad, proporciona una caché distribuida y en la memoria.Velocidad permite crear aplicaciones escalables, disponibles y de alto rendimiento mediante la exposición de una visión unificada de memoria distribuida para consumo de aplicación de cliente.A través de progreso, las aplicaciones cliente pueden mejorar el rendimiento por poner datos más cerca a la lógica que consume, reduciendo así la presión en el almacén de datos subyacente.El clúster de velocidad ofrece alta disponibilidad para aislar aún más las aplicaciones de pérdida de datos, así como aumento de carga en el nivel de datos.Velocidad permite que aprovechando memoria distribuida, estas aplicaciones alto rendimiento, disponibles escalar flexible que aumenta la demanda de aplicación.

Este artículo se centra en cómo clave que se pueden aprovechar las características de progreso para ofrecer el siguiente nivel de escalabilidad, disponibilidad y rendimiento en nuevas y existentes distribuir las aplicaciones. NET.

Aplicaciones de datos de centrado en actual

La aplicación de equipados con datos de actual típica podría ser algo las líneas de un escaparate simple a través de una base de datos.Esta aplicación permite a los usuarios examinar un catálogo de productos y comprar productos a través de una experiencia de carro de compra.Además, datos de ordenación agregada se utilizan para mostrar vendidos productos como así como productos normalmente comprados juntos.Esta arquitectura de aplicación toma la separación familiar de interfaz de usuario, lógica empresarial y acceso a los datos tal como se muestra en la figura 1. Esta arquitectura, desafortunadamente, enfrenta varios desafíos claves en las áreas de escalabilidad, rendimiento y disponibilidad.

fig01.gif

Figura 1 arquitectura de estándar en función de datos Web la aplicación

En primer lugar, hay un desafío importante escalabilidad inherente en que la aplicación realiza operaciones de base de datos en cada carga de página en el formulario de operaciones de recuperación de datos de catálogo y vendedor superior.Como aplicación carga aumenta, esta frecuencia gramaje alto en las operaciones de base de datos puede plantear las limitaciones de escalabilidad graves y los cuellos de botella de rendimiento debido a una mayor contención de recursos y las limitaciones físicas de recuperar datos desde el disco.Además, esta arquitectura puede afectar drásticamente la latencia de la aplicación como los resultados de cada carga de página en las operaciones que viajan por completo a través con el nivel de datos.

Si la aplicación utiliza tradicionales métodos de almacenamiento en caché en el nivel de Web para reducir la presión constante en la base de datos, un desafío clave escalabilidad segundo que surge es raíz de acoplamiento de estado a los recursos de servidor específica.Sin separe el estado de caché desde servidores específicos para escala, la aplicación debe emplear técnicas como enrutamiento rápidas a unir las solicitudes de usuario a los nodos de servidor correspondiente.Esto puede provocar potencialmente a una irregular distribución de procesamiento si particulares áreas de las solicitudes de usuario como resultado una disproportionally mayor cantidad de actividad.

Por último, los nodos de nivel de Web responsables del almacenamiento en caché no entregar una alta disponibilidad a la aplicación fundamental que no son actúa en colaboración a través de un subestrato de disponibilidad.

Cómo ayuda velocidad

Como se mencionó anteriormente, velocidad es una caché distribuida y en la memoria.Más específicamente, velocidad expone un nivel de caché unificada a aplicaciones de cliente por fusing juntos memoria a través de servidores.La velocidad de la arquitectura consta de un anillo de servidores de caché que ejecutan el servicio de Windows de progreso, así como aplicaciones de cliente que utilizan la biblioteca de cliente de progreso para comunicarse con la caché unificada ver (consulte la figura 2).

fig02.gif

La Figura 2 arquitectura de progreso

Las aplicaciones cliente pueden tener acceso al nivel de caché de progreso para almacenar y recuperar cualquier objeto serializable de CLR a través de superponer simple y saque operaciones tal como se muestra aquí:

CacheFactory factory = new CacheFactory();
cache = factory.GetCache("catalog");

cache.Put("Product-43", new Product("Coffee"));

Product p = (Product)cache.Get("Product-43");

Velocidad permite que el ejemplo de arquitectura de aplicación Web para aprovechar un nuevo nivel de caché tal como se muestra en la figura 3. Aprovechando progreso el mid-tier, la aplicación puede lograr un nuevo nivel de escalabilidad, rendimiento y disponibilidad.Más específicamente, puede llevarse un alto grado de escalabilidad minimizar la contención de los recursos de base de datos.Más flexibilidad es instilled en esta escalabilidad como la arquitectura se libera de los clientes de acoplamiento a nodos de servidor específico, correspondientes a estado, y mejoras de rendimiento pueden habilitarse mediante poner datos más cerca a la lógica que se consume, por tanto, mejora el tiempo de respuesta y reducir la latencia.A través de progreso, se consigue una alta disponibilidad aislando el clúster con redundancia, mitigar, por tanto, la pérdida de datos, así como picos de carga en el nivel de datos en el caso de un error de nodo.

fig03.gif

La figura 3 con el nivel de caché de progreso

Por interweaving un nivel de almacenamiento en caché como se muestra, la aplicación puede ahora explícitamente aprovechar progreso a través de varios niveles y patrones.Por ejemplo, la lógica de negocios podría consumir progreso directamente en el modelo de margen de caché.UN nivel de read de through y subyacente de escritura podría introducirse en la capa empresarial, lo que permite la lógica empresarial mucho para transparente comunicarse con velocidad.El nivel de Web puede aprovechar transparente velocidad de sesión de administración de estado a través de la sesión de ASP.NET de velocidad almacenar integración de proveedor.

Clasificación de datos

Para totalmente aprovechar la característica velocidad de las aplicaciones, es importante conocer los tipos de datos en caché normalmente.Estos tipos de datos se pueden clasificar como datos de referencia, datos de actividad y datos de recursos.

Datos de referencia hace referencia a datos que son principalmente de sólo lectura, como datos de catálogo o usuario del producto.Estos datos se escriben con poca frecuencia, quizás una vez por día o semana.Sin embargo, los requisitos de escala en los datos de referencia solicitar un número grande de solicitudes de lectura de estas partes más pequeñas de datos.

Por ejemplo, en un escaparate, como cargas crecientes de los usuarios examinar el catálogo, un gran número de datos de productos almacenar recuperación y se generan las operaciones de creación de lista.A medida que los datos de referencia del catálogo de producto cambia bastante con poca frecuencia y es muy reutilizables a través de los clientes, resulta adecuada para almacenamiento en caché que descarga considerable a la presión del nivel de datos almacenando en caché estos datos más cerca para la aplicación.

Pueden describir datos de productos vendidos y adquirido normalmente de forma conjunta como datos de referencia así.Que los requisitos en tiempo real no son una necesidad de estos informes, la aplicación se benefician enormemente de eliminando el costo de pedidos en cada solicitud para determinar los productos actuales asociados con estos grupos de análisis.

Datos de actividad hace referencia a datos que forma parte de una transacción o actividad profesional. Los datos descritos como parte de la experiencia de carro de la compra en el escaparate representan datos de actividad.Datos de actividad es que es exclusivamente de lectura y escriben y, por tanto, normalmente fácilmente se divide.Después de la duración de la actividad, en este caso, tras la finalización de desprotección, los datos de actividad normalmente se retiran de la caché y se conserva en el almacén de subyacente para el procesamiento posterior.

Actualmente, para mantener estado carro de la compra, la aplicación de ejemplo debe en el cualquier enrutamiento employ rápidas a vincular sesiones de usuario a los recursos de servidor específico o conservar el estado a los datos subyacentes almacenar.Almacenamiento en caché estos datos de actividad en progreso, se puede eliminar la necesidad de distribución rápida y aliviar la base de datos subyacente de la responsabilidad de almacenar esta transitorio principalmente datos de carro de la compra hasta que la actividad, en última instancia, genera una orden de.

Datos de recursos hace referencia a datos que simultáneamente es leer y escribir, como el inventario del producto.Durante el proceso de clasificación, los niveles de inventario que necesite supervisarse con frecuencia para aplicar niveles o las directivas de relleno de fondo.Sin embargo, cuando se procesan pedidos, estos datos debe actualizarse simultáneamente a cuenta para el cambio en los niveles.Con frecuencia, al tratar con datos de recursos, para ofrecer rendimiento y escala, coherence de datos se relaja.Por ejemplo, el proceso de pedidos puede oversell elementos que se puede desencadenar procesos independientes, como ordenar volver para reconciliar conflictos de inventario.

Antes de obtener comenzar la integración de progreso en la aplicación de ejemplo, puede resultar útil revisar rápidamente algunos conceptos de velocidad principales.

Jerarquía lógica

La jerarquía lógica de velocidad consta de equipos, hosts, cachés con nombre, las áreas y elementos de la memoria caché (consulte la figura 4).Equipos pueden ejecutar varios servicios de progreso, cada uno de los servicios considera un host de caché.Cada host de caché puede ejecutar varias cachés con nombre.Estos denominado cachés pueden abarcar entre equipos y están definidos en la configuración.

fig04.gif

La figura 4 jerarquía lógica de elementos de progreso

Cada nombre caché almacena un grupo lógico de datos, como un catálogo de productos.Almacena en caché con nombre también establecer directivas de alrededor de disponibilidad, su desalojo y caducidad.Crear explícitamente las regiones, contenedores de datos físicamente co-located, también puede existir en cada caché con nombre.Como los elementos se recuperan de forma masiva, las áreas se convierten en útiles si la aplicación necesita coherente abordar un grupo de elementos de la caché juntos.Además, estas regiones mejoran facilidad de uso, proporciona búsqueda de en función de la etiqueta y enumeración de los elementos de área de la memoria caché.Creados explícitamente las regiones son, sin embargo, un concepto opcional.Progreso implícitamente crear áreas de predeterminado en segundo plano si no se especifica explícitamente ninguna región.

Por último, dentro de las áreas de forma implícita y explícita creadas son los elementos caché a sí mismos, que son responsable de mantener las claves, objetos, las etiquetas, marcas de tiempo, versiones y datos de caducidad.

Caché de particiones y local

Velocidad actualmente admite dos tipos de almacenamiento en caché: con particiones y locales.Cachés de particiones distribuir elementos de la caché entre los hosts para denominado cachés en particular.Cada caché con nombre global puede habilitar la alta disponibilidad, eficazmente causa velocidad mantener un número configurable de copias de seguridad para los elementos de una caché con nombre entre equipos en el nivel de progreso.

Almacenamiento en caché local se ejecuta en el cliente para acelerar el acceso a los datos recuperados de progreso.Cuando el almacenamiento en caché local se utiliza en combinación con las cachés de progreso con particiones, tal como se recuperan datos desde el anillo de servidor de progreso, elementos de la caché se almacenan en forma de objeto en el proceso ejecuta el cliente de progreso.Además, como con directiva de caducidad del servidor, las cachés locales también pueden cada configurar una fecha de caducidad para los artículos.

Almacén de configuración

El almacén de configuración de velocidad consta de las directivas de caché, así como el mapa de partición global, que describe la distribución de elementos de la caché en el clúster.Progreso utiliza las directivas y mapa de partición global definido en el almacén de configuración para aplicar las directivas definidas por cachés con nombre y para ejecutar el administrador de la partición global, respectivamente.

El administrador de partición global es un componente de progreso que se encarga de transmitir el panorama de elementos de caché para el resto del clúster.Los clientes, en última instancia, utilizan esta información al comunicarse con el clúster para crear tablas de enrutamiento que definen correlaciones entre los datos y hosts de servicios de progreso.El administrador de partición global se ejecuta dentro de un host de servicio de progreso.Si el host que ejecuta el administrador de partición global deja de funcionar, otro host dentro del clúster de velocidad asumirá responsabilidad iniciando el Administrador de partición global desde la asignación de partición global almacenada en el almacén de configuración.Velocidad permite que el almacén de configuración se colocan en un recurso compartido de red o almacenados en SQL Server.

Introducción a la velocidad

Para empezar con la velocidad, vamos a comienzan con una descripción general del proceso de instalación velocidad, la implementación de clústeres iniciales y una aplicación básica de cliente de progreso.

Al continuar por el instalador de progreso en un servidor de caché, se le presenta la pantalla de configuración del host de caché que se muestra enLa figura 5 .

fig05.gif

La figura 5 guration Confi de host de caché de progreso

La pantalla de configuración del host de caché captura la configuración de clúster y servicios necesaria para ejecutar el host de progreso.En primer lugar, esta pantalla permite elegir si el almacén de configuración está colocado en un recurso compartido de red o almacenado en SQL Server.Para este ejemplo, usará la opción de archivo basado en XML para almacenar la configuración de velocidad en un recurso compartido de red.

A continuación, el clúster se asigna un nombre así como un tamaño aproximado del nodo.La configuración de tamaño del clúster se utiliza para optimizar el rendimiento de progreso por ajuste estructuras de datos internos según para el tamaño de clúster.Es posible restablecer el tamaño de clúster en un momento posterior medida que evolucione el clúster.

Por último, la sección de los valores de configuración de servicio captura el puerto de servicio que se ejecuta el host actual en, el puerto que el clúster propiamente dicho se ejecuta en, así como la cantidad máxima de memoria que este host velocidad es consumir.

Haga clic en el botón Probar conexión para validar la conectividad del almacén de configuración.Haga clic en Guardar y cerrar para finalizar la instalación.Si el equipo se está ejecutando un servidor de seguridad, asegúrese de que permitir que el servicio de progreso a través de agregando una excepción para DistributedCache.exe, ubicado en el directorio de instalación de progreso.

Para instalar hosts de caché adicional, repita estos pasos instalación en nuevos equipos de progreso.Al instalar otros hosts, el clúster relacionados con la configuración se detectará automáticamente del almacén de configuración en el recurso compartido de red utilizado durante la instalación del primer host de clúster de.Para este ejemplo, instala un clúster de tres nodos.

Implementación de clúster

Una vez instalado velocidad, pueden administrarse a través de Windows PowerShell.Para iniciar la ventana de comandos de progreso, ejecutar el acceso directo administración velocidad coloca en el escritorio después de la instalación como administrador.Para iniciar el clúster de caché, ejecute el comando de inicio-CacheCluster.El comando Get-CacheHost mostrará el estado de hosts en el clúster.Get-CacheStatistics mostrará las estadísticas de artículo de caché de un determinado denominada caché.Para obtener más detalles en Administración de progreso a través de Windows PowerShell, consulte la documentación incluida con la instalación de progreso.

Después de unirse a hosts del clúster de progreso, la configuración de directiva XML que se muestra en la cachéFigura 6se produce en el recurso compartido de red en el archivo ClusterConfig.xml.

Configuración de directiva de la figura 6 velocidad XML

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="dcache" type="System.Data.Caching.DCacheSection,
      CacheBaseLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </configSections>
  <dcache cluster="velsample" size="Small">
    <caches>
      <cache type="partitioned" consistency="strong" name="default">
        <policy>
          <eviction type="lru" />
          <expiration defaultTTL="10" isExpirable="true" />
        </policy>
      </cache>
    </caches>
    <hosts>
      <host clusterPort="22234" hostId="1916351620" size="2048" quorumHost="true"
          name="VELSAMPLE01" cacheHostName="DistributedCacheService"
          cachePort="22233" />
      <host clusterPort="22234" hostId="1249604550" size="2048" quorumHost="false"
          name="VELSAMPLE02" cacheHostName="DistributedCacheService"
          cachePort="22233" />
      <host clusterPort="22234" hostId="1016778186" size="2048" quorumHost="false"
          name="VELSAMPLE03" cacheHostName="DistributedCacheService"
          cachePort="22233" />
    </hosts>
    <advancedProperties>
      <partitionStoreConnectionSettings providerName="System.Data.SqlServerCe.3.5"
          connectionString="\\velsample01\velocity\ConfigStore.sdf" />
    </advancedProperties>
  </dcache>
</configuration>

El elemento de configuración dcache representa el clúster velsample creado durante la instalación. En esta sección de configuración contiene la información de configuración de directiva que establece durante las instalaciones de host, es decir, denominadas cachés, hosts y configuración de almacén.

En el elemento almacena en caché, velocidad crea automáticamente un predeterminada, pero caché con particiones, con nombre. Esta configuración de caché con nombre también contiene la configuración de directiva que velocidad se utiliza para exigir la caducidad y su desalojo configuración que controlan la caché cuánto elementos dentro de esta denominada caché deben permanecer en memoria, así como el modo en progreso quita estos elementos una vez que caducan. En esta configuración predeterminada, el valor de defaultTTL indica que los elementos de caché permanecerá en la memoria durante 10 minutos. Posteriormente, velocidad utiliza el algoritmo mínimo recientemente utilizado (LRU) para expulsar objetos de memoria que caducan.

En determinadas circunstancias, puede ser conveniente desactivar estas opciones de caducidad y su desalojo. Por ejemplo, en los casos en los datos de establecen el tamaño se sabe relativamente ser fijo, como el catálogo de productos de la aplicación de ejemplo. En este caso, el tipo de su desalojo debe establecerse en ninguno mientras el valor isExpirable se podría establecido en false.

A continuación, en el elemento de configuración host, cada uno de los hosts de velocidad especifica nombres, tamaño y información de dirección. Además, cada host puede actuar como un host de quórum, o provocar host. Hosts plazo de entrega de progreso son responsable de mantener la estabilidad del clúster. Estos hosts del cliente potencial colaboran para evitar la división cerebro síndrome, sub-clusters una circunstancia donde hace una pérdida de comunicación dentro del clúster que funciona de forma independiente. La mayoría de hosts de cliente potencial de velocidad debe estar ejecutándose para que todo el clúster ejecutar, por lo que es esencial para aislar el clúster con suficiente hosts de cliente potencial para garantizar la mayoría de estos responsable hosts no error simultáneamente.

No hay alguna sobrecarga adicional implicados en la comunicación de host del cliente potencial. Es un conveniente para ejecutar el clúster con tan pocos hosts de cliente potencial como sea necesario para mantener un quórum de clientes potenciales. Para los clústeres pequeños, desde uno a tres nodos de tamaño, es aceptable para ejecutar todos los nodos como nodos del cliente potencial la cantidad de sobrecarga adicional generada por una agrupación pequeña de hosts de cliente potencial será relativamente baja. Para los clústeres más grandes, sin embargo, para reducir la sobrecarga de implicados en asegurar la estabilidad del clúster, se recomienda que utilice un porcentaje menor de hosts de cliente potencial, por ejemplo, 5 conducir hosts para un clúster de 10 nodo.

Para mi aplicación de ejemplo, para habilitar todos los tres hosts ejecutar como conducir hosts, puede ejecutar un comando Stop-CacheCluster, actualizar los restantes valores de quorumHost true y, a continuación, ejecutar CacheCluster de inicio.

Por último, el elemento de configuración advancedProperties especifica el proveedor de almacenamiento para y la ubicación de la asignación de partición. Aquí, la configuración especifica la ubicación de red de la base de datos mapa de partición. Esta base de datos de mapa partición se utiliza por el host está ejecutando el administrador de partición global.

Una aplicación de cliente de velocidad básico

Para configurar el entorno de desarrollo permite crear aplicaciones de progreso, cree primero un nuevo proyecto de consola. Agregar referencias a los siguientes ensamblados en el directorio de instalación velocidad:

  • CacheBaseLibrary.dll
  • CASBase.dll
  • CASMain.dll
  • ClientLibrary.dll

A continuación, agregar un archivo app.config al proyecto consola con la siguiente configuración:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="dcacheClient" 
      type="System.Data.Caching.DCacheClientSection, CacheBaseLibrary" 
      allowLocation="true" allowDefinition="Everywhere"/>
  </configSections>

  <dcacheClient deployment="routing">
    <localCache isEnabled="false"/>
    <hosts>
      <host name="VELSAMPLE01" cachePort="22233" 
        cacheHostName="DistributedCacheService"/>
    </hosts>
  </dcacheClient>
</configuration>

La sección dcacheClient proporciona la configuración de cliente de progreso. Esta configuración especifica el tipo de implementación de cliente, las opciones de caché local, así como información de dirección del clúster.

La implementación puede establecerse a ser enrutamiento o simple. Una implementación de enrutamiento permite a comunicarse con cualquier host de progreso en el clúster de los clientes de progreso. Una implementación simple dirige los clientes para comunicarse con hosts específicos de progreso, que requiere un salto de red adicionales dentro del clúster para comunicarse con el host de destino. El enrutamiento es la implementación recomendada cuando minimiza la carga de red. Sin embargo, si existen restricciones redes permitir de los clientes para comunicarse sólo con un subconjunto de los hosts de progreso en el clúster, una implementación simple sería adecuado.

El elemento de localCache en este ejemplo especifica que el almacenamiento en caché local está deshabilitada para la aplicación cliente. Si isEnabled se establece en true aquí, como este elementos de caché de consola cliente aplicación recuperar desde el clúster velocidad, estos elementos debe conservarse en el cliente en forma de objeto en el proceso de aplicación. Que ya no se necesitaría requiere posteriores ida y vuelta al clúster, el almacenamiento en caché local podría más mejorar el rendimiento.

Con almacenamiento en caché local habilitado, un ttlValue puede especificar que el número de segundos objetos debe permanecer válido dentro de la caché local. Las solicitudes posteriores para objetos invalidados hará que el cliente para recuperar las actualizaciones del clúster.

Es importante tener en cuenta que los clientes que utilizan el almacenamiento en caché local recuperar objetos localmente incluso si estos elementos se han actualizado en el clúster. Como tal, es mejor utilizar el almacenamiento en caché local para cambiar con frecuencia los datos. En versiones posteriores, el equipo de velocidad tiene como destino una característica de notificaciones que permitirá que el clúster de progreso para emitir las notificaciones de elementos de la caché actualizada a los clientes, permitiendo así que los clientes para actualizar la caché local en consecuencia.

La configuración de hosts especifica direcciones para los hosts distintos en el clúster. Múltiples hosts se pueden especificar aquí; sin embargo, es necesario para el cliente descubrir los hosts del clúster sólo un host. Cada host en la configuración de cliente especifica el nombre, puerto y configuración cacheHostName que corresponden a la configuración host mostrada anteriormente en la configuración del clúster.

La figura 7 Muestra un simple programa que coloca un objeto en el progreso unificada caché y, a continuación, recupera ese objeto de la caché.

La figura 7 con la caché de progreso

using System;
using System.Data.Caching;

namespace VelocityClientConsole {
  class Program {
    static void Main(string[] args) {
      // Create the cache factory
      CacheFactory factory = new CacheFactory();

      // Get the default named cache
      Cache cache = factory.GetCache("default");

      // Add a string to the cache
      cache.Put("MyCacheKey", "Hello World");

      // Get the data from the cache
      string s = (string)cache.Get("MyCacheKey");

      Console.WriteLine(s);

      Console.ReadLine();
    }
  }
}

Primero, en el mediante la instrucción, los tipos de referencia dentro del espacio de nombres System.Data.Caching.En el método Main, CREO un CacheFactory y recuperar la memoria caché con nombre titulado predeterminado.A continuación, utilizo la instancia de caché del cliente para colocar el objeto de cadena en la caché y recuperar.

El CacheFactory también proporciona constructores adicionales para crear objetos de caché que se comunican con clústeres de progreso que no se hace referencia en la configuración de cliente.El CacheFactory creará la correspondiente implementación concreta de cliente caché correspondientes de la implementación y opciones de caché local que se especifican mediante la configuración o mediante programación a través del constructor CacheFactory.

Después de ejecutar la aplicación de consola a través de Windows PowerShell, puede comprobar que se ha creado el elemento de caché a través de los comandos get-caché y Get-CacheStatistics (consulte la figura 8).Get-caché muestra que un área implícito se ha creado para contener el elemento en el host VELSAMPLE03.Además, Get-CacheStatistics muestra tamaño, región y la información de acceso para el valor predeterminado denominada caché.

fig06.gif

Figura 8 ver estadísticas de caché de Windows PowerShell

Diseño de la memoria caché

Ahora que velocidad es hacia arriba y ejecución, Comencemos integrar progreso en la aplicación storefront a diseñar el almacenamiento en caché.En este ejemplo, la aplicación storefront utiliza la base de datos Northwind de catálogo de productos y datos de referencia de informes, así como datos de actividad de pedido de venta.En la figura 9 se muestra este modelo de datos.

fig07.gif

Figura 9 StoreFront modelo de datos

La aplicación utiliza clases de objeto de transferencia para representar el almacén de datos subyacente.La capa de acceso a datos storefront actual utiliza System.Data.SqlClient para rellenar los objetos de transferencia.Los si la aplicación aprovecha relacional-objeto tecnologías de asignación (o/administrador de recursos) para asignaciones de tipo más eficaces, objetos generados por estos marcos puede almacenarse en caché en progreso sólo el mismo.Siempre que la capa de acceso a datos genera objetos serializables de CLR, velocidad se es capaz de almacenamiento en caché estos objetos.

Caché con nombre

Como las propiedades que controlan estos tipos de datos varían entre las clasificaciones de referencia y actividades, una estrategia de organización que demarcates estas unidades lógicas en distintos denominado cachés se beneficiaría de almacenamiento en caché las directivas adecuadas para las necesidades de cada tipo de datos.En concreto, creando independiente denominada almacena en caché para el catálogo, informe y datos de carro de la compra, se pueden ajustar las directivas de alrededor de caducidad, su desalojo y disponibilidad en consecuencia.

Puesto que el catálogo de productos se puede clasificar como datos de referencia, o datos compartidos y de sólo lectura, es muy adecuada para almacenamiento en caché.Estos datos, además, representa una unidad lógica de datos de referencia, por lo que es un buen candidato para definir un independiente denominado caché.

Para crear esta nueva memoria caché con nombre, utilice el comando nuevo de caché.

New-Cache -CacheName catalog -Eviction none -NotExpirable

Para la caché de catálogo, como los cambios de datos con bastante frecuencia y el catálogo de tamaño es previsible, puede desactivar su desalojo, así como deshabilitar la caducidad.Sin embargo, en escenarios donde puede aumentar el tamaño de caché es impredecible, es necesario utilizar su desalojo y caducidad para evitar que fuera de las condiciones de memoria.

Como la referencia de producto informes, tales como productos más vendidos, es posible que fluctúen con más frecuencia que el catálogo, agregación de listas de identificador de informes en un independiente denominado caché tiene ventaja en que se pueden desacopladas estas listas de productos en el catálogo subyacente denominado las directivas de caché.Específicamente, para hacer referencia a estos productos informes relacionados, puede crear un independiente denominado caché denominada informes con una estrategia de caducidad y su desalojo más intenso.

New-Cache -CacheName reports -Eviction LRU -TTL 1440

Los informes denominados caché se crea estos productos identificador informe listados caducará después de un día (1,440 minutos), y velocidad utilizará LRU algoritmo para expulsar objetos desde la caché.Utilizar una caché con nombre independiente para listados de identificador de producto agregados permitirá que el informe con datos y los datos del catálogo de producto para variar independientemente según a distintas directivas de caducidad y su desalojo.Como tal, se pueden recuperar productos más vendidos de la caché de catálogo mediante programas de identificador de producto de los informes denominados caché.El objeto de lista de informe vendidos caducará diariamente, mientras que el catálogo de productos permanece almacenada en caché, tal vez hasta que un proceso en segundo plano se actualiza a intervalos regulares o desencadenadas.

A medida que los datos relacionados con de sesión tradicionalmente se leer y escritos, se puede clasificar como datos de actividad.Puesto que datos carro de la compra es esencial para la realización de pedidos, hay también un requisito seguro para una alta disponibilidad a través de estos datos.En la aplicación original, para reducir la pérdida de compras de datos de carro, este podría han ha conserva el estado a través del almacén de datos subyacente hasta la finalización de pedidos correspondientes.En un escaparate habilitado el progreso, según el progreso a los usuarios a través de la experiencia de carro de compra, actividades según los datos de carro se pueden exclusivamente leen y escritas en el clúster de progreso.

Mediante una sesión recién creada denominada caché, puede ajustar las directivas sobre las propiedades de los datos relacionados con la actividad.En concreto, para las aplicaciones que anteriormente en caché estos datos en la sesión de ASP.NET InProc predeterminado estado y más flexible escala está habilitado mediante la integración SessionStoreProvider de progreso.Ya no es necesario las solicitudes de usuario de par a servidores específicos según en estado de distribución rápida.Además, al habilitar una alta disponibilidad en la sesión denominada caché, pérdida de datos se mitiga sin datos persistentes en la base de datos.Progreso aísla el clúster redundantly almacenando datos carro.

Este comando nuevo de caché siguiente crea la sesión denominada caché.

New-Cache -CacheName session -Secondaries 1 -TTL 1440

El modificador –Secondaries especifica el número de copias de seguridad para cada elemento almacenado en esta caché con nombre.En este ejemplo, velocidad aislar 1 copia de seguridad adicional en el clúster para cada carro de la compra almacenado en la sesión denominada caché.

Organizar la memoria caché

La aplicación necesita poder categorías de dirección y productos tanto independientemente, así como en categorías y productos en las listas.Hay varios enfoques que puede adoptar para organizar estos objetos en el catálogo denominada caché, incluyendo organización basada en regiones y organización basada en listas.Ambos enfoques se centran en un grado de distribución de objeto en el clúster.Sin embargo, en función de las necesidades de su aplicación, otro enfoque de la organización podría ser más apropiado.Por ejemplo, se puede almacenar en caché gráficos de objetos por clave o puede emplear el almacenamiento en caché de páginas.

El catálogo de productos podría organizarse mediante áreas de progreso.Las áreas son ventajosa en el escenario de ejemplo porque permiten la aplicación para solucionar determinados productos de la categoría todos juntos o independientemente.Por ejemplo, puede que la aplicación presentar una categoría de producto completo listado en algunos casos, mientras que necesite mostrar sólo una página de detalles de producto en otros casos.Organización de la caché de catálogo utilizando áreas para asociaciones de categoría de producto podría suponer la jerarquía que se muestra en la figura 10.

fig10.gif

Figura 10 organización basado el área

En este modelo de almacenamiento de caché, los propios objetos de categoría se almacenará independientemente, mientras que los objetos de producto se almacenará en áreas, con respecto a la pertenencia a la categoría.Otra ventaja posible de un enfoque basada en regiones para el catálogo implica co-location: como se garantiza que todos los objetos de una región residen en el mismo equipo host de progreso, se recuperará el área de categoría de producto completo de forma masiva.Una solución basada en listas requiere varias solicitudes de caché.Las áreas también permiten la recuperación de elementos según para etiquetas, que son índices secundarios de elementos de la caché.

Aunque una solución basada en regiones presenta ventajas en masiva recuperación optimización, acceso individuales para productos y recuperación en función de la etiqueta, la co-location de elementos también podría presentar un cuello de botella.Si la aplicación cliente consume más activamente que otros usuarios un área de categoría en particular, esta zona activa de región impediría que los beneficios inherentes en el rendimiento proporcionado por el escalado horizontal de los datos a través de la distribución de productos en el clúster.

Mediante un enfoque basada en listas de organización de categoría de producto se promover distribución uniforme de los elementos en el clúster, por lo tanto totalmente darse cuenta las ventajas de escalabilidad posible a través de la distribución de los datos.En una solución basada en regiones potencialmente podría desarrollar una zona activa de actividad en una agrupación físicamente co-located de productos, una solución basada en listas permite distribuir la carga de cualquier categoría de producto en particular de lista en el clúster.Este enfoque organización requiere que el almacenamiento de objetos category, objetos de producto y los objetos de lista category que identifican los objetos almacenados de forma independiente del producto.La organización de caché de este enfoque basada en listas se muestra en la figura 11.

fig11.gif

Figura 11 basados en List organización

Aunque un enfoque de basada en listas para organizar el catálogo distribuye la carga de la actividad de catálogo uniformemente en todo el clúster, para tratar una categoría de producto todos juntos, varias solicitudes de caché son necesarias.En este tema, lectura de masivas y escritura es una característica que tiene como destino el equipo de progreso para versiones futuras.

Organizar los informes

Puede emplear una organización basada en listas similar para los informes denominada caché.Separe estos informes de referencia en el catálogo denominada caché permite las directivas que rigen el informe y catálogo de datos a varían de forma independiente.De hecho, esto permite ajustar las directivas de caducidad y su desalojo según a los tipos de datos correspondientes.Los datos de referencia catálogo relativamente estáticos deshabilitan caducidad y su desalojo, mientras que los datos de informes más dinámicos exige una directiva de caducidad y su desalojo más agresivo.Jerárquica, objetos de la lista de claves de producto dentro de los informes denominados caché identifican los objetos producto en la caché de catálogo, similar al método utilizado para listas de categorías de productos, pero emplea a través de las cachés con nombre.

Para recuperar productos basados en estos informes agregados de referencia, el método basada en listas se utiliza a través de informes e denominado cachés de catálogo.

Organizar la sesión

Para escenarios en función de la actividad que son de sólo lectura y escritura, alcanzando la organización de caché mediante el almacenamiento de las jerarquías de objeto puede ser una opción óptima.Por ejemplo, en la sesión denominada caché, puede organizar objetos de carro de compra que contienen información acerca de cada producto que ha seleccionado un usuario concreto: producto, precios y cantidad.

Mientras que la organización de catálogo promover un alto grado de escalabilidad al distribuir los elementos en la caché, los elementos de caché carro de la compra no son como muy reutilizables entre solicitudes.Rendimiento se puede incrementar en carro de la compra cada usuario en una única clave de almacenamiento en caché en lugar de distribuir elementos carro de la compra en la caché con nombre como elementos de la caché de nivel superior.Más específicamente, como la aplicación storefront genera solicitudes a la sesión denominada caché, cada carro de la compra puede recuperarse de forma masiva a través una única solicitud.Además, desde la sesión denominada caché se creó con una alta disponibilidad, velocidad protegerá los datos de sesión al mantener copias de cada carro de la compra en el clúster.En la figura 12 se muestra el enfoque de organización de sesión.

fig12.gif

Figura 12 organización de la caché de sesión

Las aplicaciones pueden mantener los elementos en función de la actividad directamente a través de las API de progreso y las aplicaciones ASP.NET pueden aprovechar integración del progreso con el marco de proveedor de almacén de sesión transparente darse cuenta como un nivel de caché a través de la sesión ASP.NET API de progreso.

Programación de un nivel de caché

Los niveles de arquitectura actual se demarcated como la interfaz de usuario (Web), la capa de lógica empresarial (BLL) y el nivel de acceso de datos (DAL).Como la aplicación actual ocupa principalmente de objetos de transferencia de datos creados por el nivel de datos, almacenamiento en caché datos de estas formas correspondientes facilita la entrega de los niveles de aplicación con representaciones comprendan.El ejemplo storefront presentó una capa de caché entre los niveles empresarial y de datos.Por interweaving lógica de almacenamiento en caché en el nivel de empresa, las capas que dependen de forma uniforme la lógica empresarial se benefician de validación de reglas de negocio antes de generar llamadas a la lógica de almacenamiento en caché, mientras que la lógica empresarial propia transparente consume el nivel de caché.Además, el nivel de Web utiliza la integración de proveedor de almacén sesión ASP.NET de progreso.

Para ver este capas en acción, vamos a recorra el nivel de caché iniciar mediante la vista de lista Categoría del producto.Para empezar, la categoría lista Vista de las llamadas a la lógica empresarial de nivel que valida la solicitud y, a continuación, utiliza el nivel de caché llamando al método GetProductsByCategory en VelocityCatalogCache (consulte la figura 13).Esto coordina datos cálculo de referencias entre la caché de progreso y el almacén de datos de forma transparente para la lógica empresarial.

Figura 13 GetProductsCatalog

public IList<Product> GetProductsByCategory(int id) {
  IList<Product> products = null;

  IList<int> productIDs = (IList<int>)_catalogCache.Get("ProductCategoryList-" + id);

  if (productIDs != null) {
    products = new List<Product>(productIDs.Count);

    foreach (int productID in productIDs) {
      products.Add((Product)_catalogCache.Get("Product-" + productID));
    }
  }
  else {
    products = DataLayer.CatalogProvider.GetProductsByCategory(id);

    if (products != null && products.Count > 0) {
      productIDs = new List<int>(products.Count);
      foreach (Product p in products) {
        productIDs.Add(p.ProductID);
        _catalogCache.Put("Product-" + p.ProductID, p);
      }

      _catalogCache.Put("ProductCategoryList-" + id, productIDs);
    }
  }

  return products;
}

En esta lista de categoría de producto, el nivel de caché se actuar como proveedor read-through para simplificar la capa empresarial. Éste es sólo un enfoque de capas para almacenamiento en caché con la velocidad de lógica de programación. Por ejemplo, para control detallado en el nivel de empresa, aprovechando el progreso en una trama de margen de caché directamente en la capa empresarial podría presentar una solución viable así. En futuras versiones, el equipo de velocidad tiene como destino read de through y subyacente de escritura compatibilidad que se pueden registrar las devoluciones de llamada para coordinar el cálculo de referencias datos entre la caché y almacén subyacente, permitiendo así que los clientes para utilizar este comportamiento a través de la caché las API de progreso en lugar de un nivel de contenedor.

En la implementación de método capa GetProductsByCategory caché, es importante táctil en la consecuencia para la simultaneidad. En este método, actualmente no se se utiliza ningún modelo de simultaneidad. Como el catálogo es principalmente datos de referencia de sólo lectura que cambie con poca frecuencia, el impacto a la concurrencia no estará demasiado grave. Sin embargo, sería posible para varios subprocesos o los clientes para realizar actualizaciones idénticas, uno tras otro, si llegan en caché errores al mismo tiempo. O bien, para escenarios donde simultaneidad se crítico, por ejemplo, cuando el almacenamiento en caché diversos tipos de datos de recursos, velocidad admite dos modelos de simultaneidad optimistas y pesimistas.

Integración con el estado de sesión de ASP.NET

Progreso proporciona la capacidad para aprovechar el clúster de caché mediante el marco ASP.NET SessionStoreProvider de forma transparente. Esta capacidad permite que las aplicaciones Web tener acceso a los elementos de una caché de nombres especificado mediante la propiedad HttpContext.Session.

Esta integración presenta grandes ventajas en escalabilidad por separe el estado de caché desde servidores específicos. De forma aprovechando la velocidad de sesión o datos relacionados con la actividad, escala más flexible está habilitado cuando se libera la arquitectura de acoplamiento de los clientes a nodos de servidor específico, correspondientes al estado.

Para escenarios que requieren alta disponibilidad, como los datos actividad de compras, velocidad permite aislar fácilmente el clúster con redundancia tal como se muestra durante la creación de la sesión denominada caché, así ofrecer disponibilidad más cerca a la lógica de consumo.

Para habilitar la integración de SessionStoreProvider de progreso en ASP.NET, se agrega la siguiente configuración al archivo web.config de la aplicación ASP.NET storefront. Esta configuración asocia el estado de sesión de ASP.NET storefront la sesión creada previamente denominada caché.

<system.web>
  <sessionState mode="Custom" customProvider="SessionStoreProvider">
    <providers>
      <add name="SessionStoreProvider" 
        type="System.Data.Caching.SessionStoreProvider, ClientLibrary" 
        cacheName="session" />
    </providers>
  </sessionState>
</system.web>

A continuación, para tener acceso a la sesión denominada caché a través de ASP.NET, el escaparate mantiene los usuario compra carro actividad datos como en la página Product.aspx que se muestra en Figura 14 .

Figura 14 acceso A la memoria caché a través de ASP.NET

protected void AddToCartButton_Click(object sender, EventArgs e) {
  ShoppingCart cart = (ShoppingCart)Session["ShoppingCart"];

  if (cart == null) {
    cart = new ShoppingCart();
    Session["ShoppingCart"] = cart;
  }

  int productID = Convert.ToInt32(Request.Params["id"]);

  ShoppingCartItem item = cart[productID];
  if (item != null) {
    item.Quantity++;
  }
  else {
    Product p = ServiceLayer.CatalogService.GetProduct(productID);

    cart[productID] = new ShoppingCartItem() {
      ProductID = productID,
      Quantity = 1,
      UnitPrice = p.UnitPrice
    };
  }

  Response.Redirect("~/Cart.aspx");
}

Tras la finalización de orden, se pueden quitar orientado a la actividad carts compras de la sesión denominada caché y se propagan al almacén de datos subyacente tal como se muestra aquí en la página Purchase.aspx.

protected void CheckoutButton_Click(object sender, EventArgs e) {
  ShoppingCart cart = (ShoppingCart)Session["ShoppingCart"];

  ServiceLayer.OrderService.ProcessOrder(cart,
    NameTextBox.Text, AddressTextBox.Text, CityTextBox.Text,
    RegionTextBox.Text, PostalCodeTextBox.Text, CountryTextBox.Text);

  Session["ShoppingCart"] = null;

  Response.Redirect("~/Congrats.aspx");
}

A través de la sesión ASP.NET API, la aplicación ahora perfectamente aprovecha la velocidad a comprender orientado a la actividad datos más cerca a la lógica de mucho, eliminan la necesidad de técnicas como la distribución rápida y protección datos de actividad de carro de compra mediante la la compatibilidad de alta disponibilidad anteriormente habilitada a través de la sesión denominada caché.

Ir adelante

Progreso harnesses la evolución en arquitecturas distribuidas, así como las tendencias de hardware subyacente a comprender este pervasiveness de datos más cerca para consumo de las aplicaciones.En este artículo sólo ha proporcionado un primer examen de las características de los motivos que controla la velocidad.

Las aplicaciones de ejemplo storefront ahora aprovecha la velocidad a catálogo de caché de referencia y datos del informe así como datos de actividad carro de compra mediante las directivas adecuadas para cada tipo de datos.Mientras que anteriormente se inhibited escala mediante la duplicación de operaciones de catálogo de datos tras cada carga de página, ahora forma tanto minimizar la carga en el almacén de datos subyacente y darse cuenta de nuestros catálogo de datos de referencia más cerca a la lógica que consume, un alto grado de escalabilidad y el rendimiento está habilitado.También se ha mejorado el tiempo de respuesta y obtendrá más flexible escalar mediante la liberación de la arquitectura subyacente de acoplamiento de los recursos a las solicitudes basándose en estado.Sin pasar en el almacén de datos subyacente como sea necesario antes, datos críticos para la realización de pedidos está protegidos mediante la compatibilidad alta disponibilidad en progreso.

Si desea una perspectiva de las razones para la caché distribuida y en la memoria adicional, una descripción general de la conjunto de características completo de velocidad y información acerca de las descargas, vea el artículo "Código de Microsoft Project con la velocidad" y elCentro de desarrollo de progreso.

Aaron Dunnington es un administrador de programas en el equipo de programación de datos de Microsoft.Puede ponerse enhttps://blogs.msdn.com/Velocity.