21 déc. 2021

allproxy - Un outil pour proxifier du HTTP mais aussi des connexions MySQL !

allproxy est un proxy compatible avec :

  • HTTP/HTTPS Proxy
  • HTTP/2
  • MySQL
  • gRPC
  • MongoDB
  • Redis
  • TCP

Quelques scĂ©narios de cas d'utilisation de proxy : 

  •  "catcher/et faire suivre" (proxifier) du traffic d'une application Ă  une autre sur le rĂ©seau, tout en capturant les donnĂ©es qui transitent
  • Avoir une ou plusieurs instances d'une application (des proxy) qu'un programme peut appeler (via le port), et dĂ©terminer quelle instance est appelĂ©e

Concrètement, dans le cadre de la mise en place d'une connexion à plusieurs base de données MySQL, à travers une réplication master / slave, la problématique était de savoir si le driver Connector/J routait bien les requêtes vers le master ou le slave.
N'ayant pas accès aux logs des différentes bases données (master et slave), l'outil allproxy a servi de proxy MySQL entre l'application Spring et les base de données réelles.

Voici le schéma de réplication MySQL :



Pour savoir si le driver route bien vers master ou slave selon l'annotation @Transactionnal(readonly = true), on remplace les hosts des bases de données avec l'host du proxy, en définissant des ports différents pour chaque host proxifié.

Voici le schéma de proxy :