c# .net-3.5 memcached distributed-caching

c# - Memcached con Windows y.NET



.net-3.5 distributed-caching (11)

El problema con la API del cliente es que todavía tiene que tener una instancia de Memcached ejecutándose en otra casilla en alguna parte, preferiblemente como lo ha notado, usando la pila LAMP.

No del todo cierto. La pila LAMP (Linux, Apache, MySQL, PHP) no es necesaria para ejecutar Memcached. Actualmente prefiero memcached sobre velocidad hasta que la velocidad está fuera de CTP. He jugado un poco con la velocidad por un tiempo, pero me pareció demasiado difícil de manejar. Sigo todo eso de KISS, ya sabes ... mantenlo simple. Nada más simple que el almacenamiento en caché ... Obtener (clave) ... Poner (clave, valor) ... Destruir (clave).

¿Alguien ya ha implementado memcached para uso de producción en el entorno de Windows? Debido a que muchos blogs que he leído, no se recomienda ejecutar memcached en Windows especialmente para uso de producción, por ejemplo, ejecutando memcached en Windows .

Y una cosa más, ¿qué cliente de memcached es bueno usar con c # y .net 3.5? He encontrado muchos proveedores alternativos como Memcached Providers @ Codeplex , Beitmemcached y memcached @ Sourceforge


¿Por qué necesitas ejecutar memcached en Windows? Es un asunto costoso en un entorno de producción.

Si su código necesita ejecutarse en un entorno Windows, consiga un cliente de Memcached de Windows y hable con una máquina de Memcached basada en * nix.

En un entorno de producción que ejecute memcached en Server 2003 o 2008, significa que obtendrá licencias para todos esos cuadros. Linux le ofrecerá todos los beneficios de OSS. TCO aumentará linealmente con memcached en Windows

Editar:

Han pasado alrededor de 1,5 años desde que escribí esta respuesta y muchas cosas han cambiado desde entonces. Debes darte cuenta, especialmente cuando alguien como Dustin comenta.
Así que aquí está cómo puede obtener memcached en Windows en ejecución. Descarga memcached para Windows desde Couchbase (anteriormente Northscale) .
Por lo general, si planea ejecutar memcached en la misma máquina de producción, debería iniciarla en una memoria limitada, es decir, definir la memoria máxima que se permite usar memcached.

c: / Archivos de programa / memcached> memcached.exe -m 128.

Aquí memcached se ejecuta con un máximo de 128 mb de uso. No quiere que memcached ocupe toda la memoria en su servidor web.

En el momento en que decidió escalar memcached, tendrá que considerar lo que dije antes. Además, comprima sus valores en las combinaciones de valores clave. Los servidores web suelen consumir muy poco CPU (2-3%) y la compresión aporta mucho valor a la red en comparación con el uso de la CPU. Si le preocupa la compresión normal, intente LZO


Como Velocity no existía en ese momento, utilicé un puerto de Memcached para Windows para la empresa para la que trabajo, Skiviez. Principalmente solo existe para proporcionar un caché centralizado para múltiples procesos de trabajo en la misma máquina. Ha estado funcionando bien alrededor de 18 meses en un sitio de comercio electrónico que ve un uso modesto (~ 18,500 visitas / día). El cliente que utilicé fue Enyim integrado como un proveedor de caché para iBATIS.NET. Ese cliente parece funcionar bastante bien; Los clientes memcached no son muy complicados para empezar, tampoco.

Si tuviera que hacerlo de nuevo, probablemente miraría Velocity si estuviera comprometido a permanecer en Windows para mi solución de caché distribuida. Pero está funcionando ahora, así que no voy a tocarlo.

(Aparte: desde entonces, he negado la mayor parte de la necesidad del caché agregando ciertas columnas Cache* a las tablas clave de la base de datos que se actualizan mediante una tarea programada todas las tardes. Esto terminó ejerciendo mucha menos presión sobre los recursos a su alrededor, desde el golpe inicial en el tiempo de CPU al consultar la base de datos a la tensión subsiguiente en la disponibilidad de la memoria al mantener los resultados almacenados en caché en memcached. También lo hizo mucho más explícito en el código cuando se accede a una versión en caché de los datos frente a un calculado sobre la marcha. Estoy seguro de que tienes muchas razones para usar un caché distribuido, pero siempre vale la pena intentar dar un paso atrás y preguntar si realmente lo necesitas o no.



Estoy sorprendido de que nadie aquí haya mencionado a Redis : es uno de los más ricos en funciones y más rápidos (110,000 SET por segundo en un recuadro de nivel de entrada de Linux) de almacenes de datos de valor-clave con una rica estructura de datos para cadenas de caracteres. conjuntos, listas, conjuntos ordenados y hashes.

Aunque Windows no es una plataforma oficialmente compatible, funciona perfectamente bajo Windows con todas las pruebas aprobadas. Tengo versiones de Windows (usando Cygwin) disponibles aquí: https://github.com/ServiceStack/ServiceStack.Redis#redis-server-builds-for-windows

También tiene enlaces de cliente para casi todos los lenguajes de programación actualmente en uso. Mantengo un cliente Open Source C # Redis rico con compatibilidad API nativa para cualquier tipo de C # POCO, soporte de transacciones y administradores de clientes Thread-safe que están listos para ser depositados en cualquier IOC en: https://github.com/ServiceStack/ServiceStack.Redis


La velocidad es un poco más complicada de administrar, pero es mucho, mucho más poderosa que la memcached. No estoy anti-memcached, no en lo más mínimo, es genial. Pero en el futuro, los nuevos proyectos basados ​​en .NET puros están locos por no aprovechar Velocity, incluso en su actual estado inédito.


No sé en qué consiste el proyecto en el que está trabajando, pero le gustaría echarle un vistazo al proyecto Microsoft Velocity Desde la página:

"Velocity" es una plataforma de memoria caché de aplicaciones distribuida en la memoria para desarrollar aplicaciones escalables y de alto rendimiento. "Velocity" se puede usar para almacenar en caché cualquier objeto común de tiempo de ejecución de idioma (CLR) y proporciona acceso a través de API simples. Los aspectos clave de "Velocidad" son el rendimiento del caché distribuido, la escalabilidad y la disponibilidad.

He visto un par de demostraciones y parece que tiene una integración muy buena con .NET Framework.

El problema con la API del cliente es que todavía tiene que tener una instancia de Memcached ejecutándose en otra casilla en alguna parte, preferiblemente como lo ha notado, usando la pila LAMP. El uso de la velocidad significa que todavía se ejecutará en la misma pila y hay una mayor integración en la plataforma .net.

Habiendo dicho eso, si quieres usar la velocidad como caché para otras aplicaciones .NET, es posible que tengas que escribir tu propia API para exponer los datos de velocidad para el consumo.


Sé que llegué un poco tarde a la fiesta y ya hay toneladas de buenas respuestas.

Hemos utilizado Membase en Windows Server con gran éxito. Es 100% compatible con Memcached y tiene un buen instalador de GUI y un servidor de configuración web que lo compila. Es extremadamente fácil de administrar.

También hay otras características NoSQL incluidas, que están fuera del alcance de este hilo, pero vale la pena mirar. Tienen una licencia gratuita para desarrollo, pruebas y servidores de producción (limitados).

Descargas de Membase

Esa misma página tiene una instalación de Windows para Memcached solamente, si no desea ninguna de las características adicionales en Membase.


Si está interesado en ejecutar un cliente de Memcached en Windows, existen dos servidores de código abierto adicionales que pueden hacer el trabajo. Ambos implementan el protocolo estándar de servidor memcached y están escritos en Java para que se ejecuten en Windows.



eche un vistazo a SharedCache . es de código abierto, fácil de usar y muy confiable.

sistema de caché de objetos de memoria distribuida de alto rendimiento, de naturaleza genérica, pero destinado a acelerar las aplicaciones web dinámicas y / o ganar, aliviando la carga de la base de datos. No olvides visitarnos en http://www.sharedcache.com