La plupart des jours, je garde un onglet ouvert qui affiche simplement le nombre de sources. Rien de joli — pas de graphiques, pas de filtres, juste un chiffre à côté de chacun des 1,375 sites d'où nous extrayons des annonces, avec l'horodatage de leur dernier passage. La plupart du temps, c'est ennuyeux, comme l'infrastructure est censée l'être. Cet été, ça ne l'a pas été, et je pense que l'histoire de ce qui a mal tourné vous sera plus utile, en tant qu'acheteur de voiture, que la plupart des conseils « comment acheter une voiture d'occasion » que nous pourrions écrire à la place. C'est une histoire sur ce que « données en direct » signifie réellement quand la chose qui les alimente, ce sont 1,375 sites web distincts qui ne vous doivent rien.
Mi-juillet : le chiffre dont j'étais fier
À la mi-juillet, nous avions porté le registre des sources à 1,190 sources réparties sur 73 régions — le résultat de plusieurs semaines passées à réconcilier les doublons et les liens morts qui avaient discrètement gonflé notre propre chiffre. Je me souviens avoir pensé que 1,190 sources réelles et actives, c'était quelque chose dont on pouvait être fier. Ce sont énormément de sites de concessionnaires individuels, de petites annonces et de flux d'enchères, chacun avec sa propre structure HTML, ses propres limites de débit, sa propre opinion sur la question de savoir si un scraper est un client ou une attaque.
Puis une campagne de rattrapage que nous menions — le traitement d'une liste d'attente de 683 sources restées en suspens pendant des mois, certaines bloquées, d'autres jamais construites — a commencé à porter ses fruits. Durant la seconde moitié de juillet, 274 d'entre elles ont été construites et intégrées. À la fin du mois, le nombre de sources opérationnelles était monté à 1,464. C'est le genre de semaine qu'on capture en screenshot.
Début août : 241 sources, disparues
Puis le chiffre qui vous gâche la semaine : du jour au lendemain, 241 sources sont tombées dans un état dégradé. Pas à cause de quoi que ce soit que nous ayons fait — le compte de notre fournisseur de proxys avait expiré côté facturation, et une énorme part de notre trafic passe par des IP tournantes, précisément pour éviter d'être bloqués par les sites qui limitent le débit des scrapers. Plus de proxys, plus de pages fraîches, plus de nouvelles annonces. Les sources n'annoncent pas qu'elles sont en panne ; elles cessent simplement, discrètement, de renvoyer de nouvelles données, pendant que leurs anciennes annonces restent là, l'air d'être à jour.
C'est la partie qui n'apparaît dans le nombre d'annonces d'aucun site automobile, le nôtre y compris, à moins d'aller y regarder de près : une place de marché « en direct » peut avoir des lignes obsolètes assises juste à côté de lignes fraîches, et paraître identique de l'extérieur. Nous avons conditionné les nouveaux lancements de crawl à une véritable sonde de santé des proxys, pour qu'un pool mort ne puisse pas dégrader silencieusement la qualité davantage, et mis en pause les parties du planning qui auraient aggravé les choses. Ce n'est pas un travail glamour. C'est le genre de chose dont, si vous n'en entendez jamais parler, cela signifie que quelqu'un a fait son travail.
Une parenthèse, parce que ça vaut la peine de le dire clairement : tout site qui affiche un nombre d'annonces fixe et rond chaque jour n'est soit pas vraiment en direct, soit ne vous parle pas de semaines comme celle-ci.
Le gel
Le renouvellement des proxys a réglé l'essentiel du problème. Ce à quoi je ne m'attendais pas, c'était à ce que le crawler lui-même se bloque quelques semaines plus tard — un interblocage (deadlock) lors de l'arrêt, dix-huit des dix-neuf threads de travail figés en futex_wait, zéro CPU consommé, pendant 75 heures d'affilée. Pas de crash, pas de log d'erreur hurlant à qui que ce soit. Juste... rien qui se passait, pendant que le tableau de bord continuait d'afficher le dernier passage réussi comme s'il était à jour. Nous n'avions pas encore installé de watchdog sur cet hôte en particulier — le genre de phrase qu'on n'écrit qu'après que la chose qu'elle décrit vous est déjà arrivée une fois.
Nous avons construit le watchdog. Nous avons mis le planning en pause jusqu'à ce que le renouvellement des proxys soit confirmé stable, plutôt que de risquer qu'un crawl à moitié dégradé remplace silencieusement de bonnes lignes par de mauvaises — une source crawlée voit ses annonces remplacées, pas fusionnées, donc un mauvais passage ne se contente pas de ne pas ajouter de données : il peut activement supprimer de bonnes lignes et les remplacer par de pires. Cette asymétrie explique pourquoi nous préférons tourner avec des données obsolètes pendant une journée plutôt que de tourner en mode dégradé.
Où le chiffre a atterri
Voici le chiffre d'aujourd'hui, et la forme des six semaines qui nous y ont menés :
Nous avons atterri à 1,375 sources réparties sur 73 régions, alimentant 1,108,535 annonces en direct, dont 12,823 sont actuellement signalées comme sous-évaluées par rapport à leur cohorte régionale. C'est environ 90 sources de moins que le pic de juillet — certaines des 241 sources dégradées ne sont jamais complètement revenues, une poignée étaient des sites qui avaient changé leur posture anti-bot entre-temps et nécessitaient une reconstruction plutôt qu'une simple reconnexion. Nous en travaillons encore quelques-unes.
Ce que cela vaut vraiment pour vous
Rien de tout cela ne change la voiture que vous devriez acheter. Mais cela devrait changer votre façon de lire n'importe quel chiffre d'« inventaire en direct » sur n'importe quel site automobile, pas seulement le nôtre. La France arrive en tête de notre décompte régional en ce moment avec 67,569 annonces, le Japon juste derrière avec 61,940, et ces chiffres bougent — non pas parce que le marché de l'occasion lui-même varie aussi vite, mais parce que l'infrastructure qui l'observe, elle, varie. Une annonce vieille de trois jours parce qu'une source était dégradée ressemble exactement à une annonce fraîche, à moins que la plateforme ne soit honnête sur la différence.
Nous préférons vous parler du gel de 75 heures plutôt que de prétendre que notre chiffre ne vacille jamais. Un jeu de données qui n'admet jamais avoir traversé une mauvaise semaine est un jeu de données dont vous devriez vous méfier davantage, pas moins.



