J'ai construit une API dans Flask qui effectue une classification sur des messages texte avec Keras. Je suis actuellement en utilisant sshtunnel
et MySQLdb
pour se connecter à une base de données MySQL pour récupérer des messages à partir d'une base de données distante. L'application entière est enveloppée dans un conteneur Docker.Comment maintenir un tunnel SSH et une connexion MySQL ouverts de manière fiable avec mon API Python Flask?
Je peux établir une connexion à la base de données distante et l'interroger avec succès, mais j'ouvre et ferme un nouveau tunnel ssh chaque fois qu'une requête POST arrive dans l'API, ce qui ralentit les performances. J'ai essayé d'ouvrir un seul tunnel SSH et une seule connexion à la base de données "pour tous les gouverner", mais la connexion devient obsolète s'il n'y a pas d'activité après une heure, et les requêtes API prennent une éternité .
Comment avez-vous fait cela? Cette lenteur est-elle inévitable ou existe-t-il un moyen d'actualiser périodiquement les connexions ssh et base de données?
Voilà comment je me connecte à ma base de données pour chaque requête entrante:
with SSHTunnelForwarder(
(host, 22),
ssh_username=ssh_username,
ssh_private_key=ssh_private_key,
remote_bind_address=(localhost, 3306)
) as server:
conn = db.connect(host=localhost,
port=server.local_bind_port,
user=user,
passwd=password,
db=database)
Si vous avez vraiment le faire, pourquoi ne pas ouvrir le tunnel à l'extérieur de l'application 'ssh -L 3306: localhost: 3306 user @ remote' puis pointez votre application à' localhost: 3306'? Si vous vous souciez vraiment des performances, vous devriez mettre votre base de données et votre application sur le même réseau si possible. – Suever