3. AMADEUS
• France Services fournit des solutions de
traitement des réservations pour l'industrie du voyage
• Clients d’Amadeus
• Des prestataires de voyages (compagnies traditionnelles et à
bas prix, hôteliers, croisiéristes, compagnies ferroviaires, de
ferry, de location de voitures et tour-opérateurs)
• Des agences de voyages (en ligne et hors ligne)
• Un modèle économique basé sur les transactions
Zenika MongoDB Tour 03/07/2014 - 3
4. CONTEXTE PROJET
PROBLÉMATIQUE
Un tour-opérateur français souhaite étendre la distribution de
ses prestations (villages vacances) au delà de son réseau
d’agences et de son propre site web
OBJECTIFS
Confier à Amadeus la distribution de son catalogue et de ses
offres vers différents partenaires internationaux
Zenika MongoDB Tour 03/07/2014 - 4
5. APERÇU DE LA SOLUTION
Zenika MongoDB Tour 03/07/2014 - 5
Tour-opérateur
français
Plateforme
d’inter-
médiation
Plateformes de
distributions
(Allemagne,
USA, France, …)
Agences de
voyages
6. QUELQUES CHIFFRES
Zenika MongoDB Tour 03/07/2014 - 6
PRODUITS : VILLAGES VACANCES
• Produits déclinés par
• Saison (été-hiver)
• Pays (marché)
• Actualisation des produits toutes les semaines
OFFRES : DISPONIBILITÉS ET TARIFS DES SÉJOURS
• Environ 5 000 000 offres chargées tous les jours
• A terme : stockage d’environ 100 000 000 offres
7. CHRONOLOGIE
Zenika MongoDB Tour 03/07/2014 - 7
22h00
Produits
Asie
23h00
Offres
Asie
01h00
Produits
Europe
02h00
Offres
Europe
03h00
Offres
Allemagne
04h00
Produits
Allemagne
06h00
Produits
Amérique
07h00
Offres
Amérique
08h00
Offres
USA
09h00
Produits
USA
Import
Export
8. CHOIX MONGODB
Zenika MongoDB Tour 03/07/2014 - 8
INSERTION ET RESTITUTION MASSIVE DE DONNÉES
Capacité à mettre en cache de larges volumes de données
TOLÉRANCE AUX PANNES
Utilisation de plusieurs nœuds MongoDB
MONTÉE EN CHARGE
Possibilité d’utiliser les mécanismes de sharding
FORMAT DES DONNÉES EN ENTRÉE DE TYPE JSON
Facilité de mapping des données sources
REQUÊTAGE COMPLEXE DES DONNÉES
Clients multi-languages, framework d’agrégation
9. ARCHITECTURE APPLICATIVE
Zenika MongoDB Tour 03/07/2014 - 9
Référentiel
des offres
& produits
Offres
Plateforme
d’intermédiation
Produits WWW
Batch
d’import
FTP
Batches
d’export
France
Allemagne
USA
API
Console d’admin
Autre...
Tour-
opérateur
10. COLLECTIONS MONGODB
Zenika MongoDB Tour 03/07/2014 - 10
• DONNÉES MÉTIER
• RÉFÉRENTIEL DE DONNÉES
• REPORTING
offres produits
pays équipements
TripAvisor
11. BATCH D’IMPORT
Zenika MongoDB Tour 03/07/2014 - 11
Scheduling des
batches
Lecture
• Fichier CSV par bloc
de lignes (chunk)
• Appel Web Services
Processing
• Enrichissement des
données
• Validation
Ecriture dans
12. BATCH D’EXPORT
Zenika MongoDB Tour 03/07/2014 - 12
Scheduling des
batches
Lecture
paginée depuis
Processing
• Enrichissement
des données
Ecriture
• CSV
• XML
13. ACTUALISATION DES DONNÉES
Zenika MongoDB Tour 03/07/2014 - 13
RECHARGEMENT DES DONNÉES
• Les données sont remplacées dans leur intégralité
quotidiennement
• Système de « bascule » à chaque fin d’exécution d’un batch
d’import
• Les nouvelles données ne sont distribuées que si le batch
s’exécute intégralement : transaction globale
PRINCIPE
temp_offers_europe
offers_europe db.temp_offers_europe.renameCollection("offers_europe")
14. RÉPLICATION DES DONNÉES
Zenika MongoDB Tour 03/07/2014 - 14
REPLICA SET DE 3 NŒUDS
PRINCIPE D’ÉLECTION DU NOUVEAU NŒUD PRIMAIRE
Primary Secondary Arbiterréplication
Primary
Primary Secondary Arbiter
Election (2-5s)
Arbiter
Secondary
16. VERSIONING DES DONNÉES
Zenika MongoDB Tour 03/07/2014 - 16
2 VERSIONS DE DONNÉES EN PARALLÈLE
offers_europe_2
offers_europe_1
Batch
d’import
Console
d’administration
Batch
d’export
API TripAdvisor
17. Zenika MongoDB Tour 03/07/2014 - 17
DRIVERS JAVA VIA LA BIBLIOTHÈQUE DATA MONGODB
• Ecriture simplifiée pour les requêtes simples (convention de
nommage)
• Utilisation de l’API Criteria pour les requêtes complexes
• Portage de la plupart des commandes / opérateurs du shell
MongoDB
• Exemple de requête
Query query = new Query();
query.addCriteria(Criteria.where("code").is(resortCode));
query.addCriteria(Criteria.where("lang").is(resortLang));
return mongoTemplate.findAll(query, Resort.class, "offers_europe");
CLIENT MONGODB
18. AGRÉGATIONS
Zenika MongoDB Tour 03/07/2014 - 18
CAS D’UTILISATION
• Récupération des chambres par hôtel et par période pour un
marché donné
PRODUIT : JSON SIMPLIFIÉ
{
"code" : "ABCD",
"countrySellingCode" : "10",
"period" : "14H",
"roomTypes" : [
{
"rooms" :
[
{ "code" : "B2", "label" : "Standard Room" },
{ "code" : "C2", "label" : "Deluxe Room" }
]
}
]
}
21. REPORTING TRIPADVISOR
Zenika MongoDB Tour 03/07/2014 - 21
HISTORISATION DES APPELS À L’API
• Agrégation des appels durant 1 minute, puis mis à jour de la
collection
PRÉ-AGRÉGATION DES REQUÊTES
• Opérateur « upsert » pour historiser les dernières requêtes
reçues
• Exemple de structure d’un document
{count: 50, country: "FR", date: "17/06/2014"}
22. TESTS D’INTÉGRATION
Zenika MongoDB Tour 03/07/2014 - 22
PROCÉDURE
1. Démarrage d’une instance MongoDB « embedded »
2. Insertion des données
3. Lancement des tests
4. Vérification des résultats
OUTILS
• Flapdoodle Embedded MongoDB
• https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo
• Embed Mongo Maven plugin
• https://github.com/joelittlejohn/embedmongo-maven-plugin
23. PERFORMANCES
Zenika MongoDB Tour 03/07/2014 - 23
MÉTRIQUES MONGODB
• Logs des requêtes > à 100ms
• Commande serverStatus()
• Commande explain()
AXES D’OPTIMISATION
• Configuration des indexes
• Pagination des requêtes (attention à l’utilisation du skip)
• Mise en cache des résultats
• Projection sur une partie des propriétés d’un document
24. PERFORMANCES API TRIPADVISOR
Zenika MongoDB Tour 03/07/2014 - 24
MISE À DISPOSITION DES DONNÉES
• Service HTTP REST/JSON
• Instance MongoDB identique à celle utilisée par les batches
SLA
• Disponibilité du service 24h/24 7j/7
BENCHMARK
• Débit maximal établi à 600 requêtes/sec
• VM de benchmark : 1 CPU 2,1Ghz + 4Go RAM
• Taille « working set » : 1,5 Go
26. ARCHITECTURE DE PRODUCTION
Zenika MongoDB Tour 03/07/2014 - 26
Plateforme
d’intermédiation
VM batch VM
MongoDB +
MySQL
VM APIs &
Console
VM
MongoDB +
MySQL
Apache
Tomcat
FTP
Apache
Tomcat
• Master
Accès à
MongoDB
• Slave
• Arbiter
27. EXPLOITATION MONGODB
Zenika MongoDB Tour 03/07/2014 - 27
HÉBERGEMENT EXTERNE
• Sous-traitance de l’exploitation de la solution
• Installation sur VM dédiées
• Fourniture des livrables et d’une procédure d’installation
• Sauvegarde quotidienne via mongodump
MONITORING
• Indicateurs système (CPU, RAM, I/O, Disque)
• Plugin MongoDB pour Cacti
• Vérification de la connexion depuis l’application
30. PROCHAINES ÉTAPES
Zenika MongoDB Tour 03/07/2014 - 32
INTÉGRATION NOUVEAUX MARCHÉS
• Augmentation de la RAM sur les VMs si nécessaire
• Sharding des données pour répartir la charge sur plusieurs
nœuds : découpage par zone
• Indexes TTL si MAJ partielles des offres (expiration)
EVOLUTIONS TECHNOLOGIQUES
• Migration vers MongoDB 2.6
• Étude intégration MMS