Le DJ qui voulait être performant

Jojo Beat et Jojo EnMousse, les deux DJs qui souhaitent mettre en place une plate-forme de partage de musique entre les différents DJs du monde n'arrivent pas à se mettre d'accord sur comment configurer leur cluster.

  • Jojo Beat est persuadé qu'il va y avoir énormément de monde qui va utiliser cette plate-forme, et pense qu'il serait bon d'avoir un système robuste face aux pannes, et qui puisse être le plus cohérent possible, quitte à perdre un peu de performance.

  • Jojo EnMousse lui par contre pense que l'équipement qu'ils achètent est le plus haut de gamme, qu'il ne tombera jamais en panne, et que ça ne sert à rien de perdre de la performance. Pour lui, autant ne pas répliquer les données, cela ne sert à rien.

Ainsi, n'arrivant pas à se mettre d'accord, les deux essaient de mettre en place les solutions, afin de montrer à l'autre qu'il a tort.

Maintenant, essayons d'implémenter la solution de Jojo EnMousse

Question

Créez, dans le même Cluster, un KEYSPACE, qui aura cette fois-ci un Replication Factor de 1. Chaque donnée ne sera donc présente qu'une seule fois au sein du Cluster. Ce keyspace se nommera ksJojoEM.

Créez la même table remix dans ce KEYSPACE.

Insérez une ligne au choix.

Solution

1
ccm node1 cqlsh
2
create keyspace ksJojoEM WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':1};
3
use ksJojoEM;
4
create table remix (id int, nom text, dj text, PRIMARY KEY(id));
5
insert into remix(id, nom, dj) values (1, 'remix2', 'Jojo EnMousse');

Question

Trouvez dans quel nœud se trouve la ligne que l'on vient d'insérer. Stoppez ce nœud et connectez vous en CQLSH à un autre nœud.

Indice

Il faut récupérer le token de la ligne pour savoir dans quel nœud est stockée la ligne.

il faut quitter la console CQLSH avec la commande quit.

Utilisez nodetool.

Solution

1
ccm node1 nodetool getendpoints ksjojoem remix 1
2
ccm [noeud_récupéré] stop
3
ccm [autre_noeud] cqlsh

Question

Essayez de récupérer la ligne inséré précédemment. Que se passe-t-il ? Pourquoi ?

Solution

1
use ksjojoem;
2
select * from remix where id=1;

La récupération ne fonctionne pas. En effet, comme la ligne n'a été copiée que dans un nœud, et que ce nœud est tombé en panne, alors il est impossible de récupérer la donnée.

Conclusion : le système n'est pas du tout robuste aux pannes.