Cassandra chez Chronopost pour traiter en temps réel 1,5 milliard d événements par an
Qui suis-je? Alexander DEJANOVSKI Ingénieur EAI Depuis 15 ans chez Chronopost @alexanderdeja
Chronopost International Notre métier Leader de la livraison express de colis jusqu à 30 kg aux entreprises comme aux particuliers partout dans le monde, Chronopost s appuie sur en France sur un réseau constitué de 75 sites opérationnels et 7 hubs. Chronopost dessert plus de 230 pays en Europe et dans le monde. En 2014 : 3 500 salariés Plus de 60 000 entreprises clientes 4 500 tournées de livraison par jour 114,5 millions de colis livrés 230 pays desservis 33% des colis livrés en BtoC 25% de son CA à l International
L EAI chez Chronopost
Flux EAI chez Chronopost TIBCO BusinessWorks 750 000 échanges/j 3M d étapes/j
Suivi des flux EAI Développement interne : FLUKS Base relationnelle
Suivi des flux EAI
Suivi des flux EAI
Suivi des flux EAI
Suivi des flux EAI
Problèmes Contentions Latences Statistiques
Proposition d un PoC NoSQL sur Fluks Portage Scalabilité Open Source
La jungle «NoSQL/Big Data» http://nosql-database.org/ liste + de 150 bases NoSQL Hadoop Elasticsearch RaptorDB LevelDB HBase Cassandra Couchbase CouchDB djondb EJDB Berkeley DB Oracle NOSQL Hypertable RethinkDB densodb GenieDB Accumulo Cloudata Cloudera MonetDB HPCC Apache Flink Splice Machine MongoDB RavenDB MarkLogic Server Clusterpoint Server NeDB Terrastore AmisaDB JasDB SisoDB SDB ThruDB iboxdb DynamoDB Riak Redis Aerospike FoundationDB BangDB Scalaris Scalien Voldemort Dynomite KAI MemcacheDB Spark. #CassandraSummit
Notre short list HBase Cassandra MongoDB
Cassandra
Pourquoi Cassandra? Simplicité Réplication Tolérance aux pannes CQL JDBC Scalabilité
Partition et réplication Replication Factor = 3 3 répliques de chaque enregistrement
Requêtes
Scalabilité linéaire
CQL = Cassandra Query Language Création de table : CREATE TABLE ma_table( id int, value text, PRIMARY INDEX(id) ); Requêtage des données : SELECT * FROM ma_table WHERE id=?
Il faut réapprendre certaines choses Pas de relations Dénormalisation Clauses WHERE limitées Requêtes analytiques
Le PoC Cassandra
Portage de Fluks Driver JDBC Cassandra (TIBCO/IHM) Guava 2 mois / 1 personne
Passage en production Serveurs décommissionnés Août 2014 : 1 ère infrastructure Avril 2015 : évolution
Résultats en production Plus de contention Stats temps réel RDBMS : 100-120ms / message Cassandra : 16-20ms / message
Comparatifs des temps d intégration
Des stats temps réel? Dans la version relationnelle : Batch Recalculs à la demande Avec la montée en charge : Durée++ Perturbation insertions
Des stats temps réel? Type «counter» de Cassandra Incrémentation/Décrémentation : UPDATE ma_table SET my_counter = my_counter + 10 WHERE ma_cle=1 Le truc génial? UPDATE = INSERT Enregistrement créé s il n existe pas
Des stats temps réel? Attention : Cassandra < 2.1 = compteurs approximatifs rejeux OK pour des stats
Développements en cours sur Cassandra
Vision Base Cassandra alimentée depuis notre Base Colis Toutes les Informations colis Tous les événements
Vision 2 nouvelles offres Chronopost à la rentrée Stockage Cassandra Accent fort sur le temps réel Stockage en «time series»
Infrastructure analytique
Notre stack analytique «Big Data» Apache Spark 1.2 Cassandra (via connecteur Spark Datastax) Analyse sur profondeur réduite (opérationnel) HDFS Analyse sur profondeur étendue (archivage) Dataiku
Contribution à l écosystème Cassandra
Le driver JDBC «legacy» Non maintenu Limité Cassandra <= 1.2 Datastax Java driver
Mise à jour du driver JDBC «legacy» Cassandra 2.0/2.1 Load balancing Disponible sur code.google.com Google : «cassandra jdbc» API Thrift
Nouveau driver JDBC Réécriture Intégration Driver Java Datastax Disponible sur github.com/adejanovski
Requêtes asynchrones
Load balancing policies : Token Aware Policy
Load balancing policies : DC Aware Policy
Load balancing policies : DC Aware Policy
Remerciements Datastax pour : Son invitation aujourd hui Sa contribution au code source Cassandra (>80%) Son animation de la communauté Cassandra Vous pour : M avoir écouté jusqu au bout
Merci!