Passer EBOX Alert à l'échelle en contournant les restrictions

Dans l’article précédent, je vous disais que EBOX a prévu un certain nombre de mesures pour éviter que des outils automatiques viennent consulter leur portail de suivi de la consommation, principalement parce que cela surchargerait leurs serveurs, surtout si ces outils sont mal configurés.

Les mesures de protection d’EBOX

  • 5 consultations / heure / code client : après 5 tentatives de consultation de la consommation pour un même code client, on reçoit un message d’erreur nous disant de revenir dans une heure
  • 10 consultations / heure / adresse IP : après 10 tentatives de consultation, indépendamment du code client (donc basé notre adresse IP), on reçoit le même message d’erreur
  • Enfin EBOX a automatisé une plage de maintenance pendant les 10 premières minutes de chaque heure, où il n’est pas possible d’avoir sa consommation et pendant laquelle on reçoit un message d’erreur indiquant de revenir à HH:10.

Comment les contourner

La première mesure n’est pas vraiment contraignante car une vérification par heure est suffisante pour notre besoin (à part en phase de test). Et pour la plage de maintenance, afin de ne pas présuposer de la période bloquée, j’ai implémenté un mécanisme de réessai quelques minutes après l’heure indiquée dans le message d’erreur retourné par EBOX, rien de bien sophistiqué.

C’est la limitation à 10 consultations par heure pour une même adresse IP qui pose un réel problème de passage à l’échelle. Au-delà de 10 utilisateurs pour EBOX Alert, impossible de faire une vérifications par heure pour chacun. Ma stratégie est donc la suivante :

  • Prioriser les comptes en fonction du pourcentage de forfait consommé, pour vérifier moins souvent les comptes qui ont peu de risque d’atteindre un seuil dans les heures à venir. En pratique, la période de vérification varie de 6h à 30min en fonction du pourcentage consommé.
  • Utiliser un serveur proxy qui masque l’adresse IP de mon serveur vis-à-vis du portail d’EBOX. On trouve de vrais serveurs proxy HTTP gratuits et anonymes facilement sur Google. Ils ne sont pas rapides ni ne garantissent aucune confidentialité, mais les données échangées ne sont guère sensibles et le temps de réponse importe peu.

Avec ces deux contre-mesures, plusieurs dizaines de comptes peuvent être gérés avec un seul serveur proxy et le service peut grandir en ajoutant des serveurs proxy.

Architecture EBOX

Le problème des proxies gratuits

Utiliser des serveurs proxy gratuits à une limite : leur fiabilité. J’avais commencé avec une liste de 10 serveurs, mais en moins d’une semaine, la plupart des serveurs de la liste ne fonctionnaient plus. J’ai donc ajouté un module qui parse régulièrement une liste de serveurs proxy maintenue automatiquement (facile à trouver sur Google), et retourne l’un d’eux aléatoirement à la demande.

Seulement même dans cette liste de serveurs proxy, supposément testés, il y en a qui ne répondent pas. Comme je ne parallélise pas les requêtes pour simplifier la boucle de mise à jour des comptes, et pour être gentil avec EBOX et rester sous le radar, cela pose un vrai problème si 30% des requêtes prennent 30 secondes pour ensuite échouer. Je n’ai pas assez d’une heure pour mettre à jour tous les comptes.

Donc pour éviter d’avoir trop de requêtes qui expirent (timeout à cause du proxy), j’ai ajouté un mécanisme de liste noire (black-list) pour les proxies, après 3 échecs dans les dernières 6 heures. Et désormais le taux de succès est très élevé.

Dans le prochain article, je vous expliquerai comment ce service tourne 7j/7 et 24h/24 et envoie des courriels et SMS d’alerte, le tout pour 0$/mois.

Written on January 22, 2017

Posted in Web Development with : EBOX Alert