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/
Nenhum comentário:
Postar um comentário