Hibernate vs. le Cloud Computing



Documents pareils
Le NoSQL - Cassandra

AVRIL Au delà de Hadoop. Panorama des solutions NoSQL

Groupe de Discussion Big Data Aperçu des technologies et applications. Stéphane MOUTON

NoSQL : hype ou innovation? Grégory Ogonowski / Recherches Octobre 2011

NoSQL. Introduction 1/23. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

NoSQL. Introduction 1/30. I NoSQL : Not Only SQL, ce n est pas du relationnel, et le contexte. I table d associations - Map - de couples (clef,valeur)

Bases de données documentaires et distribuées Cours NFE04

Cassandra chez Chronopost pour traiter en temps réel 1,5 milliard d événements par an

Architecture NoSQL et réponse au Théorème CAP

«clustering» et «load balancing» avec Zope et ZEO

C-JDBC. Emmanuel Cecchet INRIA, Projet Sardes.

NoSQL. Etat de l art et benchmark

Architectures haute disponibilité avec MySQL. Olivier Olivier DASINI DASINI - -

Augmenter la disponibilité des applications JEE grâce au clustering : Le projet open source JShaft

L AVENIR DU NoSQL. Quel avenir pour le NoSQL?

Introduction aux SGBDR

Quels choix de base de données pour vos projets Big Data?

Tungsten: une implémentation du futur clustering de PostgreSQL

Les bases de données relationnelles

ORACLE 10g Découvrez les nouveautés. Jeudi 17 Mars Séminaire DELL/INTEL/ORACLE

Chapitre 10. Architectures des systèmes de gestion de bases de données

Prototypage et évaluation de performances d un service de traçabilité avec une architecture distribuée basée sur Hadoop

Big Data. Cyril Amsellem Consultant avant-vente. 16 juin Talend

Cartographie des solutions BigData

Présentation Alfresco

et Groupe Eyrolles, 2006, ISBN :

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

Université de Liège Faculté des Sciences Appliquées Institut Montefiore ETUDE DES FRAMEWORK DISTRIBUÉS DE GRILLES DE DONNÉES

Bases de données documentaires et distribuées Cours NFE04

MySQL CLUSTER. Auto-Sharding pour le déploiement d'opérations de lecture et d'écriture

INTERSYSTEMS CACHÉ COMME ALTERNATIVE AUX BASES DE DONNÉES RÉSIDENTES EN MÉMOIRE

Acquisition des données - Big Data. Dario VEGA Senior Sales Consultant

FAMILLE EMC RECOVERPOINT

Un peu de culture : Bases N osql L 1

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Une Histoire de Migration Agile

Programmation parallèle et distribuée

Cassandra et Spark pour gérer la musique On-line

HADOOP ET SON ÉCOSYSTÈME

Cours 6. Sécurisation d un SGBD. DBA - M1ASR - Université Evry 1

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

CNAM Déploiement d une application avec EC2 ( Cloud Amazon ) Auteur : Thierry Kauffmann Paris, Décembre 2010

Les clusters Linux. 4 août 2004 Benoît des Ligneris, Ph. D. benoit.des.ligneris@revolutionlinux.com. white-paper-cluster_fr.sxw, Version 74 Page 1

IBM Cloudant Data Layer Local Edition

Optimisations des SGBDR. Étude de cas : MySQL

Du 10 Fév. au 14 Mars 2014

FAMILLE EMC VPLEX. Disponibilité continue et mobilité des données dans et entre les datacenters AVANTAGES

Haute-disponibilité et bases de données

Compte Rendu d intégration d application

Sommaire. La haute-disponibilité. L'offre OpenSource. Les systèmes tiers. MySQL

Les technologies du Big Data

<Insert Picture Here> Maintenir le cap avec Oracle WebLogic Server

Programmation parallèle et distribuée

Construire un réseau social avec Symfony Xavier Lacot Clever Age. Symfony Live 11 et 12 juin 2009 Clever Age Xavier Lacot

Réplication des données

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

Service WEB, BDD MySQL, PHP et réplication Heartbeat. Conditions requises : Dans ce TP, il est nécessaire d'avoir une machine Debian sous ProxMox

ETUDE ET IMPLÉMENTATION D UNE CACHE L2 POUR MOBICENTS JSLEE

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Le passage à l échelle de serveur J2EE : le cas des EJB

Julien MATHEVET Alexandre BOISSY GSID 4. Rapport RE09. Load Balancing et migration

Ebauche Rapport finale

Bases de données documentaires et distribuées Cours NFE04

FAMILLE EMC VPLEX. Disponibilité continue et mobilité des données dans et entre les datacenters

Les participants repartiront de cette formation en ayant une vision claire de la stratégie et de l éventuelle mise en œuvre d un Big Data.

Ricco Rakotomalala R.R. Université Lyon 2

Oracle Maximum Availability Architecture

Implémentation des SGBD

Cours Bases de données

Cluster High Availability. Holger Hennig, HA-Cluster Specialist

Sage 100 CRM Guide de l Import Plus avec Talend Version 8. Mise à jour : 2015 version 8

Objectif. Participant. Prérequis. Oracle BI Suite EE 10g R3 - Développer des référentiels. 5 Jours [35 Heures]

«Clustering» et «Load balancing» avec Zope et ZEO

Solution Haute Disponibilité pour Linux


Cloud Computing : Utiliser Stratos comme PaaS privé sur un cloud Eucalyptus

Technologie SDS (Software-Defined Storage) de DataCore

Base de données MySQL

BIG DATA. Veille technologique. Malek Hamouda Nina Lachia Léo Valette. Commanditaire : Thomas Milon. Encadré: Philippe Vismara

Encryptions, compression et partitionnement des données

Fouillez facilement dans votre système Big Data. Olivier TAVARD

Le langage SQL Rappels

Master Informatique et Systèmes. Architecture des Systèmes d Information. 03 Architecture Logicielle et Technique

Big Data On Line Analytics

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

CAS, un SSO web open source. 14h35-15h25 - La Seine A

Cours Base de données relationnelles. M. Boughanem, IUP STRI

BI dans les nuages. Olivier Bendavid, UM2 Prof. A. April, ÉTS

THÉMATIQUES. Comprendre les frameworks productifs. Découvrir leurs usages. Synthèse

NoSQL : les meilleures

Introduction à ElasticSearch

Cours 8 Not Only SQL

Fathom: C est installé maintenant? Paul Koufalis Président Progresswiz Informatique

Vous êtes bien à la bonne présentation, c est juste que je trouvais que le titre de cette présentation étais un peu long,

<Insert Picture Here> Solaris pour la base de donnés Oracle

Transcription:

Hibernate vs. le Cloud Computing

Qui suis-je? Julien Dubois Co-auteur de «Spring par la pratique» Ancien de SpringSource Directeur du consulting chez Ippon Technologies Suivez-moi sur Twitter : @juliendubois http://creativecommons.org/licenses/by-nc-nd/3.0/

Nous allons parler de... Bases de données relationnelles Hibernate Cache NoSQL

Commençons par deux idées fausses...

Idée #1: Hibernate est magique Il optimise tout seul les requêtes SQL Plus besoin d être compétent!

Idée #2: Le cloud est magique Le cloud permet d'ajouter automatiquement des machines en fonction des besoins Il permet de tenir ainsi les pics de charge sans rien avoir à faire

La réalité est différente Ne croyez pas 01 Informatique Votre base de données ne monte pas en charge Et Hibernate n'y peut rien...

Les données sont votre problème Dans 90% des applications, la base de données est le principal point de contention Ces données sont stockées dans une base relationnelle : Transactions Sécurité Intégrité Mais ces qualités ont un coût : vous ne pouvez pas monter en charge facilement

Exemple: quels amis viennent au JUG? Problème Vous avez une table «utilisateurs» avec 1 million de lignes Chaque utilisateur est ami avec un certain nombre d autres utilisateurs (many-to-many) Chaque utilisateur peut aller à des événements (many-to-many) Quand un utilisateur va sur la page d un événement, on veut lui présenter la liste de ses amis qui y vont Solution «Oracle simple» Deux jointures: une pour sélectionner l événement, une autre pour sélectionner l utilisateur en cours

Que penser de cette solution? Très sécurisée: transactions, intégrité... Très simple à mettre en place avec Hibernate Ne monte pas en charge si on a beaucoup d utilisateurs dans la base Va poser problème s il y a beaucoup d écritures Ne monte pas en charge si on a beaucoup de lectures Tout est sur la même machine (Single Point of Failure)

Vos données dans les nuages Le problème, c'est qu'une base de données relationnelle n'est pas scalable On ne peut pas rajouter de nœuds «à chaud» Sa scalabilité n'est pas du tout linéaire : pour maintenir ses transactions et son intégrité, elle est forcée de locker des ressources Sur une vraie base de données (Oracle), ce lock est au niveau d'une ligne

Cela a même été prouvé Le théorème de CAP (ou théorème de Brewer) Votre système ne peut avoir que 2 des 3 caractéristiques suivantes Cohérent (Consistent) Disponible (Available) Tolérant aux pannes réseau (Partition Tolerance) Conséquence : votre base de données relationnelle va mal monter en charge

Mais que fait Oracle? 1ère solution : faire monter en charge la machine Partitionning Une table peut être découpée sur plusieurs disques durs Réduit les problèmes d'i/o Ne résout pas les problèmes de crash machine Cher Option payante Matériel coûteux

Application sur notre exemple Problème Quels sont mes amis qui viennent au JUG? Solution Oracle «partitionning» On utilise le champs date pour l événement, et on partitionne par mois Réduction du nombre de lignes requêtées: on ne fait les requêtes (lecture/écriture) que sur le mois en cours

Que penser de cette solution? Mêmes qualités: Très sécurisée: transactions, intégrité... Très simple à mettre en place avec Hibernate Peut résoudre les problèmes d IO si les données le permettent... Mais ce n est pas vraiment le cas de notre exemple! Tout est sur la même machine: Single Point of Failure (SPoF)

Mais que fait Oracle? (2) 2ème solution : Oracle RAC Permet de monter en charge «linéairement» d'après la publicité: résout le problème du crash machine En fait la base locke toujours les ressources en écriture Pose problème si vous avez beaucoup d'écritures (de toute manière, c'est rarement la lecture qui pose problème) Pose des problèmes de latence réseau : géo-cluster non recommandé Très cher Option payante très coûteuse Matériel (dont réseau) très coûteux

Application sur notre exemple Problème Quels sont mes amis qui viennent au JUG? Solution Oracle «RAC» Même requête qu au début, avec deux jointures Cette requête est exécutée sur l un des noeuds de la grille

Que penser de cette solution? Mêmes qualités que précédemment... Va résoudre certains problèmes en lecture: les requêtes sont réparties sur chaque noeud Plus de Single Point of Failure (SPoF) Mais toujours un problème en écriture...

On m aurait menti? Oui, votre application Java monte en cluster facilement, «dans le cloud» Tant que vous utilisez des «sticky sessions» Ou que vous stockez votre état ailleurs (cookie ou base de données?) Non, votre base de données ne monte pas en cluster Or, c'était déjà probablement elle qui était le point de contention En conclusion, le «Cloud» ne vous sert pas à grand chose

Et Hibernate? Hibernate s'appuie sur les SGBDR Il souffre donc des mêmes problèmes de scalabilité Il faut même le configurer pour qu'il utilise correctement leurs fonctionnalités avancées (partitionning) Donc, votre application Hibernate ne devrait pas monter en charge

Une solution: le cache de Hibernate possède un système de cache Cache de 1er niveau : la transaction en cours Cache de 2ème niveau : les données en base Ce cache de deuxième niveau permet d'éviter les requêtes en lecture sur la base Tant que les requêtes sont simples (lecture d'une ligne en utilisant sa PK) 2ème niveau Ou qu'on utilise Hibernate de manière intelligente : faire n+1 requêtes sur le cache peut être plus performant qu'un outer join Et que les données sont bien réparties...

La loi de Zipf Initialement une loi sur les mots utilisés Certains sont beaucoup plus courants que d'autres D'où une distribution très particulière des données Empiriquement, on retrouve le même phénomène dans de nombreuses applications Une petite partie des données est tout le temps utilisée Le reste n'est presque jamais lu Si votre application suit cette loi, votre cache sera très performant Georges Kingsley Zipf (1902-1950)

Application sur notre exemple Problème Quels sont mes amis qui viennent au JUG? Solution «Cache» Plusieurs solutions possibles, en voici une Mettre les participants d un événement en cache Mettre les amis de l utilisateur en cours en cache Faire la jointure en Java... et stocker le résultat en cache!

Que penser de cette solution? Mêmes qualités que précédemment... Résout beaucoup de problèmes de lecture (à condition de suivre la loi de Zipf): on stocke les résultats en cache! Mais on ajoute des problèmes de désynchronisation du cache... On a toujours un problème en écriture Et il y a à nouveau un SPoF

Le cache distribué Ce cache peut être distribué sur un cluster Ehcache (simple) Terracotta, Coherence, Gemfire : produits commerciaux, hauts de gamme Réduit considérablement les problèmes de désynchronisation du cache Cela résout les problèmes de montée en charge d'applications avec beaucoup de lectures Solution concurrente d'oracle RAC, en moins cher, plus performant, plus intelligent

Le write-behind La plupart des caches distribués (Terracotta, Coherence) sont transactionnels On committe dans le cache, qui se charge ensuite de gérer la base de données Les données sont insérées en base par batch, de manière asynchrone Plus de performance Moins de lock

Application sur notre exemple Problème Quels sont mes amis qui viennent au JUG? Solution «Cache distribué» Idem que pour un cache «simple» Mais on peut avoir plusieurs serveurs en parallèle En même faire un batch en parallèle, qui utilise le même cache

Que penser de cette solution? Mêmes qualités que précédemment... Résout quasiment tous les problèmes en lecture, et certains problèmes en écriture Mais à certaines conditions: Acheter une solution de clustering (prix raisonnable par rapport à Oracle RAC) Ajouter du monitoring (pour éviter le syndrome du «split brain»)

Et si on cassait tout pour reprendre à zéro?

Le NoSQL Derrière ce terme se cachent de nombreuses solutions et concepts différents Nous allons nous focaliser sur Apache Cassandra L'une des solutions les plus populaires

Cassandra Cassandra est une base de données distribuée, orientée colonne Cassandra n a pas de schéma En fait, il n a ni transaction, ni intégrité référentielle Pour reprendre le théorème de CAP: Cassandra est hautement disponible, tolérant aux pannes réseau, mais pas toujours cohérent Il peut donc être scalable, sans single point of failure (spof) Il est particulièrement efficace en écriture

BASE Encore un nouvel acronyme amusant Basically Available, Soft-state, Eventually consistent Opposé de ACID Quizz : que veut dire ACID?

«Eventual Consistency» Comment ça, pas «coherent»? «Eventual» est un faux ami en français : cohérence «au final» A un moment donné la base n'est peut-être pas cohérente, mais à terme elle le sera En fait Cassandra vous donne le choix entre : Une application très cohérente, mais lente en écriture Une application très rapide en écriture, mais avec des risques au niveau de la cohérence Les valeurs par défaut vous proposent une solution très rapide, avec des risques très limités

Exemple typique 1. Vous écrivez sur un nœud 2. Cette écriture met du temps à se répliquer sur un deuxième nœud (on parle en millisecondes) 3. Quelqu'un lit sur ce deuxième nœud, en préférant la rapidité à la consistance (c'est son choix) 4. Cette personne obtient donc une donnée ancienne 5. En background, Cassandra valide la donnée et répare cette erreur

Mais que fait l HADOPI? Cassandra fait du P2P entre ses différents nœuds On peut facilement en rajouter ou en enlever un Les données sont réparties entre ces nœuds automatiquement Mais si on veut une «bonne» répartition, les choses deviennent plus compliquées (ce n'est pas magique non plus)

Les problèmes en production La qualité des données : Monitoring & production ne sont pas au même niveau que sous Oracle Mais les outils sont nettement plus simples à utiliser Offre commerciale : DataStax Il peut y avoir des données non consistantes à un moment donné Il n'y a ni transaction, ni intégrité référentielle Tout dépend de ce que vous faites : cela n'est pas nécessairement grave

Les problèmes en développement Une manière très différente de gérer ses données Pas d'api de haut niveau (Hibernate), ni même d'api générique (JDBC) Il faut donc coder des DAOs à la main de manière assez fastidieuse, comme avant JDBC (bon courage) Pas de lazy-loading, etc : gros retour en arrière

Exemple de code ColumnSlice<String, String> result = createslicequery("my_keyspace ", stringserializer, stringserializer, stringserializer).setcolumnfamily("utilisateurs").setkey(email).setcolumnnames( "first_name", "last_name", "last_login").execute().get();

Application sur notre exemple Problème Quels sont mes amis qui viennent au JUG? Solution «Cassandra» Faire une «Column Family» qui pour un utilisateur lui permet de retrouver tous ses amis Faire une autre «Column Family» qui stocke tous les utilisateurs qui participent à un événement Bien mélanger...

Que penser de cette solution? Plus aucune des qualités précédentes: transactions, intégrité, facilité de développement... Les données sont directement insérées dans un format proche des besoins métier Résout les problèmes en lecture (mais un cache reste le bienvenu) Résout les problèmes en écriture Pas de Single Point of Failure

Et Hibernate dans tout ça?

Hibernate OGM Utilisation des APIs d'hibernate sur des bases NoSQL Lancé officiellement depuis quelques mois

Kundera http://code.google.com/p/ kundera/ Permet de faire du JPA directement Spécifique Cassandra à l origine HBase et MongoDB en alpha

Mais il y a des limitations Il reste difficile avec ces outils d utiliser pleinement les possibilités de Cassandra Gestion des «wide rows» par exemple Ces outils sont encore très jeunes Essentiellement du CRUD pour l instant

Quizz Parmi les solutions étudiées, laquelle vous parait la plus pertinente pour notre exemple? Oracle «simple» Oracle «partitionning» Oracle «RAC» Cache Cache distribué Cassandra Une autre solution?

Conclusion Ne laissez pas tomber votre base de données relationnelle Transactions, intégrité, sécurité Largement suffisante pour des besoins normaux Avec des outils inégalés en productivité (Hibernate) Travaillez sur le cache, et en particulier le cache de 2 nd niveau d'hibernate Le NoSQL sert à des besoins spécifiques Certaines solutions (Cassandra) sont très bien adaptées au Cloud A terme vous pourrez y accéder avec Hibernate/ JPA

Questions? Réponses! Un exemple d application Cassandra, sur lequel cette présentation est basée: https://github.com/jaxio/usi2011 N'hésitez pas à échanger et partager sur Twitter : @juliendubois http://creativecommons.org/licenses/by-nc-nd/3.0/