Quão bem o nginx e o memcached funcionam juntos?


14

Temos um aplicativo Web baseado em Java EE em execução em um cluster de servidores de aplicativos Glassfish . O tráfego de entrada será principalmente solicitações RESTful para representações baseadas em XML de nossos recursos de aplicativos, mas talvez 5% do tráfego seja para representações baseadas em JSON ou XHTML / CSS.

Agora estamos investigando soluções de balanceamento de carga para distribuir o tráfego de entrada entre as instâncias do Glassfish no cluster. Também estamos examinando como descarregar o cluster usando o memcached, um mapa de hash distribuído na memória cujas chaves seriam os nomes dos recursos REST (por exemplo, "/ user / bob", "/ group / jazzlovers") e cujos valores são as representações XML correspondentes.

Uma abordagem que parece promissora é matar os dois pássaros com uma cajadada e usar o servidor HTTP nginx leve e rápido / proxy reverso. O Nginx lidaria com cada solicitação recebida, primeiro procurando seu URI no memcached para verificar se já existe uma representação XML não expirada. Caso contrário, o nginx envia a solicitação para uma das instâncias do Glassfish. O módulo nginx memcached é descrito neste pequeno resumo .

Qual é a sua impressão geral com o nginx e o memcached usados ​​dessa maneira, quão feliz você está com eles? Quais recursos você achou mais útil para aprender sobre eles? Se você as experimentou e elas não atendiam aos seus propósitos, por que não e o que você usou?

Nota: aqui está uma pergunta relacionada . Antes que eu soubesse sobre o ServerFault, perguntei isso no StackOverflow .

Edit: Todas as respostas aqui até agora foram bastante úteis, embora não houvesse experiência direta. Essa resposta acabou aparecendo no StackOverflow e foi bastante otimista na configuração do nginx / memcached.


Legal, vai fazer. Nós provavelmente vamos experimentar com ele no próximo mês ou assim
Jim Ferrans

Respostas:


6

Você realmente deve usar um servidor de cache na frente de seus servidores web. Eu recomendo o Varnish-cache. Nós o usamos no trabalho com o maior e mais movimentado site da Escandinávia. Substituímos 13 caixas de lulas altamente carregadas por uma caixa de verniz e uma de reposição.

Comparei um aplicativo simples no meu site privado e passou de 9 solicitações por segundo para mais de 2000.

Você decide por quanto tempo as coisas ficam na memória, pode fazer até o final dos tempos e depois enviar uma solicitação de limpeza http ao servidor de cache quando os dados forem alterados.



4

Minha opinião pessoal, por experiência própria, é que, se você estiver usando um balanceador de carga, deseja limitar essa caixa inteiramente às funções de balanceamento de carga. O fato de o seu balanceador de carga exibir conteúdo, mesmo de um cache, diminui a funcionalidade de balanceamento de carga em situações de alta carga (mais conexões permanecem ativas por mais tempo, reduzindo a capacidade e a taxa de transferência gerais).

Aconselho que o próprio aplicativo faça a pesquisa e sirva o conteúdo em cache e permita que o balanceador de carga faça seu trabalho. Dito isso, o nginx não é perfeito no que diz respeito ao balanceamento de carga - ele oferece apenas um algoritmo round-robin muito básico. Eu recomendaria haproxy. Se você precisa de serviços de descriptografia SSL na frente, o nginx funciona bem na frente do haproxy, na minha experiência.


1

Eu acho que você chegará a um beco sem saída, caso precise de coisas como balanceamento de carga, alta disponibilidade e etc.

Além disso, considere essa situação: quando a página de autenticação do usuário tiver uma aparência diferente, com recursos adicionais disponíveis e individualizados para cada usuário. Os URLs são os mesmos para conveniência de vinculação e etc. Por exemplo, o site em que o usuário autenticado não precisa digitar seu nome / captcha para comentários ou o site exibe seu nome de usuário no topo, quando você está logado (como falha do servidor). Nesses casos, o nginx será inutilizável, porque você não pode distinguir usuário autenticado e não autenticado.

Se você não precisa de SSL, sugiro que você execute o Varnish. Ele foi projetado como acelerador HTTP, não como servidor da web ou proxy. Se você precisar de SSL, execute nginx na parte superior como acelerador SSL e envernize como acelerador HTTP simples, porque o Varnish não pode lidar com SSL.

Acho que a escolha do servidor de armazenamento em cache é específica do aplicativo e você não pode fazer comentários generalizados sobre isso sem uma análise aprofundada do aplicativo.


1

minha escolha é haproxy. Proxy reverso muito pequeno e muito rápido, mas não é proxy de cache! Eu uso no meu sistema de cache "Squid Web Proxy"

CACHE /squid/ -> Load-balancing /Haproxy/ -> WEB I /lighttpd/
                                          -> WEB II /lighttpd/
                                          -> WEB III /lighttpd/

Este trabalho perfeito para o meu sistema web

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.