Qual é a melhor biblioteca para Java para grid / cluster de permitir a sua aplicação? [fechadas]

StackOverflow https://stackoverflow.com/questions/383920

Pergunta

Esta é a capacidade de executar o aplicativo em um cluster de servidores com a intenção de distribuir a carga e também fornecer redundância adicional.

Eu vi uma apresentação para GridGain e eu estava muito impressionado com ele.

sabe de algum outro?

Foi útil?

Solução

Existem vários:

Agora eu não usei tudo isso, mas eu usei ou investigado a maioria deles.

GridGain e GigaSpaces são mais centrada em torno grade computação do que caching e (IMHO) mais adequado para grades de computação do que grades de dados (ver esta explicação de computação vs dados grades ). Acho GigaSpaces ser uma tecnologia muito interessante e tem várias opções de licenciamento, incluindo uma versão gratuita e uma versão completa livre para startups.

Coerência e Terracotta tentar caches tratar como mapas , que é uma abstração bastante natural. Eu usei Coerência um monte e é um produto de excelente de alto desempenho, mas não é barato. Terracotta estou menos familiarizado. A documentação para Coerência I encontrar um pouco falta às vezes, mas é realmente um poderoso produto.

OSCache tenho usado principalmente como um meio de reduzir o uso de memória e fragmentação em aplicações Java Web, pois tem uma tag JSP bastante arrumado. Se você já olhou para JSPs compilados, você verá que eles fazem um monte de concatenations String. Esta tag permite armazenar em cache efetivamente os resultados de um segmento de código JSP e HTML em um único String, que pode extremamente melhorar o desempenho em alguns casos.

EHCache é uma solução de cache fácil que eu também usado em aplicações Web. Nunca como um cache distribuído embora, mas ele pode fazer isso. I tendem a vê-lo como uma solução rápida e suja, mas isso é talvez o meu viés.

memcached é particularmente prevelent no mundo do PHP (e usado por sites como o Facebook). É uma solução muito leve e fácil e tem a vantagem de que ele não é executado no mesmo processo e você terá, sem dúvida, as melhores opções de interoperabilidade com outras pilhas de tecnologia, se isso é importante para você.

Outras dicas

Você pode querer verificar para fora Hazelcast também. Hazelcast é uma transacional de código aberto, distribuída implementação / particionado de fila, tópico, mapa, conjunto, lista, bloqueio e executor serviço. É super fácil de trabalhar; basta adicionar hazelcast.jar em seu classpath e iniciar a codificação. Quase nenhuma configuração é necessária.

Se você estiver interessado em executar o seu Runnable, tarefas resgatáveis ??em uma forma distribuída, então confira distribuída documentação Executor Serviço a http://code.google.com/docreader/#p=hazelcast

Hazelcast é lançado sob a licença Apache e suporte classe empresarial também está disponível.

Você considerou Infinispan ? É uma plataforma aberta grade de dados de origem, a partir JBoss.org. Para mais detalhes, eu recomendo que você leia este (old) post anunciar o projeto, juntamente com posts mais interessantes de nota, incluindo um sobre usando Infinispan com Hibernate e como autônomo de cache . Ainda mais recentemente, em Vermelha de Hat Enterprise Data Grid . Há uma rápida "introdução" guiar , e uma DZone refcard também, mesmo um vídeo do YouTube :)

Eu acho que @ resumo das cletus é muito bom. Eu queria mencionar que Terracotta fornece muito mais do que apenas um cache distribuído na forma de um mapa. Ele agrupa heap Java e primitivos de sincronização, transformando um programa Java simultânea em um programa Java distribuído. Você pode fazer o cache com ele (incluindo o uso de versões distribuídos de libs do cache de código aberto) ou um monte de outras coisas.

Para a distribuição do trabalho, existem algumas libs extras escritos em cima de Terracota, em particular os tim-pipes (para mensagens) e tim-masterworker (para distribuição estilo Master-Trabalhador) são grandes abstrações em cima do Terracotta. Esta biblioteca é no Terracotta Forge:

Esta página recentemente adicionado pode adicionar um pouco de informação adicional em comparação com algumas outras tecnologias de dados possíveis:

JPPF também é bom.

Se você quiser ir um pouco de nível inferior, há JGroups , que fornece-lhe com o básico de agrupamento processos Java.

E também verificar ProActive

Outro que você pode adicionar à lista é Appistry CloudIQ . É um ambiente de computação distribuída. Ele está disponível como um download gratuito até 5 máquinas. Ele inclui a distribuição de carga, bem como automático failover de trabalho no caso de uma falha de hardware, entre outras funcionalidades.

Para a computação em grade, você poderia também considerar Ice Grade ou DataSynapse GridServer . Estes dois fornecer mecanismos muito eficazes para a distribuição de tarefas e fornecer failover e redundância.

Eu acho que sua pergunta tem sido interpretado de maneiras diferentes, você perguntar sobre uma biblioteca que você pode usar para "aglomerado permitir" a sua aplicação.

Enquanto alguns dos libs nomeados acima pode ajudar a proporcionar a funcionalidade do cluster específico, tal como cache distribuído, a forma mais convencional de permitir a gestão de carga de trabalho é através do uso de um recipiente J2EE.

Através da criação de uma instância recipiente cluster isso permite-lhe utilizar HA recursos e gerenciamento de carga de trabalho, o agrupamento é quase transparente no nível do aplicativo. Digo quase, porque ao escrever aplicações que vão ser agrupados você tem que ter cuidado como você gerenciar o estado, por exemplo, se implementado algum tipo de cache de que você precisa para replicar o estado do cache em cada máquina.

Um bom começando lugar seria baixar glassfish e tentar configurar uma instância do GlassFish em cluster.

Espero que ajude.

Karl

Além disso, verifique Fura

Uma resposta muito tarde - mas isso depende, em parte, a forma como o aplicativo está configurado. Você pode querer executar um arquivo executável remotamente em vez de usar uma das abordagens acima.

Desculpas para a falta de ligações - mas até meus representantes se eu não posso postar mais de um. Produtos em itálico deve ser fácil para o Google.

Se você quiser executar um arquivo executável em uma busca paramétrica - dizer que você quer girar o mesmo executável com variedade de opções para cada instância -, então uma abordagem lote tradicional funciona bem. Esta é uma abordagem muito tradicional de alta performance de computação que ainda é largamente utilizado - infra-estruturas adequadas para lidar com isso em escala empresarial são Platform LSF , DataSynapse GridServer , PBS ou à medida que amadurece Windows HPC Server . Você também pode querer dar uma olhada em produtos de código aberto, como Globus e Condor . Dependendo de quão grande é o seu aplicativo é, você também pode olhar para gLite , que é usado para projetos científicos escala muito grandes, como o LHC.

Os benefícios abordagem trad HPC de ter o seu código do aplicativo isolado dos processos que compõem sua infra-estrutura de computação, mas pode demorar um acerto de desempenho, enquanto outros podem mostrar mais rápida taxa de transferência, mas ser propenso a vazamentos de memória e outros problemas para os sistemas de longo tempo de atividade.

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