Novo Easy-Cassadran 1.1.0: Unindo com o Google Guice

      Lançada a mais nova versão do Easy-Cassandra, essa nova versão trouxe novidade no gerenciamento de muitos nós. O uso de muito nós é interessante para o Cassandra já que evita gargalos, garante a tolerância a falhas, elasticidade além do fato. Um grande número de nós faz com que o Cassandra distribua as requisições salientando que esse tipo de banco possui uma arquitetura distribuída, ou seja, vale a pena utilizar um grande número de nós.
       Tão logo se tenha múltiplos nós do Cassandra o próximo passo é estar dividindo as tarefas entre os mesmos, não adianta se possuir dez nós, por exemplo, se todas as requisições vão sempre para um. Feito isso, o banco tratará todo resto (replicar informação entre os nós, ler e escrever a partir do nível de consistência, etc.). A estratégia utilizada no Easy para aproveitar o máximo dos múltiplos nós, é fazer com que cada requisição use um cliente diferente, para isso ele terá duas formas:

  • Seqüencial: Cada nó recebe um número de ordem crescente que vai de 0 até N-1, em que N é o número instâncias do Cassandra, feito essa numeração, para cada solicitação ao Cassandra ( atualizar, criar, deletar) é usado um cliente diferente seguindo em ordem crescente, por exemplo: Primeira requisição cliente 0                                                                                                 Segunda requisição cliente 1                                                                                                       Uma vez acabado o número de nós, essa ordem recomeça a partir do cliente 0. 

  • Randômico: De forma semelhante ao seqüencial, é dado um número para cada cliente onde começa de 0 até n-1, após essa numeração para cada requisição é criado um número aleatório que representa uma instância do Cassandra.   

       Para usar uma das duas estratégias no ORM é bastante simples: O primeiro passo é criar instâncias do Cassandra Adicionar esses nós no Easy-Cassandra Criar uma das duas Estratégias informando o nome do keyspace, caso não existe o keyspace será criado. Para demonstrar esse novo recurso será usado um simples exemplo: O seu objetivo será apenas recolher uma resposta de qualquer usuário para a seguinte pergunta: “O que você acha do Cassandra”. Para fazer esse exemplo utilizaremos o tomcat como servidor, jsf na visão e o Google Guice como injeção de dependência. Como o objetivo é estar apenas armazenando o usuário e sua pergunta, modelando o objeto a ser salvo ficará do seguinte modo:

  
@Entity
public class Post implements Serializable;
@Id
private String nickName;

@Column
private String text;

     Estaremos usando os qualificadores do Google Guice, a idéia é que a partir da anotação seja definido o tipo de persistência seqüencial e randômico. Conforme mostra a tabela 2.

  
@BindingAnnotation @Target({ FIELD, PARAMETER, METHOD }) @Retention(RUNTIME)
public @interface Random {}
@BindingAnnotation @Target({ FIELD, PARAMETER, METHOD }) @Retention(RUNTIME)
public @interface Sequencial {}

  

@Inject @Sequencial
private ServiceClient sequencialClient;

@Inject @Random
private ServiceClient randomClient;

      A criação dos dois tipos é bastante semelhante, a primeiro é adicionando os host, feito isso já se pode chamar qualquer uma das formas de estratégia de persistência conforme mostra a tabela 3.

  
EasyCassandraManager.getPersistence("javabahia", "localhost", 9160);
EasyCassandraManager.getPersistence("javabahia", "node2", 9160);
EasyCassandraManager.getPersistence("javabahia", "node3", 9160);
EasyCassandraManager.addFamilyObject(Post.class);

     O código desenvolvido permite duas opções de inserir sua resposta: uma seqüencial e uma randômica e tão logo é inserido a informação é recuperada e lançada em forma de lista das duas formas.

      Nesse pequeno post foram apresentadas duas estratégias para a persistência com multi-nodes usando o Easy-Cassandra. A idéia principal foi demonstrar a importância de compartilhar os trabalhos com as outras instâncias, já que não adianta ter muitos nós e todas as requisições ficarem apenas em uma, gerando todo o gargalo. Além de demonstrar um pouco do recurso do Google Guice e sua integração com o framework.

Exemplo: http://softwarelivre.org/otagonsan/codigofonte/guicecassandra.zip
Easy-Cassandra: https://github.com/otaviojava/Easy-Cassandra
Google Guice: http://code.google.com/p/google-guice/

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s