ilegra Engineering Blog

Coherence

Em um dos nossos projetos aqui na ilegra, tivemos a experiência de implantação do Coherence.

No projeto, tínhamos um processo que podia demorar de alguns minutos até várias horas para terminar. O resultado do processamento poderia variar de alguns kilobytes até 800Mb. Melhorar a performance desse processo não era uma opção. O resultado desse processo era agregado a um resultado de pesquisa. Era aceitável a pesquisa demorar, mas reordenar os resultados da pesquisa ou aplicar qualquer filtro teria de ser rápido.

A solução escolhida foi usar um data grid para armazenar os resultados do processo em cache e conseguir acessar esse resultado em alguns milissegundos. Normalmente, utiliza-se um data grid quando é necessário mais memória, do que uma única máquina. Um data grid roda em cima de um cluster de máquinas e distribui os dados entre os servidores. A ideia é que qualquer nodo consiga saber onde achar qualquer informação no cluster. Costumamos usar aqui na ilegra, soluções open source, por tal motivo, inicialmente optamos pelo Terracota. Porém, tivemos algumas dificuldades em configurar para descartar as chaves menos usadas. Como o cliente tinha uma licença para usar Coherence, acabamos migrando para essa solução.

Abaixo listamos algumas estratégias de cache que testamos e a nossa visão sobre elas.

* Replicate Cache - Todos os nodos do cache possuirão os mesmos dados com um rápido acesso.
Ideal: Quando a necessidade é uma resposta rápida e existe memória suficiente para colocar em todos os nodos.
Observação: Quando o seu cache contiver muitos dados e o acesso aos dados não é constante, torna-se custoso manter todos seus nodos com todos os dados replicados.

* Distributed Cache - Todos seus nodos possuem uma área onde guardam logicamente qual dos nodos contém a informação requisitada.
Ideal: Tipologia ideal quando você possui muitas informações, mas ao mesmo tempo é custoso demais, em relação a memória, replicar esses dados em todos os nodos.
Observação: Quanto o maior número de nodos, menor o espaço em memória necessário. Isto acontece porque cada nodo além de saber logicamente onde encontrar a informação, possui uma área primária para guardar os dados e um espaço de backup usado para recuperar as informações, caso um nodo desconecte.

* Near Cache - Cada nodo além de possuir a informação de onde os dados estão, igual ao Distributed Cache, possui uma área local em memória configurável que guarda alguns dados previamente acessados.
Ideal: É considerado o mais balanceado dos três citados, principalmente, em relação ao custo benefício. Além de possuir informações locais já acessadas e de rápida resposta, não guarda fisicamente todos os dados.
Observação: Esse tipo de tipologia tem um ganho de performance, quando o número de nodos do cache são altos e possuem um espaço considerável para guardar no cache local algumas informações, evitando assim tráfego desnecessário de rede.

comments powered by Disqus