# Fil de travail performance
Mercredi 11 mars 2020
# Objectifs performance
- SystÚme matériel actuel : 1 k TPS stable en régime établi, pic 5 k, scalabilité horizontale démontrée
- Plus dâinstances â plus de performance, de façon quasi linĂ©aire.
- Valider lâinfrastructure minimale pour 1 k TPS (TPS financiers).
- DĂ©terminer la configuration dâentrĂ©e et le coĂ»t (AWS et sur site)
# POC
Tester lâimpact dâun remplacement direct de MySQL par un service rĂ©seau mĂ©moire partagĂ©e type Redis (algorithme Redlock si des verrous sont nĂ©cessaires).
Tester une autre façon de partager lâĂ©tat : version allĂ©gĂ©e orientĂ©e Ă©vĂ©nements avec du CQRS.
# Ressources
- Canal Slack :
#perf-engineering - Présentation performance mi-PI (opens new window)
- Mise en place des composants de monitoring (opens new window)
# Actions / suivi
Quelles mĂ©triques Kafka (client et broker) suivre ? â assistance Confluent
Explorer verrouillage et rĂšglement de position â assistance Sybrin
- Examiner RedLock â verrouillage pessimiste vs automatique
- Supprimer la base partagée centrale (verrouillage automatique sur Redis)
Combiner prepare / position handler avec une base distribuée
Examiner le client Node.js et son impact sur Kafka, la configuration de Node et le client Kafka final â Nakul
Réactiver le tracing pour la latence et le comportement des applications
VĂ©rifier que les comptes dâappels ont Ă©tĂ© rationalisĂ©s (niveau dĂ©taillĂ©)
Valider les temps de traitement sur les handlers et lâutilisation du cache
ModĂšles asynchrones dans Node
- Manque dâexpert MySQL / Percona approfondi
- Exploitons-nous correctement ces briques ?
Quelle couche de cache (en mémoire) ?
Examiner la modĂ©lisation Ă©vĂ©nementielle â identifier les Ă©vĂ©nements du domaine
Node.js / Kubernetes â
Prioriser les problĂšmes applicatifs plutĂŽt que purement dâarchitecture
Revue de lâapproche asynchrone (problĂšme Node.js plus large) â modĂšles Ă threads Ă optimiser â Nakul
# Notes de réunion / détails
# Historique
- Mise en place technologique ; lâespoir Ă©tait que la conception rĂ©ponde Ă un besoin entreprise
- Lâeffort communautaire nâa pas priorisĂ© des « tranches » du systĂšme de niveau entreprise ou peu coĂ»teuses Ă exploiter
- Choix technologiques OSS
# Objectifs
- Optimiser le systĂšme actuel
- RĂ©duire les coĂ»ts dâexploitation
- Permettre de scaler jusquâĂ 5 k TPS
- Garantir que les services à valeur ajoutée accÚdent de façon efficace et sécurisée aux données de transaction
# Contraintes de test
- Seulement le « golden transfer » â jambe de transfert
- Flux de transfert
- Simulateurs (ancien et avancĂ©) â ancien pour continuitĂ©
- Gestionnaire de timeout désactivé
- 8 DFSP (organisations participantes) â avec plus de DFSP on pourrait scaler davantage
# Processus
Jmeter initie la requĂȘte payeur
Lâancien simulateur reçoit le callback fulfill notify
Lâancien simulateur traite le payĂ©, initie le callback dâexĂ©cution
Enregistrement dans la table positions pour chaque DFSP
- a. Algorithme partiel avec verrouillage pour réserver les fonds, calculs et commits finaux
- b. Le gestionnaire de positions traite un enregistrement Ă la fois
Un algorithme futur pourrait traiter en lot
- Un transfert est géré par un gestionnaire de positions
- Les transferts sont tous préfinancés
- Réduction des coûts de rÚglement
- ContrĂŽle de la vitesse de rĂ©ponse des DFSP Ă la requĂȘte fulfill (finaliser les transferts engagĂ©s avant les nouvelles requĂȘtes)
Le systÚme doit expirer les transferts dépassant 30 secondes
- Toute refonte des bases
- Cas de test
Transaction financiĂšre
- Bout en bout
- Prepare seulement
- Fulfil seulement
Caractérisation Mojaloop par service
- Services et handlers
- Architecture streaming et bibliothĂšques
- Base de données
- Quâest-ce qui a changĂ© : 150 Ă 300 TPS ?
Traitement des messages
Gestionnaire de positions (mode mixte, aléatoire
- Mesure de latence
- 5 s pour la base, X s pour Kafka
- Comment mesurer ?
# Cibles
- Assez haut pour que le systĂšme fonctionne correctement
- Monter en charge (ajout de x DFSP)
- Cas suspects Ă investiguer
- Observer les contentions autour de la base
- Base partagée, 600 ms sans erreur
Contention entiĂšrement sur la base
Goulot : base (distribuer les systÚmes pour indépendance)
16 bases de données bout en bout
GSMA â 500 TPS
Quelle conception optimale ?
# Contentions
Contention au niveau handler systĂšme
- OĂč le systĂšme peut scaler
Si des changements dâarchitecture sont nĂ©cessaires, on peut explorer
- Cohérence par DFSP
- ParallĂ©lisation des flux dâinformation â question ouverte
RĂ©sultats « sku » dâune seule base pour tous les DFSP
DĂ©fi : oĂč arrive-t-on avec du matĂ©riel supplĂ©mentaire ?
- Limites de la conception applicative
Transferts financiers (entrants / sortants du systĂšme)
- SystĂšmes dâaudit
- Activité de rÚglement
- Regrouper en base résout certains problÚmes
- Retour Confluent
ProblÚmes de base partagée, bases multiples
ProblĂšmes au niveau conception applicative
Cas oĂč de nombreux simulateurs / bacs Ă sable ont Ă©tĂ© lancĂ©s
- Sâappuyer sur traceurs et scans en production
- Miguel : tracing dĂ©sactivĂ© pour lâinstant
# ProblĂšmes connus
- Charge CPU sur les machines (Node en attente) â rĂ©optimiser le code
- Les temps de traitement augmentent avec le temps
# Optimisation
- Monolithe distribuĂ© â PRISM â supprimer les lectures redondantes
- Fusionner les handlers â Prepare+Position et Fulfil+Position
# Quâest-ce quâon cherche Ă corriger ?
- Pouvons-nous scaler le systĂšme ?
- Quel coût pour scaler ? (coût unitaire de scale)
- Comprendre comment faire petit et grand scale
- Ressources optimisées
- 2,5 sprints
- Besoin de scaler horizontalement
- Ajouter audit et reproductibilité
# Participants
- Don, Joran (nouvel expert perf) â Coil
- Sam, Miguel, Roman, Valentine, Warren, Bryan, Rajiv â ModusBox
- Pedro â Crosslake
- Rhys, Nakul Mishra â Confluent
- Miller â Gates Foundation
- Présents : Lewis (CL), Rob (MB), Roland (Sybrin), Greg (Sybrin), Megan (V), Simeon (V), Kim (CL)
