Closed thbar closed 1 week ago
@vdegove has entered the chat and is teaming with @thbar on PR #4006
Il s'agit davantage d'une indexation que d'un cache non ?
Il s'agit davantage d'une indexation que d'un cache non ?
Cela dépend de comment tu définis chaque terme je dirais.
Pour moi une indexation est plutôt un système qui va "pointer du doigt" vers ailleurs, là où est la donnée, tandis qu'un cache va "copier la donnée" (ou une partie de la donnée), et la rendre directement disponible à la source (ce qu'on fait ici).
Les deux termes ayant aussi de l'overlap (dans une certaine mesure, les deux peuvent devenir "stale", toutefois en général l'index est conservé à jour de façon plus immédiate pour que ça fonctionne, et le cache ça peut être un peu moins le cas).
GG @vdegove. Je propose de déployer sur prochainement
, et de noter les comparaisons après sur les deux requêtes types en terme de temps de réponse, ça te va ?
J'ajoute @vdegove qu'une fois que c'est déployé sur prochainement
, on peut partager les urls avec les @etalab/transport-bizdev pour un peu + de tests plus ouvert, et que si c'est concluant, on pourra remplacer ici modes
par la logique de modes_v2
, redéployer sur prochainement, puis finaliser la PR pour que ça parte en prod semaine prochaine par exemple.
Je propose de déployer sur
prochainement
, et de noter les comparaisons après sur les deux requêtes types en terme de temps de réponse, ça te va ?
On fait ça.
@AntoineAugusti a trouvé deux cas de reproduction d’erreurs 500 sur prochainement :
merci @AntoineAugusti - et poke @vdegove j'ai ajouté deux todos liées à ça sur la PR, on s'en reparle !
Merci @ptitfred
Je n'ai pas assez d'expérience du support JSON de PG pour avoir un regard critique sur les requêtes SQL utilisant le cache.
Ça peut être l'occasion de faire un tour ensemble, même sans le côté regard critique est-ce que déjà les appels sont plutôt clairs ou pas trop, justement pour la maintenabilité future ? Est-ce que le principe général te semble suffisamment lisible ? (en dehors de l'aspect privé / public qu'on va raffiner) ?
Merci !
Merci @ptitfred pour la review.
Au final j'ai supprimé le filtrage par dataset ids, car c'est à la réflexion plutôt un "reste" des besoins de développer en incréments, que vraiment un besoin applicatif derrière à ce stade (on n'a même pas besoin de batcher tellement c'est rapide etc). Voir https://github.com/etalab/transport-site/pull/4006/commits/5dd3b1ddec91fe03c60bf9fff664449f69c0e895.
@vdegove j'ai refait une passe ! (merci @ptitfred pour les retours).
On a fait le point avec @vdegove, on déploie c'est parti, et je viendrai compléter les TODOs post deploy ici.
J'ai été voir: baisse nette des erreurs DB, temps de réponse nettement amélioré, on est OK.
j'ai été "recetter" après quelques jours de recul:
Ce round est donc nettement concluant.
Concernant les erreurs DB selon où on regarde la conclusion n'est pas la même (merci @vdegove pour tes liens), et je vais aller ajouter ces éléments sur #3997
Stylé ! Est-ce qu'on connait la part de crawlers sur la recherche ? Il me semble que les crawlers perdent pas mal de temps là-bas vu le nombre de liens à suivre (pagination, filtres etc).
Intro
DRAFT
Suite à :
Et en lien avec :
La pagination / recherche actuelle prend jusqu'à 20 secondes par requête, en monopolisant le pool Ecto, ce qui crée actuellement un risque opérationnel sur tout le site (downtime l'autre jour, 5k+ erreurs).
Cette PR optimise fortement la recherche par modes, et s'appuie sur le fait que:
Le principe général est d'avoir un bout de code qui va aller faire cette pré-calc, et d'ajouter un champ spécifique
counter_cache
sur chaque ressource pour noter le résultat du calcul (et éventuellement dedans des informations d'invalidation type "metadata id" si on le souhaite).Cette payload est structurée comme suit, de façon à permettre un peu de flexibilité et d'ajout si besoin:
Une fois le cache calculé, le temps passe sur un exemple (région + modes, voir plus bas) de 11 secondes à 50 millisecondes environ.
Requêtes testées en local
J'ai réalisé une implémentation "side by side" temporaire avec un paramètre
modes_v2
(qu'on fera sauter avant merge) pour faciliter le travail de vérification / recettage (non régression fonctionnelle, comparaison de la perf).Version actuelle
Version optimisée
Liste des tâches
Script initial
Début d'usage
Mise au propre
Voir si on veut ou pas quelque chose de plus fin (ex: une nouvelle resource history -> pub sub pour rafraichir la pré-calc et éviter un délai confusant pour les utilisateurs ?)On assume le lag de 5 minutesmodes
vsmodes_v2
, mais le reste oui)values
(pour faciliter l'apprentissage de ce pattern)modes
parmodes_v2
et nettoyer le codeAppSignal
le changement