dimanche 29 mars 2015

Quelques pointeurs NoSQL

Post rapide pour présenter quelques urls

Liste assez complète de base NoSQL et plus
http://nosql-database.org/

Ce site en lien avec les  NoSql matters, conférences dédiées au NoSQL dont une s'est déroulé le 26 et 27 mars dernier à Paris, pour vous faire une idée du programme

Une série d'article sur le NoSQL : de l'histoire à quels critères de sélection :

Pour finir un blog très bien fait avec un article présentant les familles NoSQL
https://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/

NoSQL ok, mais OLAP ?


     Le NoSQL a le vent en poupe. Les bases de ces frameworks développés au début des années 2000 (2000, 2010) par les géants du web (Google, Facebook, Amazon, ...) pour répondre à leurs besoins croissants de gestion de volume de données en constante augmentation avec des temps de réponse de l'ordre de l'instantané tout en assurant la disponibilité via redondance de l'information.

     L'idée était de disposer de datastorages réactifs en abandonnant un certain nombre de contraintes (voir CAP théorème, encore appelé théorème de Brewer), ce que ne permettaient pas les bases de données classiques (Oracle, Sysbase and Co)

     Aujourd'hui ces frameworks ou leurs principes sont repris par les communautés de développeurs et font régulièrement l'objet de présentations, article blog, ...

     Au milieu de tout ce mouvement NoSQL, un autre principe qui fait moins l'actualité mais reste très présent dans la catégorie datastorage : OLAP.

     Oracle, SAP, Microsoft, ... ont dans leurs gammes de produits entreprise tous une brique OLAP, restant un produit. Les communautés de développeurs ne se sont pas encore emparé du sujet mais on l’aperçoit de temps en temps.

OLAP c'est quoi


     L'acronyme OLAP signifie OnLine Analytical Processing.

     On le défini souvent par opposition à l'OLTP (Online Transaction Processing). Il se veut un outil permettant facilement d'analyser un important volume de données. Cela tombe bien on est en période BigData.

Définition wikipédia :

     La encore ce n'est pas quelque chose de récent, si l'on creuse un peu l'histoire on tombera sur Edgar F. Codd et les 12 règles de Codd (1993) :

     Puis un langage de Microsoft en 1997 le MultiDimensional eXpressions permettant de requeter un produit OLAP, c'est devenu un standard dans le monde OLAP.

Olap et le monde Java


     Il y a eu un premier essai qui n'a pas abouti qui s'est traduit par une JSR commencé en 2000 et abandonnée officiellement en 2012 n'ayant pas évolué depuis 2004 : JOLAP, JSR 69
https://jcp.org/en/jsr/detail?id=69

     Quelques uns ont persisté et Java possède une librairie (toujours active) de querying : Olap4j

     En lien avec le projet open source Mondrian qui lui propose la partie serveur OLAP

Olap dans la tendance actuelle


     Même si on le rencontre peu, un des intérêts d'Olap arrive là où les framework NoSQL ont quelques manques : l'aspect agrégation des données et représentation permettant d'en tirer du sens (le fameux analytics).Une combinaison que l'on peut imaginer est un datastorage massif avec redondance en NoSQL sur lequel s'appuie un frontal intermédiaire type Olap.

Deux projets adoptant cette approche :

EBay avec Kylin (Olap) s'appuyant sur du Haddop :

Un projet GitHub Doradus appuyant une couche Olap sur une couche Cassandra :
https://github.com/dell-oss/Doradus/wiki/Architecture%20%28OLAP%29

     Adobe s'est également intéressé au Olap en s'appuyant sur du HBase (datastorage derrière Hadoop)

dimanche 15 mars 2015

Quelques mots sur Cassandra

Ayant récemment un peu creusé la technologie et sans faire redite avec un post précédent quelques points concernant Cassandra.

Cassandra


     Dans la mouvance NoSQL (lire dans le texte NotOnlySQL), structure de stockage de données développée en Java entrant dans la catégorie hybride clé/valeur clé/colonne. Cassandra prend place dans le triangle du CAP théorème (autrement nommé théorème de Brewer) proposant à l'utilisateur de régler le niveau de réplication et le niveau de cohérence via paramètres et ce fonction de ses besoins.

Le home du projet : http://cassandra.apache.org/

     Vous les trouverez régulièrement pas très loin : Datastax. Société qui propose une surcouche à Cassandra, orienté "entreprise". Ils possèdent une forte expertise sur Cassandra, comptant dans leur rang un certain nombre de committers Cassandra. Leur surcouche permet (entre autres) de faire le lien entre le storage Cassandra et de l'analytics comme Spark ou encore recherche/indexation avec Solr. Ils viennent récemment de s'attaquer aux graph db en faisant l'acquisition de Aurelius (TitanDb).

Les communiqués de presse :
Côté Datastax : http://www.datastax.com/2015/02/datastax-acquires-aurelius-the-experts-behind-titandb
Côté Aurelius : http://thinkaurelius.com/2015/02/03/aurelius-acquired-by-datastax/
Home de TitanDB : http://thinkaurelius.github.io/titan/

Le home de Datastax : http://www.datastax.com/what-we-offer/products-services/datastax-enterprise

Les outils pour travailler avec Cassandra


     Les outils qui vont bien (très orienté DataStax, il doit exister d'autres) :

CCM (Cassandra Cluster Manager), outil de développement réalisé par Sylvain Lebresne (DataStax). Non recommandé en production, il permet en local de gérer un cluster avec plusieurs noeuds Cassandra. Très bien pour se faire la main et commencer à jouer avec la technologie.

Home CCM : https://github.com/pcmanus/ccm
How to CCM : http://planetcassandra.org/getting-started-with-ccm-cassandra-cluster-manager/
Article : http://www.datastax.com/dev/blog/ccm-a-development-tool-for-creating-local-cassandra-clusters

DevCenter, outil de Datastax qui permet de bénéficier d'une GUI pour s'interfacer avec un Cassandra déployé. Permet de requêter, voir les traces d'exécution, visualiser les tables de vos namespaces et les tables systèmes.
DevCenter : http://www.datastax.com/what-we-offer/products-services/devcenter

OpsCenter
, outils de DataStax également qui nous fait entrer plus du côté administrateur pour visualiser nos clusters, noeuds Cassandra.
OpsCenter : http://www.datastax.com/what-we-offer/products-services/datastax-opscenter

     Enfin pour coder son client Java qui vient requêter le datastore Cassandra au travers un noeud qui devient coordinateur : le Java driver Datastax
Home Java Driver (avec la dependency Maven qui va bien) : https://github.com/datastax/java-driver

     Cassandra étant en Java bien entendu toutes les JConsole, VisualVM & co sont les bienvenues pour suivre ce qu'il se passe.

Un peu d'histoire


     Cassandra trouve à sa source deux projets le précédent BigTable de Google (2006) auquel Cassandra empruntera le modèle de données structuré ColumnFamily. Et Dynamo d'Amazon (2007) auquel Cassandra reprend le partitionning et le système de réplication.

Ces deux projets ont fait l'objet de publication technique :

     Cassandra est développé au sein de Facebook par Avinash Lakshman (un des créateur de Dynamo d'Amazon) et Prashant Malik (ingénieur Facebook). Il sera open sourcé par Facebook en 2008.

A propos du key value store vs column family : http://www.edwardcapriolo.com/roller/edwardcapriolo/entry/on_key_value_vs_column

Quelques mots clé (pour approfondir via google & co)


     Généralités sur l'architecture : http://wiki.apache.org/cassandra/ArchitectureOverview

     OnHeap, offHeap : Cassandra (en java donc dans une jvm) utilise du off heap pour stocker un certain nombre d'information : http://noflex.org/cassandra-component-on-heap-or-off-heap/

     Composants techniques au cœur de Cassandra : MemTable et SSTable

     A connaitre pour bien comprendre le fonctionnement : Read Path et Write Path
http://fr.slideshare.net/joshmckenzie/cassandra-21-read-write-path

     Requête sur une base Cassandra :
CQL : https://cassandra.apache.org/doc/cql3/CQL.html
Avant le CQL, le shell (qui viendrait à disparaitre) : http://wiki.apache.org/cassandra/CassandraCli
Enfin quelques drivers permettant d'attaquer Cassandra dans différents langages : http://planetcassandra.org/client-drivers-tools/

Quelques Algo derrière cette belle machine


     Au coeur du principe distribué de Cassandra et ce qui en fait un système sans SPOF (Single Point Of Failure) : le Gossip protocole

     Filtre de Bloom

     Merkle tree, pour vérifier la consistance et permettre la remonté rapide de nœud :

     Paxos pour les transactions dites légère

Dans la vie réelle


     Pour finir quelques utilisateurs de Cassandra en production sans gâcher la surprise quelques noms connus : CERN, eBay, GitHub, Instagram, Intuit, Netflix, Reddit, The Weather Channel, ...

Pour plus de détails :
Utilisateurs de Cassandra : http://planetcassandra.org/companies/
L'exemple de Netflix (presentation 2012) : http://fr.slideshare.net/acunu/cassandra-eu-2012-netflixs-cassandra-architecture-and-open-source-efforts
Blog technique netflix : http://techblog.netflix.com/search/label/Cassandra

Conclusion


     En guise de conclusion, trois points qui me semblent importants à réfléchir pour passer un projet sur Cassandra :
  • J'ai mon storage de donnée mais comment je mets en place mon moteur d'agrégation (Datastax avec sa surcouche propose quelques solutions).
  • Le schéma de mon stockage dans Cassandra est très fortement impacté par comment je vais requêter, il faut avoir une idée de ce que l'on veut avant de partir (contrairement à des datastorage plus souple comme MongoDB, orienté document).
  • Une fois dedans, quelles portes de sorties. Par exemple comment je back up sur un autre support mes données qui sont dans les noeuds Cassandra ... un réponse peut être pas besoin, la solution comme cela me va mais à ce moment attention aux migrations.

     Quelques éléments de réflexion chez les géants du web :

dimanche 2 novembre 2014

Un jour, un storage : Redis

     Une autre structure de stockage de données in memory dont on entend régulièrement parler : Redis.

     Je l'ai rencontré lors d'une conférence au Devoxx Paris 2014 suite à une présentation "Tools in action" de Nicolas Martignole "Redis, une base Not Only NoSQL" :

Redis c'est quoi


     Redis signifie "REmote DIctionary Server" avec un jeu de mot sur Redistribute (http://redis.io/topics/faq)

     Si l'on retient les classifications actuelles, on pourrait la qualifier de base NoSQL clé/valeur. C'est une base in memory qui communique en TCP. Elle est écrite en C ANSI et tourne sur la majeur partie des systèmes dit POSIX, Linux est recommandé (http://redis.io/topics/introduction) mais il existe un portage windows https://github.com/MSOpenTech/redis.

     Afin de pouvoir requêter cette base de nombreux de clients ont été développés dans différents langages (Java, C, C#, Go Perl, Haskell, Lua, ...).
     Les principaux clients Java :

     Redis, construit sur la base d'un manifeste, lettre d'intention sur ce qu'il doit être, a une approche qui colle aux structures de données manipulées. Pour preuve son API et la documentation qui donne le Time Complexity (en notation O) des différents points d'API :

     Quand aux utilisations possibles : cache dynamique, base in memory (persistence possible en dump ou journalisation), messaging. Attention à vos contraintes et au CAP théorème.

L'historique


     Redis a été créé par Salvatore Sanfilippo et Pieter Noordhuis en 2009 (voir http://redis.io/topics/license).

     Avant Mai 2013 le projet était sponsorisé par VMWare, il l'est maintenant par Pivotal.

     La version actuelle est la 2.8.17, une version 3.0.0 est en release candidate. L'historique des versions depuis 2009 est accessible via Google Code

Redis est utilisé par quelques grands noms du web :

Et la concurrence ... Redis est régulièrement comparé à memcached

Les URLS


Le Site : http://redis.io/
Sous GitHub : https://github.com/antirez/redis
Les download : http://redis.io/download
Benchmarks : http://redis.io/topics/benchmarks

Du côté des développeurs :

Participer aux développements


Pour contribuer à Redis : http://redis.io/community
La mailing : https://groups.google.com/forum/#!forum/redis-db

Pour finir quelques tutoriaux pour s'y essayer :

dimanche 12 octobre 2014

L'open JDK

L'open JDK c'est quoi


Projet Java open source, débuté en 2006 par Sun visant à ouvrir le code de la JVM et des classes du JDK. A partir de l'open JDK vous pouvez builder et utiliser un jdk complet.

L'une des explications la plus claire que j'ai pu trouver est celle donnée par Rémi Forax sur cette thread des CastCodeurs : https://groups.google.com/forum/#!topic/lescastcodeurs/2067DUGyP20

Un blog post sur le passage à l'openJDK : la transition
https://blogs.oracle.com/henrik/entry/moving_to_openjdk_as_the

OpenJDK par ses URLs officielles


Le site OpenJdk : http://openjdk.java.net/
Le wiki : https://wiki.openjdk.java.net/dashboard.action

L'open JDK c'est aussi une communauté ouverte avec ses règles, sa gouvernance :

OpenJDK au JavaOne 2014


Plusieurs présentations lors du JavaOne 2014 en octobre dernier ont parlé de l'OpenJDK.

Exemple d'une JEP active : "Shenandoah: An Open Source Garbage Collector (JEP 189) with an Ultralow Pause Time [CON5216]"

Une présentation des sources de la JVM dans l'openJDK : "Introduction to HotSpot Internals [CON3294]"
https://oracleus.activeevents.com/2014/connect/sessionDetail.ww?SESSION_ID=3294&tclass=popup

"The OpenJDK Project: Your Java. Our Java."
https://oracleus.activeevents.com/2014/connect/sessionDetail.ww?SESSION_ID=9755

"Troubleshooting with Serviceability and the New Runtime Monitoring Tool HeapStats [BOF3108]"
https://oracleus.activeevents.com/2014/connect/sessionDetail.ww?SESSION_ID=3108

En complément technique


Deux présentations RedHat de l'openJDK et son architecture :

Le projet "Adopt a JDK" du London Java Community visant à démocratiser son utilisation

Comment builder l'OpenJDK :

Pour finir OpenJDK et Docker

Les JVM sur la base de l'OpenJDK


Une présentation générale d'Oracle sur la JVM et son futur : "Evolving the JVM: Principles and Directions"
http://www.oracle.com/technetwork/java/jvmls2014goetzrose-2265201.pdf

IcedTea, la JVM de Redhat

La Zing d'Azul System

Zulu, également d'Azul system
Et si vous vous y perdez un peu : la différence entre Zulu et Zing

Pour finir les deux classiques Hotspot et JRockit maintenant toutes deux chez Oracle avec leur projet de convergence : https://blogs.oracle.com/henrik/entry/oracles_jvm_strategy

Bon, cette fois vraiment pour finir, une dernière qui a été abandonnée en 2011 : Apache Harmony

dimanche 5 octobre 2014

Revue de press du développeur Java


     Quelques news déjà plus si nouvelles que cela (et oui notre monde va vite) mais assez intéressantes pour être notée

Les slides et vidéos du JVM Language Summit 2014 qui s'est déroulé du 28 au 30 juillet dernier
http://www.oracle.com/technetwork/java/javase/community/jlssessions-2255337.html

En lien avec la JVM : Graal
http://www.javaworld.com/article/2691233/scripting-jvm-languages/oracles-graal-project-empowers-language-creation-on-the-jvm.html

Java 9 et open JDK
http://www.javaworld.com/article/2689365/java-platform/openjdk-project-opens-up-java-9-to-collaboration-experimentation.html
http://www.infoworld.com/article/2608801/java/why-developers-should-get-excited-about-java-9.html

Les élections 2014 au JCP (Java Community Process) pour les EC (Executive Committee) :
https://jcp.org/ja/whatsnew/elections

Parce que l'IT ce sont des modèles aussi qui se cherchent il y a aussi des projets qui s'arrêtent :

EOL (EndOfLife) pour LiveRebel
http://zeroturnaround.com/blog/goodbye-liverebel/
http://zeroturnaround.com/rebellabs/the-5-inconvenient-truths-indicating-the-market-still-isnt-ready-for-release-automation/

CloudBees arrête le Paas et se recentre sur Jenkins
http://www.lemondeinformatique.fr/actualites/lire-cloudbees-ferme-son-paas-et-s-allie-avec-pivotal-58603.html
http://www.infoq.com/news/2014/09/CloudbeesExitPAASResignEC

Un jour, un storage : Cassandra

     L'objet de ces billets "un jour, un storage" est de parcourir les différentes structures de stockage de données qui fleurissent ces derniers temps (NoSQL ou pas).

     La plus part ne sont pas forcément jeunes et ont des ancêtres qui remontent à bien plus longtemps encore mais les besoins de technologies face aux flux de données actuels, les tendances buzz ("big data") aidant ont les croise de plus en plus régulièrement.

     Je ne vais pas détailler leurs architectures, fonctionnement, utilisation ... mais plutot donner quelques points d'entré qui permettront d'avoir un aperçu et pour ceux qui le souhaitent creuser plus en avant la technologie.

     Première structure de cette série : Cassandra

Cassandra c'est quoi


     C'est un système de stockage de donnée distribué open source. Il adresse les problématiques de scalabilité, destiné à gérer des volumes important de donnés en gardant de bonnes performances et en étant tolérant aux pannes.

     Cassandra est développé en java, considéré comme hybride dans les familles NoSQL : entre clé/valeur et orienté colonnes.

Architecture interne :

Introduction Cassandra :

Quelques tutoriaux :

L'historique


     Comme on le disait tout à l'heure même si ces projets semblent récent, ils ont démarré il y a quelques temps déjà. Quelques dates concernant Cassandra.

     A l'origine Cassandra est un projet réalisé sur un modèle open source par deux développeurs de FaceBook (Avinash Lakshman et Prashant Malik), mis à disposition en juillet 2008 sous google code.

Quelques présentations aux débuts de Cassandra :

     En Mars 2009 Cassandra rejoint Apache Incubator

     Puis Mars 2010 il devient Apache Top Level Project

     Depuis les développements continuent sous l'aile de la fondation Apache :
  • octobre 2011 la version 1.0
  • Septembre 2013 la version 2.0

     Dernière version stable : 2.1.0 (releasé en septembre 2014)

     Les branches encore accessibles :
  • 2.0.10 (aout 2014)
  • 1.2.19 (septembre 2014)

La liste des commiters participants aux développements : http://wiki.apache.org/cassandra/Committers

Les URLS


Le projet : http://cassandra.apache.org/
Download : http://cassandra.apache.org/download/
Wiki du projet : http://wiki.apache.org/cassandra/
Wikipedia : http://en.wikipedia.org/wiki/Apache_Cassandra

DataStax Société commerciale avec expertise Cassandra : http://www.datastax.com/
Communauté Cassandra/Datastax : http://planetcassandra.org/

Un meetup Cassandra sur Paris : http://www.meetup.com/Cassandra-Paris-Meetup/

Participer aux développements


Comment contribuer : http://wiki.apache.org/cassandra/HowToContribute

Les mailing :
User : user-subscribe@cassandra.apache.org
Developer : dev-subscribe@cassandra.apache.org
Notifications de Commits : commits-subscribe@cassandra.apache.org
API cliente : client-dev-subscribe@cassandra.apache.org

Le JIRA Cassandra
https://issues.apache.org/jira/browse/CASSANDRA/?selectedTab=com.atlassian.jira.jira-projects-plugin:summary-panel

Repo Git : https://git-wip-us.apache.org/repos/asf?p=cassandra.git
Règle de coding : http://wiki.apache.org/cassandra/CodeStyle