SlideShare une entreprise Scribd logo
Kill the bottleneck
Servir des maps à haute performance
by Loïc Ortola, CTO
jawgmaps
Les incontournables
1.  C’est quoi une carte?
2.  Nos choix TKs
3.  Rétrospective Load-testing
4.  è Continuous improvement
1. Qu’entend-on par Carte?
4 métiers principaux dans les maps digitales
Geocoding
Routing (Itinéraire)
Cartes (Fonds de carte) ex : WMTS, WMS, Slippy Map Tiles
Données supplémentaires (Vos POIs) ex : WFS
1. Qu’entend-on par Carte?
Carte de Paris à l’échelle 1:15 000 (zoom 15)
Monde entier: 70 trillion pixels
1. Qu’entend-on par Carte?
Carte de Paris à l’échelle 1:15 000 (zoom 15)
Monde entier: 1 billion tiles 256x256 pixels
1. Qu’entend-on par Carte?
Zoom 0
Scale 1:500 Million
Zoom 1
Scale 1:250 Million
1. Qu’entend-on par Carte?
Rendu jusqu’au Zoom 19:
Somme des tuiles des zooms 0 à 19:
S = ~= 366 billion tiles
1. Qu’entend-on par Carte?
Ca sert à quoi un map-server?
A dessiner des données sur des cartes (routes etc…)
A faciliter le stockage / le cache / les flux de données
A gérer la stratégie d’import / réimport
Dessine moi une carte
Entrée: Règles de “dessin”
Sortie: Moteur de rendu
Lecture en DB
Clipping / drawing
Prend du temps et des ressources
quelques ms à plusieurs minutes de rendu
utilise le CPU, la mémoire & le disque
Dessine moi une carte
Besoin d’optimisations
… sur la DB
… sur le style
… sur les requêtes
Optimiser le rendu des tuiles
Concept : La Meta-tile
Rendre plusieurs tuiles côte à côte, et les découper ensuite
Avantages
Empêche de saturer les I/O
Diminue grandement les connections actives BDD
Inconvénients
Génère des tuiles inutiles è plus long
Optimiser le rendu des tuiles
Rendement
28/64 = 43%
Ex: Meta8
Rendement
28/256 = 11%
Donc…
Impossible de pré-calculer toutes les tuiles du monde à tous les niveaux de zoom.
c’est (infiniment) long
ça prend trop de place, c’est éphémère
Besoin de logiques de “cache” et de “pré-rendu”
Système hautement contraint
Stockage des tuiles et cache
Une “map” ó entre 12 et 48 tuiles
è Comment diminuer mes I/O quand je vais chercher des données?
Stockage des tuiles et cache
Stocker les tuiles contigues ensemble (Meta-Tile)
Concentrer les requêtes demandant la même information
Garder un cache mémoire (LRU)
(Ré-)importer des données
Une archive à importer dans une base
Des traitements sur la donnée pour le rendu
Peut prendre plusieurs heures à quelques jours
(Ré-)importer des données
Attention à la stratégie de mise à jour (fréquence, diff)
Besoin d’une stratégie d’invalidation des caches
A dimensionner de façon intelligente
Nos choix TKs
Comment bâtir nos services
Robustes, scalables et performants
Hosting strategy
Hosting Strategy
+ : Ressources dédiées
- : Scalabilité, prix,
defaillance HW
+ : TTM réduit
- : Latence, vendor-lock, $
Serveurs Dédiés Cloud + EBS +
CDN + ALB + ASG
+ : Faible Latence, full-control
- : Long à dev, risque de failure
Cloud + Manuel
- : ressource mutualisée
Monolith vs Micro-Service
Micro-Service approach
Pros:
•  Maintenabilité
•  Micro-Scaling
•  Technology-independent
Cons:
•  + de chaos, + de failles
•  Nécessite une infra bien pensée
•  Coute (en général) plus cher
Orchestrator/Scheduler
vs
Homemade
Homemade
Paradigmes:
è Detect-fast, Fail-fast, recover-fast
è No recovery automation
Service-discovery / DNS: Consul
Outils monitoring: Telegraf, Kapacitor
Time series DB: InfluxDB
Reactive programming
Reactive
Modèle classique:
1 requête = 1 thread
10 requêtes = 10 threads
100 requêtes = 100 threads
… Mais combien d’opérations peuvent réellement être
exécutées en même temps?
Modèle réactif:
Des requêtes, des “workers”
Optimiser l’activité du thread plutôt que le nombre de threads
27
Architecture
24 prod servers
6 websites
Lab – Manager – Style –
Demo – WWW – Swagger
9 public APIs
Account – Storage - Static maps – Tile-edge –
Auth – Stats – Style Registry – Geocoding – Routing
11 backend services
Cassandra – InfluxDB – Telegraf – Grafana – Kapacitor –
Consul – Registry – Gitlab – PFSense – YouTrack – PostGreSQL
4 private APIs
Keystore – Tile-edge-diff –
Tile-edge-renderer –Stats – Tile-edge-worker
2 SDKs
Android, iOS
Load Testing
Les conditions aux limites
Objectifs
•  Admettre le plus de trafic possible sur chaque machine
•  Avoir un temps de réponse le plus bas possible
KPIs
•  Performance =
Maximiser le nombre de requêtes par seconde
+
99th percentile <= 800ms
99.9th percentile <= 1200 ms
0 timeout ou requête non satisfaite
Modern DevOps - kill the bottleneck (part 2/2)
Test de performance
•  Mode Cluster
•  Métriques ultra-détaillées
•  Live reporting
Architecture dans la Réalité
PRISE EN MAIN
RAPIDITE
EXACTITUDE
BANDE PASSANTE
CPU
MEMOIRE
CPU
CPU
MEMOIRE
I/O
UTILISATEURS
APP CACHES
RENDERS
APP LB
APP LB
BANDE PASSANTE
CPU
Architecture Test de Charge
EG-30
HG-30
EG-15
HG-120
INJECTEURS
APP CACHES
RENDERS
APP LB
APP LB EG-7
•  8 vCores 2,3Ghz
•  30 Go RAM
•  2 Gbps BP
•  2 vCores 2,3Ghz
•  7 Go RAM
•  300 Mbps BP
•  8 vCores 3,1Ghz
•  30 Go RAM
•  2 Gbps BP
•  4 vCores 2,3Ghz
•  15 Go RAM
•  1 Gbps BP
•  32 vCores 3,1Ghz
•  120 Go RAM
•  4 Gbps BP
Rétrospective : les embûches
Setup
Spawn time
OVH Manager vs Horizon + Nova + Neutron
Déploiement
SSHJ + OpenStack
Run
nf_conntrack_max
steal-cpu et network softirq
Bande passante
Rétrospective : avec 4 caches
850 000 utilisateurs en 30 min
Entre 1 et 15 map views / user(ó entre 28 et 420 tuiles / user)
Sur les 12 zones les plus peuplées du monde entier
Rétrospective : avec 4 caches
108 k req/s en pointe ó ~25k req/s/cache
Moyenne des temps de réponse = 65 ms
99.9th percentile de temps de réponse < 600ms
Rétrospective : avec 4 caches
2 Gbps atteints sur EG-30
~10k utilisateurs concurrents
Rétrospective : avec 4 caches
90% CPU utilisé
5% IOWait
Steal & softirq négligeables
Rétrospective : recommandations
Optimiser la bande passante
Choisir les bonnes instances (Cloud ou Dédié)?
Compression g-zip (tile-edge-cache)?
Affiner le tuning kernel / DB / Runtime / Conf
file descriptors, ulimit, conntrack
PostGIS / profil d’import
Optimiser l’architecture
Cache de niveau 2 – Object Storage
Séparation DB / Render
300+ Références
42
300+ Références
43
Pourquoi n’es-tu pas sur cette liste?
Jawg Lab
Viens, on est bien!
White Papers
1.  Map services: from theory to implementation
Disponible maintenant @ http://jawg.io
2.  Map services: Benchmarks & high-scale profiles
Disponibles sur demande
Loïc Ortola
CEO @ jawg
Loïc Ortola @LoicOrtola
loic@jawg.io
jawgmaps Merci
?

Contenu connexe

PDF
Modern DevOps - kill the bottleneck (part 1/2)
PPTX
PDF
Meetup #13 osfr - ops - hubiC - pulbic
PPT
Big Data Paris 2015 - Cassandra chez Chronopost
PDF
Apache Cassandra - Concepts et fonctionnalités
PPTX
Cassandra pour les développeurs java
PPTX
Découverte de Redis
PDF
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015
Modern DevOps - kill the bottleneck (part 1/2)
Meetup #13 osfr - ops - hubiC - pulbic
Big Data Paris 2015 - Cassandra chez Chronopost
Apache Cassandra - Concepts et fonctionnalités
Cassandra pour les développeurs java
Découverte de Redis
Apache Flink par Bilal Baltagi Paris Spark Meetup Dec 2015

Tendances (19)

PPTX
Logs serveurs : du terme barbare à la simplicité de la réalité
PDF
05 2014-varnish
PDF
BBL - Monitoring - kyriba
PDF
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
PDF
Journée DevOps : Tests de performance en continu
PDF
Hadoop et son écosystème - v2
PPTX
04 big data fournisseurs
PDF
REX Storm Redis
PDF
Paris stormusergroup intrudocution
PDF
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
PDF
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
PPTX
Scalabilité de MongoDB
PDF
Pachyderm big data de l'ère docker
PDF
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
PPTX
Réduire la taille de son apk
PDF
Presentation Ceph
PDF
Comment gérer des applications nécessitant la persistance des données avec Ku...
PPTX
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et Mon...
PPTX
Hadoop unit
Logs serveurs : du terme barbare à la simplicité de la réalité
05 2014-varnish
BBL - Monitoring - kyriba
[Breizhcamp 2015] Refactoring avec 1,22% de code couvert par les tests ... Go...
Journée DevOps : Tests de performance en continu
Hadoop et son écosystème - v2
04 big data fournisseurs
REX Storm Redis
Paris stormusergroup intrudocution
Introduction à Apache Cassandra — IppEvent chez OVH 2017-03-02
Poitou Charentes JUG - Traçabilité dans une architecture distribuée avec Node...
Scalabilité de MongoDB
Pachyderm big data de l'ère docker
XebiCon'16 : WeScale - DNS as a Service, the OpenStack way. Par Pascal Edoua...
Réduire la taille de son apk
Presentation Ceph
Comment gérer des applications nécessitant la persistance des données avec Ku...
Nantes JUG - Traçabilité dans une architecture distribuée avec Node.js et Mon...
Hadoop unit
Publicité

Similaire à Modern DevOps - kill the bottleneck (part 2/2) (20)

PPTX
OVH Summit 2016 - Map as a Service by Löic Ortola
PDF
Retour d’expérience - Architecture MicroService chez BotsUnit
PDF
Big Data ou comment retrouver une aiguille dans une botte de foin
PDF
PPT
Cours 1/3 "Architecture Web"
PDF
JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...
PDF
Architecture d’une app qui fait 5 millions de visites par mois
PPTX
FME World Tour 2016: ORES
PPT
Technologies & Systèmes
PDF
Cartographie du big data
PDF
Map as a Service OVH Summit 2016
PDF
Architectures.Phpquebec1007
PDF
Cellenza microservices - tour d'horizon - v0.1
PDF
Google App Engine
PDF
Virtua : Performances Magento : Solutions efficaces et accessibles
PDF
Tk03 Google App Engine Fr
PDF
BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...
PPTX
Propostion un Iaas
PPT
Conférence AFUP 20minutes.Fr
ODP
Prez -chtijug-29032016-(micro)services, loadbalancing et gestion des erreurs ...
OVH Summit 2016 - Map as a Service by Löic Ortola
Retour d’expérience - Architecture MicroService chez BotsUnit
Big Data ou comment retrouver une aiguille dans une botte de foin
Cours 1/3 "Architecture Web"
JUG Summer Camp (Sep 2011) - Les applications et architectures d’entreprise d...
Architecture d’une app qui fait 5 millions de visites par mois
FME World Tour 2016: ORES
Technologies & Systèmes
Cartographie du big data
Map as a Service OVH Summit 2016
Architectures.Phpquebec1007
Cellenza microservices - tour d'horizon - v0.1
Google App Engine
Virtua : Performances Magento : Solutions efficaces et accessibles
Tk03 Google App Engine Fr
BigData et Hadoop au secours de téraoctets de logs inexploitables chez l'un d...
Propostion un Iaas
Conférence AFUP 20minutes.Fr
Prez -chtijug-29032016-(micro)services, loadbalancing et gestion des erreurs ...
Publicité

Modern DevOps - kill the bottleneck (part 2/2)

  • 1. Kill the bottleneck Servir des maps à haute performance by Loïc Ortola, CTO jawgmaps
  • 2. Les incontournables 1.  C’est quoi une carte? 2.  Nos choix TKs 3.  Rétrospective Load-testing 4.  è Continuous improvement
  • 3. 1. Qu’entend-on par Carte? 4 métiers principaux dans les maps digitales Geocoding Routing (Itinéraire) Cartes (Fonds de carte) ex : WMTS, WMS, Slippy Map Tiles Données supplémentaires (Vos POIs) ex : WFS
  • 4. 1. Qu’entend-on par Carte? Carte de Paris à l’échelle 1:15 000 (zoom 15) Monde entier: 70 trillion pixels
  • 5. 1. Qu’entend-on par Carte? Carte de Paris à l’échelle 1:15 000 (zoom 15) Monde entier: 1 billion tiles 256x256 pixels
  • 6. 1. Qu’entend-on par Carte? Zoom 0 Scale 1:500 Million Zoom 1 Scale 1:250 Million
  • 7. 1. Qu’entend-on par Carte? Rendu jusqu’au Zoom 19: Somme des tuiles des zooms 0 à 19: S = ~= 366 billion tiles
  • 9. Ca sert à quoi un map-server? A dessiner des données sur des cartes (routes etc…) A faciliter le stockage / le cache / les flux de données A gérer la stratégie d’import / réimport
  • 10. Dessine moi une carte Entrée: Règles de “dessin” Sortie: Moteur de rendu Lecture en DB Clipping / drawing Prend du temps et des ressources quelques ms à plusieurs minutes de rendu utilise le CPU, la mémoire & le disque
  • 11. Dessine moi une carte Besoin d’optimisations … sur la DB … sur le style … sur les requêtes
  • 12. Optimiser le rendu des tuiles Concept : La Meta-tile Rendre plusieurs tuiles côte à côte, et les découper ensuite Avantages Empêche de saturer les I/O Diminue grandement les connections actives BDD Inconvénients Génère des tuiles inutiles è plus long
  • 13. Optimiser le rendu des tuiles Rendement 28/64 = 43% Ex: Meta8 Rendement 28/256 = 11%
  • 14. Donc… Impossible de pré-calculer toutes les tuiles du monde à tous les niveaux de zoom. c’est (infiniment) long ça prend trop de place, c’est éphémère Besoin de logiques de “cache” et de “pré-rendu” Système hautement contraint
  • 15. Stockage des tuiles et cache Une “map” ó entre 12 et 48 tuiles è Comment diminuer mes I/O quand je vais chercher des données?
  • 16. Stockage des tuiles et cache Stocker les tuiles contigues ensemble (Meta-Tile) Concentrer les requêtes demandant la même information Garder un cache mémoire (LRU)
  • 17. (Ré-)importer des données Une archive à importer dans une base Des traitements sur la donnée pour le rendu Peut prendre plusieurs heures à quelques jours
  • 18. (Ré-)importer des données Attention à la stratégie de mise à jour (fréquence, diff) Besoin d’une stratégie d’invalidation des caches A dimensionner de façon intelligente
  • 19. Nos choix TKs Comment bâtir nos services Robustes, scalables et performants
  • 21. Hosting Strategy + : Ressources dédiées - : Scalabilité, prix, defaillance HW + : TTM réduit - : Latence, vendor-lock, $ Serveurs Dédiés Cloud + EBS + CDN + ALB + ASG + : Faible Latence, full-control - : Long à dev, risque de failure Cloud + Manuel - : ressource mutualisée
  • 23. Micro-Service approach Pros: •  Maintenabilité •  Micro-Scaling •  Technology-independent Cons: •  + de chaos, + de failles •  Nécessite une infra bien pensée •  Coute (en général) plus cher
  • 25. Homemade Paradigmes: è Detect-fast, Fail-fast, recover-fast è No recovery automation Service-discovery / DNS: Consul Outils monitoring: Telegraf, Kapacitor Time series DB: InfluxDB
  • 27. Reactive Modèle classique: 1 requête = 1 thread 10 requêtes = 10 threads 100 requêtes = 100 threads … Mais combien d’opérations peuvent réellement être exécutées en même temps? Modèle réactif: Des requêtes, des “workers” Optimiser l’activité du thread plutôt que le nombre de threads 27
  • 28. Architecture 24 prod servers 6 websites Lab – Manager – Style – Demo – WWW – Swagger 9 public APIs Account – Storage - Static maps – Tile-edge – Auth – Stats – Style Registry – Geocoding – Routing 11 backend services Cassandra – InfluxDB – Telegraf – Grafana – Kapacitor – Consul – Registry – Gitlab – PFSense – YouTrack – PostGreSQL 4 private APIs Keystore – Tile-edge-diff – Tile-edge-renderer –Stats – Tile-edge-worker 2 SDKs Android, iOS
  • 30. Objectifs •  Admettre le plus de trafic possible sur chaque machine •  Avoir un temps de réponse le plus bas possible
  • 31. KPIs •  Performance = Maximiser le nombre de requêtes par seconde + 99th percentile <= 800ms 99.9th percentile <= 1200 ms 0 timeout ou requête non satisfaite
  • 33. Test de performance •  Mode Cluster •  Métriques ultra-détaillées •  Live reporting
  • 34. Architecture dans la Réalité PRISE EN MAIN RAPIDITE EXACTITUDE BANDE PASSANTE CPU MEMOIRE CPU CPU MEMOIRE I/O UTILISATEURS APP CACHES RENDERS APP LB APP LB BANDE PASSANTE CPU
  • 35. Architecture Test de Charge EG-30 HG-30 EG-15 HG-120 INJECTEURS APP CACHES RENDERS APP LB APP LB EG-7 •  8 vCores 2,3Ghz •  30 Go RAM •  2 Gbps BP •  2 vCores 2,3Ghz •  7 Go RAM •  300 Mbps BP •  8 vCores 3,1Ghz •  30 Go RAM •  2 Gbps BP •  4 vCores 2,3Ghz •  15 Go RAM •  1 Gbps BP •  32 vCores 3,1Ghz •  120 Go RAM •  4 Gbps BP
  • 36. Rétrospective : les embûches Setup Spawn time OVH Manager vs Horizon + Nova + Neutron Déploiement SSHJ + OpenStack Run nf_conntrack_max steal-cpu et network softirq Bande passante
  • 37. Rétrospective : avec 4 caches 850 000 utilisateurs en 30 min Entre 1 et 15 map views / user(ó entre 28 et 420 tuiles / user) Sur les 12 zones les plus peuplées du monde entier
  • 38. Rétrospective : avec 4 caches 108 k req/s en pointe ó ~25k req/s/cache Moyenne des temps de réponse = 65 ms 99.9th percentile de temps de réponse < 600ms
  • 39. Rétrospective : avec 4 caches 2 Gbps atteints sur EG-30 ~10k utilisateurs concurrents
  • 40. Rétrospective : avec 4 caches 90% CPU utilisé 5% IOWait Steal & softirq négligeables
  • 41. Rétrospective : recommandations Optimiser la bande passante Choisir les bonnes instances (Cloud ou Dédié)? Compression g-zip (tile-edge-cache)? Affiner le tuning kernel / DB / Runtime / Conf file descriptors, ulimit, conntrack PostGIS / profil d’import Optimiser l’architecture Cache de niveau 2 – Object Storage Séparation DB / Render
  • 44. Jawg Lab Viens, on est bien!
  • 45. White Papers 1.  Map services: from theory to implementation Disponible maintenant @ http://jawg.io 2.  Map services: Benchmarks & high-scale profiles Disponibles sur demande
  • 46. Loïc Ortola CEO @ jawg Loïc Ortola @LoicOrtola loic@jawg.io jawgmaps Merci ?