Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Utilisation de l'API HYDRAO #2

Open
dedeweb opened this issue Jul 21, 2023 · 3 comments
Open

Utilisation de l'API HYDRAO #2

dedeweb opened this issue Jul 21, 2023 · 3 comments

Comments

@dedeweb
Copy link

dedeweb commented Jul 21, 2023

Bonjour,

Je suis Denis, développeur chez HYDRAO.

Tout d'abord, merci d'avoir développé ce plugin, c'est toujours un plaisir de voir les utilisateurs s'approprier nos produits :)

J'en viens à la raison de mon message ici : Nous avons constaté sur nos serveurs un pic de requêtes toutes les heures, ce qui provoque un pic de charge sur nos serveurs.

Après investigation, et après avoir regardé le code source du plugin, je pense que le plugin est responsable de ce pic de charge : En effet, les appels à l'API se font sur un cron, toutes les heures, pour tout les utilisateurs.

Pouvez vous ajouter un délai d'attente aléatoire afin de répartir la charge sur nos serveurs? Sans cela, nous allons être obligés de révoquer les clés API utilisant ce plugin, les pics de charge devenant vraiment trop importants.

D'autre part, la popularité de ce plugin augmentant, le nombre de requêtes aussi.
Aussi afin d'éviter d'impacter les autres utilisateurs, nous avons réajusté les limites sur l'API. Chaque clé API est maintenant limitée à 10000 requête par mois. Nous observons actuellement plus de 500 requetes par jour et par personnes sur l'API, donc cette limite risque d'être atteinte avant la fin du mois pour la plupart des utilisateurs de ce plugin.

Il est possible de radicalement baisser le nombre de requete à l'API, entre autres en utilisant un cache et en gardant dans une base locale les objets peu susceptibles de changer (user, showerhead, ...)

Merci et bon weekend !

@Mips2648
Copy link
Owner

Bonjour,

Pas de problème, je vais m'arranger pour distribuer les appels aléatoirement, cela n'est pas très compliqué à faire et en réalité c'est quelque chose que je surveillais et que j'étais déjà prêt à faire si nécessaire mais je doute que ce code soit réellement la cause de la surcharge sur vos serveurs.
Je vous invite à consulter cette page avec quelques infos utiles: https://market.jeedom.com/index.php?v=d&p=market_display&id=3964 comme le nombre d'installation: 62
donc oui, il y a pour l'instant 62 utilisateurs de ce plugin qui font toutes les heures quelques appels vers vos api... mais 62 ca semble ridiculement bas, non?
image

Quand à la limite, pouvez-vous préciser à partir de quand cela sera appliquée?
Je peux également m'engager à implémenter un système de cache (ou similaire) comme vous le demandez pour diminuer le nombre de requêtes mais j'ai besoin d'un délai; je peux prévoir ca pour la rentrée en septembre mais en l’occurrence je pars demain pour plusieurs semaine en congé donc si vous appliquez la limite de votre coté, vous allez bloquer vos clients...

@dedeweb
Copy link
Author

dedeweb commented Jul 24, 2023

Bonjour,

Effectivement, il s'agit de 62 utilisateurs. Mais ces 62 utilisateurs font jusqu'à 25 requête HTTP par heure, ce qui nous fait donc de l'ordre de 1500 requêtes simultanées chaque heure, ce qui se traduit par encore plus de requêtes SQL sur notre base. Par exemple l'API "userStats" effectue plusieurs requêtes, certaines assez gourmandes.

Il n'y a aucun doute que ce plugin soit effectivement à l'origine ne notre surcharge serveur.

Nos bases de données sont en autoscaling, mais ce pic horaire est tellement soudain que les bases n'ont pas le temps de se mettre à niveau. Du coup on a des erreurs de type "too many connection" sur les requêtes.

Nous sommes en train de passer à un système plus robuste d'autoscaling, et nous allons optimiser au maximum les webservices, mais en attendant, nous sommes obligés de prendre des mesures pour pas que tout les utilisateurs soit impactés.

Après réflexion, nous avons changé pour des limites qui nous semble plus pertinentes :

  • 50 requêtes par jour maximum
  • 4 requêtes par seconde maximum

Cela permet que chaque utilisateur du plugin ai au moins deux mise à jour qui fonctionne par jour.

Pour optimiser le nombre de requêtes faites à l'API, hormis le cache je vous conseil de vous baser sur la propriété "last_seen" des pommeaux. En effet, cela permet de savoir si il y a eu une activité récente sur le compte, et ainsi appeler les webservice qu'en cas de mise à jour récente.

Les limites sont déjà en place sur l'API.

Désolé pour tout ces changements un peu soudains...

@Mips2648
Copy link
Owner

Mips2648 commented Jul 24, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants