Cache et architecture pour une API de paris sportifs

Travail antérieur à SIMYL Research d’un membre de l’équipe ; la provenance est à la fin de la fiche.

Problème

Une API de paris sportifs en temps réel recevait de nombreuses requêtes répétées qui recalculaient les prix à la source. Lors des pics de trafic, le phénomène d’avalanche (thundering herd) multipliait la charge et la latence.

Intervention

Cache en mémoire avec protocole single-flight (un seul calcul par clé pendant que les autres fils d’exécution attendent le résultat), routage par hachage vers plusieurs passerelles pour que les requêtes d’une même clé arrivent au même nœud, et une seconde couche de cache partagée. Le protocole de concurrence a été conçu en C++ en 1998 ; sa version en Go, gateway_cache, a été publiée en 2020 et est en production depuis lors sur la plateforme de données sportives de Genius Sports, entreprise où le responsable a travaillé et qui publie le code dans geniussportsgroup/gateway_cache. La réimplémentation en C++20, cpp-cache, est open source ; ses mesures de 2026 sont dans Benchmarks.

Résultats consignés

Lors de tests en 2023 en environnements contrôlés, avec l’implémentation en Go :

  • Jusqu’à 100 000 requêtes par seconde avec un p99 inférieur à 500 ms.
  • Plus de 95 % de succès dans la première couche ; environ 0,25 % du trafic est parvenu à la source.
  • Latences approximatives de 50 µs dans la première couche et de 500 µs dans la seconde, dépendantes du matériel.

Limites

Les chiffres proviennent de tests de charge, pas de trafic réel de production, et la description complète du matériel et de la configuration de l’époque n’a pas été conservée. Ils ne sont pas extrapolés à cpp-cache. La procédure avec laquelle nous mesurons aujourd’hui est dans Comment nous mesurons. L’architecture et les leçons sont documentées dans 100K requêtes par seconde et dans Quand un cache fait plus que du cache ; le code est dans gateway_cache et cpp-cache.

Provenance

Travail antérieur de Leandro Rabindranath León, membre de SIMYL Research, réalisé chez Genius Sports, où il a travaillé : conception du protocole et de l’architecture. Le protocole est publié en open source : gateway_cache (Go, 2020) et cpp-cache (C++20). Les chiffres correspondent à l’implémentation en Go et aux tests de 2023.

Parlez-nous de votre projet.