Inicio - Articulos - Descargas de Código Fuente - VituZone - Anuncia Aquí - Contáctame - Suscríbete
¿Prefieres buscar los artículos por temas? Encuéntralos aquí
.Net Framework 2.0 (5)
ASP.net 2.0 (4)
Otras herramientas (1)
Windows Mobile (1)

Califica este artículo:




Estás en la categoría: .Net Framework 2.0
Puedes visitar artículos similares en: .Net Framework 2.0

Manejo de caché para aplicaciones hechas con .net Framework

Breve descripción: El buen uso de la memoria caché en aplicaciones con alta carga de usuarios puede mejorar enormemente la velocidad de respuesta de la aplicación, aquí mostraremos el uso de una excelente herramienta para este fin, Memcached para .net Framework
Autor: Javier Tuñoque Galvez
Fecha publicación: 05/05/2009
Cantidad Visitas al artículo: 763
Calificación del artículo: Buena Ver Calificaciones dadas a este artículo



1. ¿Que es Memcached?
Memcached es un sistema distribuido de alta performance para el cacheo de objetos en memoria, pensado para incrementar la velocidad de aplicaciones web dinámicas , aliviando la carga de base de datos.
La idea es simple y efectiva, un servicio que escucha en un host y port específico, que puede almacenar cadenas de bytes (strings). De esta manera se podría estar guardando en memoria una estructura serializada en cualquier formato.

2. Funcionamiento
Memcached Server almacena los strings en una gran tabla de hash y los mapea según la clave que le asociemos a dicho item.
Dicha tabla de hash adopta una estructura de porciones de memoria de tamaño variable (denominadas slabs), con el objetivo de optimizar la asignación del espacio de memoria.

Su arquitectura escalable nos permite mantener un pool de Memcached servers, característica que bien puede ser explotada en momentos donde la cantidad de conexiones no puede ser gestionada por un único Server. En ese caso, el pool optará por otro Server, balanceando la carga de conexiones.

Administración de Memoria
Cuenta con su propio sistema de gestión de memoria, basada en un slab allocator. Este sistema es similar al gestor de memoria del núcleo de Linux que a su vez deriva del implementado en Solaris. Por otra parte se intenta garantizar que no exista fragmentación de memoria.
La idea tras este tipo de gestión de memoria es simple: pedir al sistema operativo memoria en unos determinados tamaños,64 bytes, 128 bytes, 256 bytes, hasta un máximo, en el caso de memcached 1 MB -,creando listas con objetos de cada uno de los tamaños . Cuando el sistema necesita almacenar un objeto, se utiliza aquel trozo de memoria que más se ajuste al tamaño del mismo. En caso de necesitar más memoria , Memcached lo que hace es reservar un trozo de 1 MB, dividirlo en los trozos necesarios (siempre con los tamaños predefinidos) y asignarlos a las listas libres.

En contra partida, se desperdicia memoria, porque hay que usar un bloque de memoria con el tamaño adecuado. Así si estamos usando una arquitectura de slabs con una secuencia de 64 bytes, 128 bytes, 256 bytes, 512 bytes, ..., un objeto de 70 bytes tendría que usar un slab de 128 bytes.

3. Downloads
Se debe descargar los siguientes archivos para Windows:
3.1 Código fuente(servidor memcached, servicio de Windows)
Memcached-1.2.6-win32-src.zip
3.2 Ejecutable(servidor memcached)
memcached-1.2.6-win32-bin.zip
3.3 MemCacheD Manager(Aplicación para gestionar servidores memcached)
MemCachedD Manager
3.4 Memcached Client (fuentes y compilados, soportados para .NET 1.1 y 2.0)
Memcached Client

4. Proceso de Instalación
Todo el proceso se instalación se ha realizando sobre Windows.

4.1 Instalación del servidor
Seguir los siguientes pasos.

1 - Una vez descargado el servidor memcached (ejecutable memcached.exe),
copiarlo en una carpeta. Ejemplo: C:\memcached\memcached.exe
2 - Abrir una ventana de comandos y ubicar la carpeta donde guardó el archivo memcached.exe.
3 – Digitar el siguiente comando: memcached –d install, así como se observa en la siguiente imagen:



4 – Para verificar que la instalación ha sido correcta, podemos ir al administrador de servicios de Windows y ubicarlo con el nombre memcached Server, tal como se muestra en la siguiente pantalla:



5 – Finalmente procedemos a iniciar el servicio ya sea desde esta interfaz o
a través de la ventana de comandos de Windows(memcached –d start)



Ventana de comandos de Windows



Podemos observar otros comando con los cuales se pueden trabajar en la
ventana de Windows(para obtener el listado de los comandos digite
memcached -h)



4.2 Instalación de MemCacheD Manager
1 – Ejecutar el archivo MemCacheDManager_1_0_3_0.msi, ya que es un instalador como todos, siga los pasos le indique el Wizard.
Para verificar que la instalación ha sido correcta, revisar la siguiente ruta:


En los siguientes puntos se procede a explicar con más detalle esta interfaz.



5. MemCacheD Manager
Permite administrar servicios de Memcached locales y remotos.
A continuación se listan algunas características:
-  Permite crear, editar y controlar Memcached como servicios de Windows.
-  Permite utilizar credenciales de Windows de tal manera que se pueda tener el control o hacer deploy en múltiples dominios de Windows desde la misma consola.
-  Utiliza archivos de configuración XML que pueden ser compartidos entre administradores (MemCacheD Manager).
-  Permite monitorear el estado de los servicios Memcached en el servidor y proporciona algunas métricas.
-  Permite realizar actualizaciones de Memcached en servidores remotos.

A continuación las pantallas de MemCacheD Manager:

Esta es la pantalla principal de MemCacheD, desde aquí se agregan los servidores que se han de administrar.



En la siguiente pantalla se muestra la forma como se configura un servidor Memcached.
Se describen a continuación los siguientes campos:
- Server Name: Nombre del servidor donde se ejecutará el servicio Memcached
- User Impersonation: Use esta opción cuando necesite autenticarse en servidores remotos. Para el cual debe indicar un usuario y password.
- Default Installation Path: Esta opción es importante cuando este creando nuevas instancias de memcached, ya que la ruta que indique en este campo es donde se copiaran los archivos relacionados al servicio (actualmente se copian dos archivos memcached.exe y msvcr71.dll).



Luego de agregar el servidor, automáticamente se configuran los servicios Memcached instalados en el servidor. Como en este caso la instancia memcached Server.



Se puede iniciar, detener, reiniciar ó eliminar instancias de memcached Server.
Tener en cuenta que al eliminar la instancia, se está eliminando el servicio.

Una de las características de MemCacheD Manager, es que al crear nuevas instancias de Memcached (opción de menú ), se instala a la vez el servicio, para este caso la versión de memcached es 1.2.6.
Lo que hace MemCaheD Manager es crear automáticamente los archivos relacionados al servicio y copiarlos a la ruta de instalación por defecto(“Default Installation Path”)



Podemos observar el servicio en ejecución a continuación:



Esta pantalla sirve para monitorear la ejecución de los servicios Memcached configurados.
Se pueden observar información importante como:
- Server Name: Nombre del servidor.
- Instance: Nombre de la instancia de memcached(nombre del servicio).
- Version: Versión de memcached.
- Total Connections: Número de conexiones en el servidor.
- Gets: Número de lecturas hechas en el servidor.
- Sets: Número de escrituras hechas en el servidor.
- Bytes Read: Número de lecturas en bytes.
- Bytes Written: Número de escrituras en bytes.



Esta pantalla sirve para actualizar versiones de Memcached en los servidores que se ha instalado (locales o remotos).



En esta pantalla las opciones de menú Redeploy/Update MemCacheD, se debe utilizar cada vez que se actualice a una nueva versión.



MemCacheD Manager permite guardar la configuración en archivos XML de los servidores y servicios Memcached que está administrando, y que luego podrían ser cargados o compartidos con otros MemCacheD Manager.




6. Modo de uso
A continuación se describe la forma como los clientes se conectan al servidor Memcached. Utilizaremos para ello Memcached Client Library para NET Framework versión 2.0.
Son tres las librerías que se debe hacer referencia en el proyecto:
- Memcached.ClientLibrary.dll (la librería principal)
- log4net.dll
- ICSharpCode.SharpZipLib.dll



Se utilizará como lenguaje de programación C#, a continuación los pasos.
1.  Hacer uso del Namespace Memcached.ClientLibrary.
2.  Procedemos a configurar los valores que nos permitirán conectarnos al servidor Memcached, tales como: la lista de servidores (pool de servidores), instancia por default y prioridades.
Para el caso de pool de servidores.


String[] serverlist = { "127.0.0.1:11211", "140.192.34.73:11211" };

Para el caso de un sólo un servidor.
String[] serverlist = { "127.0.0.1:11211"};
Obtenemos una instancia del servidor Memcached, para ellos le indicamos el nombre.

private static SockIOPool pool = null;
pool = SockIOPool.GetInstance("memcached Server");
Establecemos la lista de servidores a conectar

pool.SetServers(serverlist);
Indicamos el orden de prioridad de los servidores.

pool.SetWeights(new ArrayList() {5,2});
Inicializamos la conexión a los servidores indicados.

pool.Initialize();
3. Luego crear una instancia de MemcachedClient, que nos permitirá agregar, eliminar, verificar y reemplazar objetos en el servidor Memcached, identificando cada objeto por intermedio de una clave.

private static MemcachedClient mc = null;
mc = new MemcachedClient();
mc.PoolName = "memcached Server"; //nombre de la instancia
mc.EnableCompression = false;
4. Finalmente hacer uso de los métodos KeyExists, Set y Get para obtener referencias acerca de objetos guardados en el servidor, para ellos cada objeto guardado en el servidor se identifica con una clave(key) .

if(!mc.KeyExists("testKey")) //Verificamos si existe el objeto
mc.Set("testKey ", true); //Si no existe procedemos a guardarlo
bool b = (bool)mc.Get("testKey ");//Obtenemos el objeto guardado


Recuerde que si tiene algún comentario o necesita el desarrollo de alguna solución referente al artículo actual puede contactarme en el momento que lo necesite.

Palabras clave del artículo:

Memcached, .net Framework, Cache


vitucho.net es la página personal de Víctor Hurtado Díaz
Esta página puede ser usada sólo bajo estos Términos de uso
¿Quieres ver todas las secciones del sitio? entra al Mapa del sitio


Admin