# 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
    1. Plus d’instances ≈ plus de performance, de façon quasi linĂ©aire.
    2. Valider l’infrastructure minimale pour 1 k TPS (TPS financiers).
    3. 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

# Actions / suivi

  • Quelles mĂ©triques Kafka (client et broker) suivre ? — assistance Confluent

  • Explorer verrouillage et rĂšglement de position — assistance Sybrin

    1. Examiner RedLock — verrouillage pessimiste vs automatique
    2. 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

    1. Manque d’expert MySQL / Percona approfondi
    2. 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

  1. Mise en place technologique ; l’espoir Ă©tait que la conception rĂ©ponde Ă  un besoin entreprise
  2. L’effort communautaire n’a pas priorisĂ© des « tranches » du systĂšme de niveau entreprise ou peu coĂ»teuses Ă  exploiter
  3. Choix technologiques OSS

# Objectifs

  1. Optimiser le systĂšme actuel
  2. RĂ©duire les coĂ»ts d’exploitation
  3. Permettre de scaler jusqu’à 5 k TPS
  4. 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

  1. Seulement le « golden transfer » — jambe de transfert
  2. Flux de transfert
  3. Simulateurs (ancien et avancĂ©) — ancien pour continuitĂ©
  4. Gestionnaire de timeout désactivé
  5. 8 DFSP (organisations participantes) — avec plus de DFSP on pourrait scaler davantage

# Processus

  1. Jmeter initie la requĂȘte payeur

  2. L’ancien simulateur reçoit le callback fulfill notify

  3. L’ancien simulateur traite le payĂ©, initie le callback d’exĂ©cution

  4. 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
  5. Un algorithme futur pourrait traiter en lot

  • Un transfert est gĂ©rĂ© par un gestionnaire de positions
    • Les transferts sont tous prĂ©financĂ©s
  1. Réduction des coûts de rÚglement
  2. 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
  1. 5 s pour la base, X s pour Kafka
  2. Comment mesurer ?

# Cibles

  1. Assez haut pour que le systĂšme fonctionne correctement
  2. Monter en charge (ajout de x DFSP)
  3. Cas suspects Ă  investiguer
  4. Observer les contentions autour de la base
  5. 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

  1. Contention au niveau handler systĂšme

    • OĂč le systĂšme peut scaler
  2. Si des changements d’architecture sont nĂ©cessaires, on peut explorer

    • CohĂ©rence par DFSP
    • ParallĂ©lisation des flux d’information — question ouverte
  3. RĂ©sultats « sku » d’une seule base pour tous les DFSP

  4. DĂ©fi : oĂč arrive-t-on avec du matĂ©riel supplĂ©mentaire ?

    • Limites de la conception applicative
  5. 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
  6. ProblÚmes de base partagée, bases multiples

  7. ProblĂšmes au niveau conception applicative

  8. 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

  1. Charge CPU sur les machines (Node en attente) — rĂ©optimiser le code
  2. Les temps de traitement augmentent avec le temps

# Optimisation

  1. Monolithe distribuĂ© — PRISM — supprimer les lectures redondantes
  2. Fusionner les handlers — Prepare+Position et Fulfil+Position

# Qu’est-ce qu’on cherche à corriger ?

  1. Pouvons-nous scaler le systĂšme ?
  2. Quel coût pour scaler ? (coût unitaire de scale)
  3. Comprendre comment faire petit et grand scale
  4. Ressources optimisées
  5. 2,5 sprints
  6. Besoin de scaler horizontalement
  7. 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)