Memcached com Windows e .NET

83

Alguém já implementou o memcached para uso em produção no ambiente Windows? Como muitos blogs que li, não é recomendado executar memcached no Windows especialmente para uso de produção, por exemplo, executando memcached no windows .

E mais uma coisa, qual cliente memcached é bom para usar com c # e .net 3.5? Encontrei muitos alternativos, como Memcached Providers @ Codeplex , Beitmemcached e memcached provider @ Sourceforge

Funky81
fonte
6
Você está apontando para uma postagem de blog de 2008. O Memcached está se tornando bastante amigável no Windows ultimamente: northscale.com
Dustin
1
+1 para Dustin. Temos usado NorthScale e é bastante compatível com o Windows, com uma interface de usuário administrativa (web) agradável
ram
2
@Dustin e @ram - Dustin, aproveite seu +1, mas esta pergunta foi feita em 2008.
Justin,
3
Heh. Deve ser isso que o '08 está aí. Me desculpe por isso. :)
Dustin

Respostas:

49

Por que você precisa executar o memcached no Windows? É um assunto caro em um ambiente de produção.

Se seu código precisa ser executado em um ambiente Windows, obtenha um cliente Windows Memcached e converse com uma máquina baseada em memcached * nix.

Em um ambiente de produção executando memcached no Server 2003 ou 2008, isso significa que você obtém licenças para todas essas caixas. O Linux oferecerá a você todos os benefícios do OSS. O TCO aumentará linearmente com o memcached no Windows

Editar:

Já se passou cerca de 1,5 anos desde que escrevi esta resposta e muitas coisas mudaram desde então. Você tem que prestar atenção, especialmente quando alguém como Dustin comenta.
Então, aqui está como você pode obter o memcached no Windows em execução. Baixe o memcached para windows em Couchbase (anteriormente Northscale) .
Normalmente, se você planeja executar o memcached na mesma máquina de produção, deseja iniciá-lo com memória limitada, ou seja, defina o máximo de memória que o memcached pode usar.

c: \ Arquivos de programas \ memcached> memcached.exe -m 128.

Aqui, o memcached é executado com um uso máximo de 128 MB. Você não quer que o memcached ocupe toda a memória do seu servidor web.

No momento em que você decidiu dimensionar o memcached, você precisará considerar o que eu disse antes. Além disso, comprima seus valores nas combinações de valores-chave. Os servidores da Web normalmente consomem muito pouco uso da CPU (2-3%) e a compactação agrega muito valor à rede em comparação ao uso da CPU. Se você está muito preocupado com a compressão normal, tente LZO

Cherian
fonte
2
Obrigado pela sua resposta, é isso que procuro.
Funky81
31
Como o TCO aumenta exponencialmente no Windows? O custo de licenciamento aumenta linearmente com o número de máquinas. Mas quando você considera os custos de hardware, espaço em rack e eletricidade, contratos de suporte e salários de operadoras, o custo de licenciamento do Windows é bastante insignificante, francamente.
Greg Beech
23
Apenas para adicionar uma refutação ao argumento de Cherian. Um fator determinante em querer hospedar no Windows pode ser a experiência de administrador de sistemas. Por exemplo, lojas menores que não têm recursos para contratar um administrador * nix apenas para abrir uma caixa do memcached podem se beneficiar muito com a hospedagem em uma plataforma na qual a empresa já está bem familiarizada (por exemplo, Windows).
Joel Martinez
2
Gostaria de enviar esta resposta, pois ela realmente não aborda nada do que o OP perguntou, no entanto, ele disse que era exatamente isso que estava procurando.
Chris Marisic
11
Votos negados porque não abordam a questão real. Se resolveu o problema do OP, talvez a pergunta deva ser reescrita?
sh-beta de
21

Estou surpreso que ninguém aqui tenha mencionado o Redis - é um dos armazenamentos de dados de valor-chave mais rico em recursos e mais rápido (110.000 SETs por segundo em uma caixa Linux de nível básico) com suporte de estrutura de dados rica para strings, conjuntos, listas, conjuntos classificados e hashes.

Embora o Windows não seja uma plataforma oficialmente suportada, ele funciona perfeitamente no Windows com todos os testes passando. Eu tenho compilações do Windows (usando Cygwin) disponíveis aqui: https://github.com/ServiceStack/ServiceStack.Redis#redis-server-builds-for-windows

Ele também possui vínculos de cliente para quase todas as linguagens de programação em uso hoje. Eu mantenho um cliente C # Redis de código aberto rico com suporte nativo de API para qualquer tipo de C # POCO, suporte a transações e gerenciadores de cliente thread-safe que estão prontos para serem colocados em qualquer IOC em: https://github.com/ServiceStack/ServiceStack. Redis

mito
fonte
12

Como o Velocity não existia na época, usei uma porta memcached para Windows para a empresa para a qual trabalho, Skiviez. Ele existe principalmente para fornecer um cache centralizado para vários processos de trabalho na mesma máquina. Ele está funcionando bem há cerca de 18 meses em um site de comércio eletrônico que tem uso modesto (aproximadamente 18.500 acessos / dia). O cliente que usei foi o Enyim integrado como provedor de cache para iBATIS.NET. Esse cliente parece funcionar bem; Os clientes memcached também não são muito complicados para começar.

Se eu tivesse que fazer isso de novo, provavelmente olharia para o Velocity se estivesse comprometido em permanecer no Windows para minha solução de cache distribuída. Mas está funcionando agora, então não vou mexer nisso.

(À parte: desde então, neguei a maior parte da necessidade do cache adicionando certas Cache*colunas às tabelas-chave no banco de dados que são atualizadas por uma tarefa agendada todas as noites. Isso acabou colocando muito menos pressão sobre os recursos ao redor, desde o início atingido no tempo de CPU ao consultar o banco de dados sobre a pressão subsequencial na disponibilidade de memória, mantendo os resultados armazenados em cache no memcached. Também tornou muito mais explícito no código quando uma versão em cache dos dados está sendo acessada em comparação com um cálculo versão instantânea. Tenho certeza de que você tem muitos motivos para usar um cache distribuído, mas sempre vale a pena dar um passo para trás e questionar se você realmente precisa dele ou não!)

Nicholas Piasecki
fonte
Velocity agora faz parte do AppFabric
Jon,
7

não sei em que projeto você está trabalhando, mas talvez você queira dar uma olhada no projeto Microsoft Velocity da página:

"Velocity" é uma plataforma de cache de aplicativo distribuído na memória para o desenvolvimento de aplicativos escaláveis ​​e de alto desempenho. "Velocity" pode ser usado para armazenar em cache qualquer objeto common language runtime (CLR) e fornece acesso por meio de APIs simples. Os principais aspectos do "Velocity" são o desempenho do cache distribuído, a escalabilidade e a disponibilidade.

Eu vi alguns demos e parece que tem uma integração muito boa com o framework .net.

O problema com a API do cliente é que você ainda precisa ter uma instância do memcached em execução em outra caixa em algum lugar, de preferência como você observou, usando a pilha LAMP. Usar velocidade significa que você ainda estará executando na mesma pilha e que há uma integração mais estreita em toda a plataforma .net.

Dito isso, se você quiser usar a velocidade como um cache para outros aplicativos .net, poderá ter que escrever sua própria API para expor os dados de velocidade para consumo.

lomaxx
fonte
Pelo que eu sei, a velocidade ainda está em desenvolvimento, é por isso que tento buscar outra alternativa. E isso é memcached
Funky81
depois de ler um pouco, a instalação e a manutenção de velocidade não são fáceis como o memcached
Funky81
3
Usando a pilha LAMP? Você não quer dizer "usar Linux", já que não precisa do Apache, MySQL ou PHP para executar o memcached.
GateKiller
6

O Velocity é um pouco mais complexo para administrar, mas é muito, muito mais poderoso do que o memcached. Eu não sou anti-memcached, nem um pouco, é ótimo. Mas, no futuro, novos projetos que são puramente baseados em .NET são loucos para não aproveitar o Velocity, mesmo em seu estado atual não lançado.

Silvas
fonte
6

dê uma olhada em SharedCache . seu código-fonte aberto, fácil de usar e muito confiável.

sistema de armazenamento em cache de objetos de memória distribuída de alto desempenho, de natureza genérica, mas destinado a acelerar a web dinâmica e / ou aplicativos vencedores, aliviando a carga do banco de dados. Não se esqueça de nos visitar em http://www.sharedcache.com

kay.one
fonte
3

O problema com a API do cliente é que você ainda precisa ter uma instância do memcached em execução em outra caixa em algum lugar, de preferência como você observou, usando a pilha LAMP.

Não é verdade. A pilha LAMP (Linux, Apache, MySQL, PHP) não é necessária para executar o Memcached. Atualmente, prefiro memcached em vez de velocidade até que a velocidade esteja fora do CTP. Eu brinquei com a velocidade um pouco, mas achei muito difícil. Eu sigo toda essa coisa do KISS, você sabe ... mantenha as coisas simples. Nada mais simples do que armazenar em cache ... Get (key) ... Put (key, value) ... Destroy (Key).


fonte
1

Eu sei que estou um pouco atrasado para a festa aqui, e já existem toneladas de boas respostas.

Usamos o Membase no Windows Server com grande sucesso. É 100% compatível com Memcached, e tem um bom instalador GUI e um servidor de configuração web para construí-lo. É extremamente fácil de administrar.

Existem também outros recursos NoSQL incluídos, que estão fora do escopo deste tópico, mas vale a pena dar uma olhada. Eles têm uma licença gratuita para servidores de desenvolvimento, teste e produção (limitada).

Downloads do Membase

Essa mesma página tem um Windows Install para Memcached apenas, se você não quiser nenhum dos recursos extras do Membase.

bopapa_1979
fonte
0

Se você estiver interessado em executar um cliente memcached no Windows, existem dois servidores de código aberto adicionais que podem fazer o trabalho. Ambos implementam o protocolo de servidor memcached padrão e são escritos em Java para que sejam executados no Windows.

Brent Matzelle
fonte