Memcached con Windows y .NET

83

¿Alguien ya implementó 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 en producción, por ejemplo, ejecutar memcached en Windows .

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

Funky81
fuente
6
Estás apuntando a una publicación de blog de 2008. Memcached se está volviendo bastante amigable en Windows últimamente: northscale.com
Dustin
1
+1 a Dustin. Hemos estado usando NorthScale y es bastante compatible con Windows, con una interfaz de usuario de administración (web) agradable
ram
2
@Dustin y @ram - Dustin, disfruten su +1, pero esta pregunta se hizo en 2008.
Justin
3
Je. Eso debe ser lo que ese '08 está ahí. Lo siento por eso. :)
Dustin

Respuestas:

49

¿Por qué necesita ejecutar Memcached en Windows? Es un asunto caro en un entorno de producción.

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

En un entorno de producción que ejecuta Memcached en Server 2003 o 2008, significaría que obtiene licencias para todas esas cajas. Linux le ofrecerá todos los beneficios de OSS. El 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. Tienes que prestar atención, especialmente cuando alguien como Dustin comenta.
Así que así es como puede ejecutar memcached en Windows. Descargue memcached para Windows desde Couchbase (anteriormente Northscale) .
Por lo general, si planea ejecutar Memcached en la misma máquina de producción, querrá iniciarlo en una memoria limitada, es decir, defina la memoria máxima que Memcached puede usar.

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

Aquí memcached se ejecuta con un uso máximo de 128 MB. No desea que Memcached ocupe toda la memoria de su servidor web.

En el momento en que decidió escalar Memcached, deberá considerar lo que dije antes. Comprima además sus valores en las combinaciones de valores clave. Los servidores web suelen consumir muy poco uso de CPU (2-3%) y la compresión aporta mucho valor a la red en comparación con el uso de CPU. Si está demasiado preocupado por la compresión normal, pruebe LZO

Cherian
fuente
2
Gracias por tu respuesta, esto es lo que busco.
Funky81
31
¿Cómo aumenta exponencialmente el TCO en Windows? El costo de la licencia aumenta linealmente con el número de máquinas. Pero cuando se toman en cuenta los costos de hardware, el espacio en rack y la electricidad, los contratos de soporte y los salarios de los operadores, el costo de la licencia de Windows es bastante insignificante, francamente.
Greg Beech
23
Solo para agregar una refutación al argumento de Cherian. Un factor determinante para querer alojar en Windows puede ser la experiencia en administradores de sistemas. Por ejemplo, las tiendas más pequeñas que no tienen los recursos para contratar a un administrador * nix solo para abrir un cuadro de memcached podrían beneficiarse enormemente del alojamiento en una plataforma en la que la empresa ya está bien versada (es decir, Windows).
Joel Martinez
2
Yo DV esta respuesta ya que realmente no aborda nada de lo que pidió el OP, sin embargo, dijo que esto era específicamente lo que estaba buscando.
Chris Marisic
11
Votó en contra porque no aborda la pregunta real. Si resolvió el problema del OP, ¿quizás debería reescribirse la pregunta?
sh-beta
21

Me sorprende que nadie de aquí haya mencionado a Redis : es uno de los almacenes de datos de valor clave más ricos en funciones y más rápidos (110,000 SET por segundo en una caja de Linux de nivel de entrada) con soporte de estructura de datos enriquecido para cadenas conjuntos, listas, conjuntos ordenados y hashes.

Aunque Windows no es una plataforma con soporte oficial, funciona perfectamente bajo Windows con todas las pruebas aprobadas. Tengo compilaciones 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 que se utilizan en la actualidad. Mantengo un rico cliente de código abierto C # Redis con soporte de API nativo para cualquier tipo de C # POCO, soporte de transacciones y administradores de clientes seguros para subprocesos que están listos para ser colocados en cualquier IOC en: https://github.com/ServiceStack/ServiceStack. Redis

mito
fuente
12

Como Velocity no existía en ese momento, utilicé un puerto memcached a Windows para la empresa para la que trabajo, Skiviez. Principalmente solo existe para proporcionar una caché centralizada 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 tiene un uso modesto (~ 18,500 visitas / día). El cliente que usé fue Enyim integrado como proveedor de caché para iBATIS.NET. Ese cliente parece funcionar bastante bien; Los clientes de Memcached tampoco son muy complicados para empezar.

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

(Aparte: desde entonces, negué la mayor parte de la necesidad del caché agregando ciertas Cache*columnas a las tablas clave en la base de datos que se actualizan mediante una tarea programada todas las noches. Esto terminó poniendo mucho menos esfuerzo en los recursos, desde el inicio golpeó en el tiempo de la CPU al consultar la base de datos sobre la tensión subsecuente en la disponibilidad de 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 en versión instantánea. Estoy seguro de que tiene muchas razones para usar una caché distribuida, pero siempre vale la pena dar un paso atrás y preguntarse si realmente la necesita o no).

Nicolás Piasecki
fuente
Velocity ahora es parte de AppFabric
Jon
7

No sé en qué proyecto está trabajando, pero le gustaría echar un vistazo al proyecto Microsoft Velocity de la página:

"Velocity" es una plataforma de caché de aplicaciones distribuida en memoria para desarrollar aplicaciones escalables de alto rendimiento. "Velocity" se puede utilizar para almacenar en caché cualquier objeto de Common Language Runtime (CLR) y proporciona acceso a través de API simples. Los aspectos clave de "Velocity" son el rendimiento, la escalabilidad y la disponibilidad de la caché distribuida.

He visto un par de demostraciones y parece que tiene una buena integración con .net framework.

El problema con las API del cliente es que aún debe tener una instancia de memcached ejecutándose en otra caja en algún lugar de manera preferible, como ha notado, usando la pila LAMP. El uso de la velocidad significa que seguirá funcionando en la misma pila y habrá una integración más estrecha en la plataforma .net.

Dicho esto, si desea usar la velocidad como caché para otras aplicaciones .net, es posible que tenga que escribir su propia API para exponer los datos de velocidad para su consumo.

lomaxx
fuente
Hasta donde yo sé, la velocidad aún está en desarrollo, por eso trato de buscar otra alternativa. Y eso es
Memcached
después de leer un rato, la instalación y el mantenimiento de la velocidad no son tan fáciles como memcached
Funky81
3
¿Estás usando LAMP Stack? ¿No te refieres a "usar Linux" ya que no necesitas Apache, MySQL o PHP para ejecutar Memcached?
GateKiller
6

Velocity es un poco más complicado de administrar, pero es mucho más poderoso que Memcached. No soy anti-memcached, en lo más mínimo, es genial. Pero en el futuro, los proyectos nuevos que se basan exclusivamente en .NET son una locura por no aprovechar Velocity, incluso en su estado actual inédito.

Silvas
fuente
6

Mira esto SharedCache . su código abierto, fácil de usar y muy confiable.

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

kay.one
fuente
3

El problema con las API del cliente es que aún debe tener una instancia de memcached ejecutándose en otra caja en algún lugar de manera preferible, como ha notado, utilizando la pila LAMP.

No es del todo cierto. La pila LAMP (Linux, Apache, MySQL, PHP) no es necesaria para ejecutar Memcached. Actualmente prefiero memcached sobre la velocidad hasta que la velocidad esté fuera de CTP. He jugado un poco con la velocidad, pero lo encontré demasiado difícil de manejar. Sigo todo eso de KISS, ya sabes ... mantenlo simple. Nada más simple que almacenar en caché ... Get (key) ... Put (key, value) ... Destroy (Key).


fuente
1

Sé que llego un poco tarde a la fiesta aquí 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 construido. Es extremadamente fácil de administrar.

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

Descargas de membase

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

bopapa_1979
fuente
0

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

Brent Matzelle
fuente