Pergunta

Estou investigando uma solução livre, alta disponíveis e de alto desempenho para armazenamento em cache ou armazenar dados de sessão .net (para um site de alto tráfego). Eu não quero usar um db (db é o gargalo no aumento de tráfego).

Há algumas lojas de chave / valor, mas tanto quanto eu sei que eles não suportam objetos .NET. E lá está alguma distribuídos ou replicados cache soluções que suporta alta disponibilidade.

Mas, qual é o melhor caminho para os dados da sessão loja (melhor se ele é executado em mono)?

EDIT: Para alta disponibilidade, eu tenho que dados da sessão do usuário replicar para mais de um máquinas. Eu posso escrever um serializador se for necessário para alcançar o melhor método. sessões de usuário contém objetos padrão necessárias para um site de e-commerce.

Saudações, Sirmak

Foi útil?

Solução

Bem, você pode usar o estado da sessão do servidor que é executado como um serviço do Windows, mas, a fim de fazer esse trabalho em um cenário de farm da Web que você precisará ter um dos servidores web executam o serviço Estado de sessão e os outros servidores web coordenará com esse servidor web único. Isto, obviamente, é um problema se o seu servidor web vai para baixo que está executando o serviço.

Outra opção seria a utilização memcachd que é uma distribuídos no servidor de estado de sessão de memória. Este é gratuito e já existe um provedor para .NET para este quadro. Ele é bastante maduro e tem sido em torno de um tempo.

Se você tem dinheiro para gastar, então servidor Scale Out pode ser uma opção. Foi-me dito, porém, que em sites de escala realmente grande que a escala fora necessidades tecnológicas a serem reciclados ao longo do tempo.

Chegando ao redor da curva da Microsoft é Velocity, que é o .NET equivilant ao memcached. Isto ainda não foi lançado, e não é uma tecnologia madura.

Você terá que escolher a solução que se adapta às suas exigências técnicas e financeiras.

Outras dicas

Se você está falando livre, então MySQL é capaz de Movimentação tráfego de alto volume (no hardware certo, obviamente)

Bem, primeiro você precisa para determinar o que você está armazenando na sessão. Há algumas coisas que simplesmente não pode ser serializado em tudo. Você pode, no entanto, implementar as suas próprias rotinas de serialização de objetos relevantes, e armazená-los em uma forma que você fazer as pazes. Por exemplo, você pode internamente a um BinarySerialisation, em seguida, escrever o objeto como um base64 codificado string em uma ferramenta de caching (memcached ou qualquer outro) e recuperá-lo.

Mas também, que tipo de escalabilidade que você está indo para aqui? Você está trocando usuários entre servidores por solicitação? Se assim for, você vai precisar de uma central, ou pelo menos espelhamento, sistema de cache, pelo menos.

Se você vai estar mantendo um usuário no mesmo servidor, mas pode ter muitos, então ele realmente não importa, você pode usar um processo externo na mesma máquina para cache.

Eu acho que você precisa fornecer um pouco mais informações. Eu não estou familiarizado com o funcionamento de coisas em mono, (então eu apenas recomendar o serviço de estado asp.net), mas meu palpite é um terceiro processo de cache partido, como memcached, pode ser bom.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top