Drupal et le NoSQL Frédéric G. MARAND http://drupal.org/user/27985 OSInet http://drupal.org/node/1121720
"Drupal et le NoSQL" de Frédéric G. MARAND est mis à disposition selon les termes de la licence Creative Commons Paternité - Partage à l'identique 2.0 France. Les autorisations au-delà du champ de cette licence peuvent être obtenues à mailto:sales@osinet.fr
Drupal NoSQL : sommaire Quels objectifs globaux? Quelles tâches fonctionnelles? Quelles techniques de mise en œuvre? Quels coûts? Quelles bonnes pratiques? Quels compromis? Quels modules contribués?
Drupal NoSQL Quels objectifs globaux? Quels tâches fonctionnelles? Quelles techniques de mise en œuvre? Quels coûts? Quelles bonnes pratiques? Quels compromis? Quels modules contribués?
Objectifs : supporter les volumes Contenus stables : entités Drupal Flux volatils : ordres de grandeur d'écart Exemple, pour U utilisateurs nodes : n*u comments : c*n*u user relationships ; r*u² activités : a*(n+c*n+r*u+...)*u
Objectifs : réduire la complexité CCK, SQL Field storage : stockage en étoile nombreuses jointures requêtes coûteuses à exécuter ou à écrire Bases documentaires : 1 enregistrement = 1 document complet. requêtes économiques à exécuter et à écrire
Objectifs : performance
Objectifs : performance Exemple Figaro Plus : MySQL MongoDB MySQL Slow Queries rate: -85% Durée extraction du coeur de page: -98% Alternatives SQL : Libres : PGSQL, SQLite Propriétaires : MSSQL, DB2, Oracle MongoDB avec DBTNG! "You must be really desperate to drive a NoSQL database with SQL commands." - chx
Drupal NoSQL Quels objectifs globaux? Quelles tâches fonctionnelles? Quelles techniques de mise en œuvre? Quels coûts? Quelles bonnes pratiques? Quels compromis? Quels modules contribués?
Tâche : backup hors site C'est AUSSI une tâche de production backup_migrate_* FTP Amazon S3 NodeSquirrel (wrapper S3) Rackspace Cloudfiles
Tâche : déport des blocs Limitations du cache de blocs node_access en D6 Drupal 7 le module block n'est plus obligatoire mongodb_block possibilité d'autres implémentations
Tâche : antémémoire Profusion de solutions D6, convergence en D7 In-process, local par frontal : apc, eaccelerator, xcache, zend incohérence entre frontaux Pools mémoire réseau : memcached Bases NoSQL : mongodb_cache, redis
Tâche : stockage des champs Field Storage D7 - Inapplicable en CCK MongoDB : référence Examiner.com http://drupal.org/project/mongodb Riak - pas encore d'efq http://drupal.org/project/riak_field_storage ElasticSearch - pas encore d'efq http://drupal.org/sandbox/damz/1234634
Tâche : file storage Multiples solutions D6 ± hackées Storage API : Stockage / Accès FTP / non spécifique AWS S3 / CDN AWS Cloudfront Rackspace CloudFiles / CDN Limelight Core Streams Wrappers Microsoft Azure
Tâche : exclusion mutuelle Le "verrouillage" core de lock.inc souffre de problèmes à forte charge fonctionne en attente active Alternative : redis.lock.inc attente passive utilisation des mutex Redis
Tâche : MapReduce Distribution de charge liée aux données stockées sur un cluster MongoDB Directement utilisable depuis mongodb Pas d'habillage Drupal spécifique Riak Habillage Drupal dans riak_field_storage
Tâche : file d'attente (queue) Alternatives SQL, dont AdvancedQueue : http://drupal.org/project/advancedqueue MongoDB: Référence Examiner.com http://drupal.org/project/mongodb Redis http://drupal.org/project/redis Non lié à Resque et autre files basées sur Redis
Tâche : recherche Core inadapté aux sites professionnels Principaux moteurs interfacés SOLR SaaS : Acquia Search, Adyax Cloud Search Sphinx, Google CouchDB : couchdb_node stockage automatique des nodes dans le stockage documentaire pas de fonctions de recherche
Tâche : sessions PHP natif : fichiers PECL : memcached (pas memcache!) Drupal core: SQL Alternatives : handler du module Memcache handler MongoDB Attention : particularités Debian/Ubuntu
Tâche : journal d'erreurs 2 versions core : dblog / syslog Fichiers plats MongoDB capped collections. Avantages et risques synthèse des événements Redis : redis_watchdog Tokyo Tyrant
Drupal NoSQL Quels objectifs globaux? Quelles tâches fonctionnelles? Quelles techniques de mise en œuvre? Quels coûts? Quelles bonnes pratiques? Quels compromis? Quels modules contribués?
Technique : accès aux données API spécifiques AWS SimpleDB http://drupal.org/node/482318 EntityFieldQuery Modèle d'utilisation dual Lien avec le FieldStorage Document Storage D8 Natif vs DBTNG
Technique : intégration Views Interfaçage DBTNG http://drupal.org/project/mongodb_dbtng Greffon EFQ http://drupal.org/project/efq_views
Technique : Drupal 6 CCK Core : La plupart des API sont utilisables natif ou backports (Queue API) nécessité de patches core multiples CCK lié à SQL, pas de field storage NoSQL hooks pre-load / post-save patches intrusifs ou non, conséquences Exemple : Freerice > 8E9 enregistrements
Drupal NoSQL Quels objectifs globaux? Quelles tâches fonctionnelles? Quelles techniques de mise en œuvre? Quels coûts? Quelles bonnes pratiques? Quels compromis? Quels modules contribués?
Coûts : nature des coûts Investissement Licences perpétuelles Développement spécifique Charges récurrentes Licences périodiques Hosting Support Formation
Coûts : licences Cas général Drupal: licences "libres" MongoDB : serveur AGPL 3, clients Apache 2 Redis : BSD 3 clauses CouchDB, Riak : Apache 2 Tokyo : LGPL 2.1 Outils propriétaires Oracle NoSQL Progress ObjectStore, etc
Coût : développement Limites du support contrib Volume de développement Limites de la communauté Rareté de la ressource Coût des spécialistes Nécessité du test unitaire/intégral
Coûts : formation Corollaire du coût de développement pénurie de la ressource "développeur" risque technologique Investissement ou charge? réduction du coût de développement réduction du TCO récurrence : turnover, technologie
Coût : hébergement SaaS Base NoSQL : AWS SimpleDB Fichiers : Azure, CloudFiles, S3... Backup : CloudFiles, S3... Recherche : SOLR : Acquia Search, Adyax Cloud Search Antidot AFS@Web, Exalead On Demand...
Coûts : support Pas disponible en libre non commercial : ElasticSearch, Redis Coûts en libre commercial : 10Gen pour MongoDB 2500 USD/serveur/an / 4000 USD/serveur/an (Gold) Couchbase pour CouchDB 2500 USD/serveur/an / 4500 USD/serveur/an (Premier) Riak : «contact us»
Drupal NoSQL : sommaire Quels objectifs globaux? Quelles tâches fonctionnelles? Quelles techniques de mise en œuvre? Quels coûts? Quelles bonnes pratiques? Quels compromis? Quels modules contribués?
BCP (MongoDB) : modélisation 1 Ne pas chercher à simuler SQL JOIN requêtes multiples avec A/R code Field Storage : stockage entité cf index couvrant Le document comme cache données pour la partie "recherche" du find() données additionnelles dans un cache interne logique côté client pour scaling horizontal penser aux multikeys
BCP (MongoDB) : modélisation 2 Concevoir les documents pour l'indexation "1 index par requête" vs "économiser les index" 40 index maximum par collection MongoDB modifié pour supporter FieldStorage Utiliser des index couvrants Conformité : penser à l'"après" préserver l'accès après la vie de l'application la seconde vie du cache interne Exemple : craigslist
BCP (MongoDB) : Réalisation La requête la plus rapide est celle qu'on n'exécute pas! Cache!= DB : savoir choisir Typage vs pratique PHP/Drupal/MySQL Tests en vraie grandeur durant le développement volume charge
BCP : Production Instrumentation : de l'alerte à la réparation Alertes et réactions: Monit, Nagios Mesure en continu Surveillance individuelle : Munin, Cacti, Synthèse : Ganglia Logs serveur : activer ET utiliser Tolérance aux pannes et à la charge Réplication ET sauvegardes, deux besoins
Drupal NoSQL : sommaire Quels objectifs globaux? Quelles tâches fonctionnelles? Quelles techniques de mise en œuvre? Quels coûts? Quelles bonnes pratiques? Quels compromis? Quels modules contribués?
Compromis : flexibilité schéma Schéma relationnel flexibilité illimitée méthodes de design reconnues et éprouvées Document storage (MongoDB) pas de schéma par "table" (collection) à grande liberté, grandes responsabilités pas d'outils pratiques comme PMA, Workbench
Compromis : durabilité Relationnel : évolutivité illimitée accessibilité hors application limitée encore plus limitée dans Drupal sans FK Document (MongoDB) évolutivité en production difficile accessibilité hors application PEUT être facile : auto-contenus
Compromis : CAP Théorème de Brewer (CAP theorem) : «it is impossible for a distributed computer system to simultaneously provide all three of the following guarantees: Consistency, Availability, Partition tolerance» Bases SQL : potentiel ACID Pas systématique (MyISAM) MongoDB, bases K/V : "BASE" Basically Available, Soft state, Eventually consistent
Compromis : sharding Drupal : pas de sharding applicatif intégré Exemple avec MongoDB http://www.mongodb.org/display/docs/sharding+introduction
Compromis : répliques et clusters MySQL par défaut : réplication master/slave Pressflow 6, core 7 Utilisation réelle : limites core 6/7 MySQL cluster MongoDB master/slave dans le module replicaset dans MongoDB 1.6
Compromis : support MySQL = Oracle, membres ODBA, SkySQL NoSQL : Communautaire : valeur et limitations Professionnel CouchDB : Couchbase, Cloudant MongoDB : 10Gen Redis : vmware Ryak : Ryak
Compromis : licences Logiciel Licence par défaut Drupal et contributions drupal.org GPL 2.0 et suivantes MongoDB - serveur AGPL 3.0 MongoDB - clients Apache 2.0 MongoDB - documentation Creative Commons Redis BSD 3 clause CouchDB Apache 2.0 Riak Apache 2.0 Tokyo Tyrant / Tokyo Tycoon LGPL 2.1 Etes-vous concerné? Agir en conséquence
Drupal NoSQL Quels objectifs globaux? Quelles tâches fonctionnelles? Quelles techniques de mise en œuvre? Quels coûts? Quelles bonnes pratiques? Quels compromis? Quels modules contribués?
Modules : Bases Document MongoDB http://drupal.org/project/mongodb CouchDB http://drupal.org/project/couchdb ElasticSearch http://drupal.org/sandbox/damz/1234634 Amazon SimpleDB http://drupal.org/project/awssdk
Modules : clef/valeur Apache Cassandra http://drupal.org/project/cassandra Redis http://drupal.org/project/redis http://drupal.org/project/redis_queue http://drupal.org/project/redis_watchdog Ryak http://drupal.org/project/riak_field_storage Tokyo Cabinet / Tokyo Tyrant http://drupal.org/node/844354
ALLER PLUS LOIN
Merci de votre attention! fgm@osinet.fr http://drupal.org/user/27985 http://drupal.org/node/1121720 Audit, conseil, formation Drupal