réussir une montée en charge avec mongodb

Post on 15-Feb-2017

458 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Réussir une montée en charge avec MongoDB

Thomas BoydDirecteur de l'équipe d'architecture de solutions chez MongoDB

Montée en charge avec MongoDB

1 2 3 4 5 6 7 80

5,000

10,000

15,000

20,000

25,000

30,000

Débit du cluster MongoDB

Nombre de nœuds

Opé

ratio

ns/s

econ

de

Sommaire

• Conseils d'optimisation– Conception de schéma– Index– Surveillance– WiredTiger

• Montée en charge verticale• Montée en charge horizontale• Procéder à la montée en charge d'une équipe

opérationnelle

Conseils d'optimisation : Conception de schéma

Modèle de document

• Correspondance d'objets d'application

• Flexibilité• Performances élevées

{ "customer_id" : 123,"first_name" : ”John","last_name" : "Smith","address" : { "street": "123 Main

Street", "city": "Houston", "state": "TX", "zip_code": "77027"

}policies: [ {

policy_number : 13,description: “short

term”,deductible: 500

},{ policy_number : 14,

description: “dental”,visits: […]

} ] }

Importance de la conception de schémas

• Très différente de la conception de schémas RDBMS

• Schéma MongoDB :– dénormaliser les données– créer un schéma (potentiellement complexe)

en ayant une connaissance préalable (et non une simple prévision) de vos modèles de requête réels

– écrire des requêtes simples

Exemple concretCatalogue de produits pour un détaillant en activité dans 20 pays

{_id: 375,en_US: { name: …, description: …, <etc…> },en_GB: { name: …, description: …, <etc…> },fr_FR: { name: …, description: …, <etc…> },fr_CA: { name: …, description: …, <etc…> },de_DE: …,<… and so on for other locales …>

}

Correspondance incorrecte pour un modèle d'accès

Requêtes d'application réelles :

db.catalog.find( { _id: 375 }, { en_US: true } );db.catalog.find( { _id: 375 }, { fr_FR: true } );db.catalog.find( { _id: 375 }, { de_DE: true } );

… et ainsi de suite pour les autres paramètres régionaux

Utilisation insuffisante des ressources

Les données en ROUGE sont en cours d'utilisation. Les données en BLEU occupent de la mémoire, mais ne sont pas sollicitées.

{_id: 375,en_US: { name: …, description: …, <etc…> },en_GB: { name: …, description: …, <etc…> },fr_FR: { name: …, description: …, <etc…> },fr_CA: { name: …, description: …, <etc…> },de_DE: …,de_CH: …,<… and so on for other locales …>

}

{_id: 42,en_US: { name: …, description: …, <etc…> },en_GB: { name: …, description: …, <etc…> },fr_FR: { name: …, description: …, <etc…> },fr_CA: { name: …, description: …, <etc…> },de_DE: …,de_CH: …,<… and so on for other locales …>

}

Conséquences de la nouvelle conception de schéma

• Les requêtes ont provoqué une surcharge de mémoire minime

• x20, car de nombreux produits consomment simultanément de la RAM

• Réduction de l'utilisation des E/S du disque• Réduction de la latence de l'application{

_id: "375-en_GB",name: …,description: …, <… the rest of the document …>

}

Modèles de conception de schéma

• Modèle : quantités de pré-calcul intéressantes, idéalement avec chaque opération d'écriture

• Modèle : placement d'éléments non liés dans différentes collections pour exploiter l'indexation

• Modèle à ne pas suivre : ajouter constamment des tableaux

• Modèle à ne pas suivre : importer des schémas relationnels directement dans MongoDB

Ressources pour la conception de schémas

• En savoir plus sur la modélisation des données, à 14 h à l'auditorium Robertston 1 (en anglais)

• Série de billets de blog, « 6 règles empiriques » (en anglais)– Partie 1 : http://goo.gl/TFJ3dr– Partie 2 : http://goo.gl/qTdGhP– Partie 3 : http://goo.gl/JFO1pI

• Webinaires, formations, conseils, etc.

Conseils d'optimisation : Indexation

Index par arbre-B• Références structurées en arbre vers vos

documents• Premier facteur de performance réglable • L'indexation et la conception de schémas

vont de pair

Présentation des erreurs d'indexation courantes et des solutions pour les résoudre

• Échec du développement des index requis– Exécutez .explain(), examinez attentivement le journal de

la requête, mtools, collection system.profile

• Développement d'index superflus– Discutez avec les développeurs de votre application à

propos de son utilisation

• Exécution des requêtes ad hoc en environnement de production– Utilisez un environnement de simulation, utilisez des

membres secondaires

Fichiers journaux mongod

Sun Jun 29 06:35:37.646 [conn2] query test.docs query: { parent.company: "22794", parent.employeeId: "83881" } ntoreturn:1 ntoskip:0 nscanned:806381 keyUpdates:0 numYields: 5 locks(micros) r:2145254 nreturned:0 reslen:20 1156ms

mtools• http://github.com/rueckstiess/mtools• Analyse du fichier journal pour examiner les

requêtes aux performances faibles– Découvrir les requêtes dont la durée dépasse

1 000 ms entre 6 h et 18 h :– mlogfilter mongodb.log --from 06:00 --to 18:00 --slow 1000 > mongodb-filtered.log

Stratégies d'indexation• Créez des index pouvant prendre en charge vos requêtes.• Créez des index hautement sélectifs• Éliminez les index en double en utilisant des index composés

– db.collection.ensureIndex({A:1, B:1, C:1})– permet aux requêtes d'utiliser le préfixe situé le plus à

gauche• Organisez les colonnes d'index pour prendre en charge les

analyses et les tris• Créez des index prenant en charge les requêtes traitées• Empêchez les analyses de collections dans des

environnements de pré-productiondb.getSiblingDB("admin").runCommand( { setParameter: 1, notablescan: 1 } )

Conseils d'optimisation : Surveillance

FAITES-LE

IMMÉDIATEMENT

EN PRÉ-PROD/STRESS

MongoDB Management Services (MMS)

Sauvegarde

Surveillance

Automatisation

MMS : Indicateurs de base de données

Configuration de la surveillance MMS

Version Cloud de MMS

1. Rendez-vous sur http://mms.mongodb.com

2. Créez un compte3. Installez un agent dans votre centre

de données4. Ajoutez des hôtes à partir de

l'interface Web5. Et voilà !

Moteur de stockage WiredTiger

Performances multipliées de 7 à 10 fois, économie de 50 à 80 % sur l'espace de stockagePrésentation du moteur de stockage WiredTiger• Modèle de données, langage de

requête, opérations identiques• Amélioration des performances

d'écriture en raison du contrôle des accès simultanés au niveau du document

• Économies de stockage en raison d'une compression native

• Rétrocompatible à 100%• Mise à niveau sans temps d'arrêt

MongoDB 3.0MongoDB 2.6

Performances

Montée en charge verticale

Facteurs :– RAM– Disque– CPU– Réseau

Nous sommes ici pour vous soutenir

Primaire

Secondaire

Secondaire

Jeu de réplicas Primaire

Secondaire

Secondaire

Jeu de réplicas

Le jeu de travail dépasse la mémoire physique

Exemple concret

• Modifications d'état pour des entités de l'entreprise

• Modifications d'état dans des lots– parfois, 10 % des entités sont mises à

jour– parfois, 100 % sont mises à jour

Architecture initiale

Cluster partitionné, 4 partitions soutenues par un disque rotatif

Application / mongosmongod

Montée en charge horizontaleL'évolution rapide d'une entreprise entraîne des partitionnements supplémentaires

Application / mongos

…16 partitionnements supplémentaires…

mongod

Montée en charge verticale

Montée en charge des E/S par seconde avec des disques SSD

Application / mongosmongod SSD

Avant d'ajouter du matériel...

• Vérifiez que vous résolvez le bon problème de montée en charge

• Résolvez d'abord les problèmes touchant le schéma et l'index– les problèmes de schéma et d'index peuvent ressembler à

des problèmes de matériel• Réglez le système d'exploitation

– Planificateur ulimits, swap, NUMA, NOOP avec hyperviseurs• Réglez le sous-système d'E/S

– ext4 ou XFS par rapport à SAN, RAID10, readahead, noatime• Consultez la page « Notes de production » de MongoDB• Tenez compte des avertissements au démarrage du fichier

journal

Montée en charge horizontale

Présentation du partitionnement

Primaire

Secondaire

Secondaire

Partition 1

Primaire

Secondaire

Secondaire

Partition 2

Primaire

Secondaire

Secondaire

Partition 3

Primaire

Secondaire

Secondaire

Partition N

Routeur de requête

Routeur de requête

Routeur de requête

……

Pilote

Application

Partitionnement par plage

mongod

Scalabilité de lecture/écriture

Plage de clés0...100

Partitionnement par plage

Scalabilité de lecture/écriture

mongod mongod

Plage de clés0...50

Plage de clés51...100

Partitionnement

mongod mongod mongod mongod

Plage de clés0...25

Plage de clés26...50

Plage de clés51...75

Plage de clés76... 100

Scalabilité de lecture/écriture

Caractéristiques d'une clé de partition

• Une clé de partition adéquate a :– une cardinalité suffisante– des écritures distribuées– des lectures ciblées (« isolement des requêtes »)

• Si possible, la clé de partition doit être dans chaque requête– sinon, procédez par ventilation/regroupement

• Il est important de choisir une clé de partition adéquate.– Elle a une incidence sur les performances et la

scalabilité.– Le fait de la changer ultérieurement s'avère coûteux.

Attention aux clés de partition ascendantes

• L'augmentation régulière des valeurs d'une clé de partition peut entraîner des « points sensibles » lors des insertions

• Exemples : horodatages, _id

Partition 1

mongos

Partition 2

Partition 3

Partition N

[ ISODate(…), $maxKey )

Procéder à la montée en charge d'une équipe opérationnelle

MongoDB Management Service (MMS)

Montée en charge simplifiée

Respect des accords sur les niveaux de service (ANS)

Automatisation de vos meilleures pratiques

Réduction des frais de gestion

Sans MMS

Exemple de déploiement : 12 serveurs

Installation et configurationPlus de 150 étapes

…Gestion des erreurs, limitation, alertes

Montée en charge, déplacement des serveurs, redimensionnement du journal des opérations (oplog), etc.De 10 à plus de 180 étapes

Mises à niveau vers une version supérieure ou antérieurePlus de 100 étapes

Avec MMS

Les tâches courantes sont effectuées en quelques minutes

• Déploiement : n'importe quelle taille, pour la plupart des topologies

• Mise à niveau vers une version supérieure/antérieure : sans temps d'arrêt

• Montée en charge : ajout/suppression de partitions ou de réplicas sans temps d'arrêt

• Redimensionnement du journal des opérations (Oplog) : sans temps d'arrêt

• Spécification des utilisateurs, des rôles et des rôles personnalisés

• Provisionnement d'instances AWS et optimisation pour MongoDB

MongoDB à l'échelle

250 M de fluctuations/secondePlus de 300 000 opérations/secondePlus de 500 000 opérations/seconde

Agence fédérale

Performances1 400 serveurs

Plus de 1 000 serveurs

Plus de 250 serveurs

Entreprise de loisirs

Cluster

Pétaoctets

Dizaines de milliards d'objets13 milliards de documents

Données

Société Internet asiatique

top related