Oracle Coherence - O que acham?

Olá,

Vi umas palestras esses dias sobre o Coherence e o negócio parece ser FANTÁSTICO. No entanto ainda não tive nenhuma experiência com ele. Alguém aqui já teve? Alguém aqui está testando? O que acham do projeto? Existe algum OpenSource equivalente?

[]'s!

http://wiki.oracle.com/page/Oracle+Coherence

Já usei por 6 meses e foi longe de fantástico: tivemos alguns problemas que nem o suporte da Oracle deu jeito de resolver. Além disso, o suporte para distribuir processamento que precisávamos ainda era bem precário (não sei como está agora).

Hoje em dia usamos GigaSpaces que também não é perfeito, mas dá conta do recado.

Infelizmente não conheço nenhuma ferramenta open source a altura destas duas.

Mas que tipo de erros vocês enfrentaram? Algum que comprometia o estado da informação?

[]'s!

O Kenobi falava maravilhas dessa ferramenta…

E o Memcached? E o Terracota? Nunca usei nenhum dos dois…

[quote=AUser]Mas que tipo de erros vocês enfrentaram? Algum que comprometia o estado da informação?

[]'s![/quote]

Os principais problemas eram de configuração mesmo, já que a aplicação tinha vários módulos e o sistema teria que suportar deployment distintos. Tivemos casos de caches simplesmente “desaparecendo” dependendo da ordem de deployment, o que não seria nada excepcional, caso o suporte deles conseguissem identificar a causa. O problema eh que eles não conseguiam. No final das contas tivemos que experimentar quebrar a aplicação de várias formas até que uma desse certo. No final o estado da informação não foi comprometido, mas todos tiveram duvida se o investimento em Coherence valeu a pena.

[quote=Rubem Azenha]O Kenobi falava maravilhas dessa ferramenta…

E o Memcached? E o Terracota? Nunca usei nenhum dos dois…[/quote]

No meu caso a gente nem considerou estes produtos principalmente porque nossa intenção era distribuir não só dados (cache distribuído), mas processamento também. Na época Coherence estava incubando o CommandPattern deles para fazer isso, mas não sei se estas duas ferramentas já possuem algo do tipo.

Ter um cache distribuído é interessante para aplicações onde o gargalo é acesso/quantidade de dados. O problema é quando precisa escalar processamento também. No nosso caso acabamos optando por um data grid onde também pudéssemos jogar requisições de processamento para serem distribuída por múltiplos servidores.

Mas existe algum concorrente mesmo que pago? Alguém tem algum benchmark de desempenho que seja real?

[]'s!

GigaSpaces é o que o usamos num projeto aqui no momento.

Esse gigaspaces parece ser bem interessante também.

Mas e o memcached, alguém aqui tem relatos sobre bugs ou estabilidade dele? Acham que dá pra usar esse tipo de ferramenta em aplicações críticas? Dá pra confiar na estabilidade desse projeto mesmo sendo OpenSource?

Grato!

Até onde eu sei twitter usa memcached. Quanto a confiar, basta fazer seus testes e avaliar se ele atende suas necessidades.

Eu realizei uma POC com o Coherence agora no final de 2009.
O Oracle Coherence é algo extremamente flexível, o que pode, em alguns casos, se tornar complexo.

No mais foi bem prazeroso trabalhar com essa ferramenta. Os ganhos na performance ficaram na casa de 2.4 x mais carga.

Naturalmente, aplicações com dados diferentes podem tirar proveito do que o Coherence chama de POF (Portable Object Format) versionado. Isso deve garantir que aplicações com objetos diferentes convertam um modelo de cache para o modelo interno da aplicação, se este for o caso.

Uma questão que levantei com alguns conhecedores do Coherence foi evolução das classes dos objetos cacheados (que a princípio pode ser resolvida com POF) e a evolução dos CacheStores (classes conhecedoras do mecanismo para obtenção persistência dos dados em sua fonte original). Quando se trata de clusteres grandes com dezenas de máquinas, é preciso uma estratégia cautelosa para fazer a evolução do cluster e garantir a disponibilidade da aplicação.

Escrevi um posto sobre o Coherence http://codemountain.wordpress.com/2009/11/03/oracle-coherenc-alem-put-get/ falando um pouco mais sobre a ferramenta.

Em que aspectos o GigaSpace trouxe melhoras pra seu cenário?

No nosso caso o gargalo do sistema não é acesso a dados, e sim processamento. Ou seja, não adianta somente distribuir os dados, é preciso distribuir tarefas também.
A principal vantagem do GigaSpace é que cada nó do grid possui não apenas os dados, mas também unidades de processamento, com suporte a transação apropriado (coherence possui apenas last resource commit), o que permite executar nossas regras de negócio de maneira assíncrona e distribuída.

Entendo. Eu não quero parecer o advogado do Coherence, talvez do diabo.
Mas o Coherence suporta processamente in loco, ou seja, o processamento é emitido e executado no local (nó do cluster) em que a entrada reside. A conseqüência é latência mínima e altíssima capacidade de processar grandes volumes.

As transações podem ocorrer de diversas maneiras, inclusive com suporta do container. Eu acredito que você tenha ensaiado as diversas opções de Entry Processor. Veja aqui.

Mas independente de qualquer aspecto do Coherence, o importante é que vocês encontraram a solução adequada ao cenário. Devo passar a usar o GigaSpace em breve, mas continuo sendo um fã do Oracle Coherence por ser flexível e objetivo. Valeu pelas msg trocadas :slight_smile:

Tive que mudar uma aplicação do GAE (Google App Engine) para o Gigaspaces. Começamos obviamente rearquitetando as coisas.
Um ítem que precisamos é o que o Coherence chama de Entry Processors. Uma espécie de command objetc que atua diretamente no dado dentro do cluster.

Alguém sabe se o Gigaspaces suporta? Estou lendo a documentação e vi as Distributed Tasks mas não são a mesma coisa.