Sans serveur: 15% plus lent et huit fois plus cher

J'ai récemment décidé d'expérimenter l'API sur notre site Web CardGames.io et d'essayer le framework Serverless . Au cours des derniÚres années, c'est devenu un sujet brûlant dans le monde de la technologie, et j'ai tergiversé, je voulais garder mes compétences techniques à jour et essayer quelque chose de nouveau. Par conséquent, j'ai décidé de passer plusieurs heures à étudier sans serveur et de voir s'il y avait un sens à un tel placement d'API.

Configuration actuelle


CardGames.io fonctionne sur AWS. Toutes les pages html, CSS, JavaScript et images sont stockĂ©es dans S3. Nous avons une API C # hĂ©bergĂ©e sur Elastic Beanstalk, elle fonctionne sur des serveurs Linux exĂ©cutant .NET Core avec Docker. Enfin, nous utilisons CloudFront CDN avant la statique sur S3 et API. Vous trouverez ci-dessous le score EC2 pour aoĂ»t 2019. Nous avons plusieurs autres instances, mais les API fonctionnent sur m1.small (oui, t2.small fonctionne probablement mieux) avec un Ă©quilibrage de charge classique. Si vous rĂ©sumez le surlignĂ© en rouge, alors 164,21 $ par mois sortent, pas mal. J'ai mĂȘme inclus EBS lĂ -bas, parce que je ne sais pas comment briser ces dĂ©penses, nous avons plusieurs projets sur EC2.


Compte AWS pour Elastic Beanstalk

Nous avons deux environnements avec 1 Ă  3 instances chacun: actif et inactif, car le dĂ©ploiement de .NET Core dans Docker sur AWS prend plusieurs minutes, nous le faisons donc dans un environnement inactif, puis basculons les enregistrements CNAME sur celui rĂ©cemment dĂ©ployĂ©. Un dĂ©ploiement lent Ă©tait l'une des raisons pour lesquelles je voulais essayer quelque chose de nouveau. Nous avons plusieurs serveurs avec des applications node.js sur Beanstalk - et ils sont dĂ©ployĂ©s en quelques secondes. Je voulais que ce soit la mĂȘme chose pour l'API.

Passer Ă  Serverless


J'ai étudié un trÚs bon tutoriel d' hébergement d'API Web ASP.NET avec le framework Serverless et j'ai constaté que vous n'avez besoin que d'ajouter un fichier de configuration simple, une dépendance et une petite classe de démarrage à un projet d'API existant. Le déploiement a pris environ vingt secondes, bien mieux que dans Beanstalk. Je pense que grùce à la prise en charge intégrée de .NET Core dans Lambda (cependant, seulement 2.2), tandis que dans Beanstalk, il n'est pris en charge que si vous utilisez un docker indépendant. Dans tous les cas, j'étais heureux sans penser aux groupes de mise à l'échelle automatique, aux instances max et autres.

Test de performance


Sans serveur sur AWS est Lambda, qui hĂ©berge vraiment vos fonctionnalitĂ©s, et l'API Front Gateway, qui vous permet d'ajouter des Ă©lĂ©ments tels que les limites de vitesse, les clĂ©s d'API, etc. J'ai hĂ©bergĂ© les fonctionnalitĂ©s Lambda dans la rĂ©gion us-west-2, oĂč se trouvent les serveurs Beanstalk. J'ai ensuite configurĂ© l'instance CloudFront pour acheminer les demandes de l'un de nos jeux vers la nouvelle configuration sans serveur, et l'autre vers l'ancienne configuration Beanstalk. Il a ensuite lancĂ© un test simple sur deux URL: l'une sans serveur, l'autre Beanstalk. Les deux URL ont invoquĂ© la mĂȘme API, stockant le mĂȘme Ă©vĂ©nement dans la base de donnĂ©es. J'ai exĂ©cutĂ© 100 requĂȘtes pour chacune, voici les rĂ©sultats:


Comparaison des performances

Dans plusieurs exĂ©cutions, la configuration sans serveur Ă©tait 15% plus lente (si je l'ai fait, je l'ai exĂ©cutĂ©e depuis l'Islande, d'oĂč le grand ping). La vitesse a Ă©tĂ© une dĂ©ception, mais elle est restĂ©e assez Ă©levĂ©e - je me suis rendu compte qu'il y avait des frais gĂ©nĂ©raux sur le devant de la passerelle API devant notre API: il y a trop de fonctions, mĂȘme si nous ne les utilisons pas. Donc, triste, mais pas critique!

Les prix


HonnĂȘtement, au dĂ©but, je ne pensais pas aux prix. Je viens de dĂ©cider que payer pour une utilisation rĂ©elle serait probablement moins cher que de payer pour des instances 24/7. Par consĂ©quent, il a permis Ă  la nouvelle installation sans serveur de fonctionner pendant plusieurs jours, puis a commencĂ© Ă  vĂ©rifier les comptes. Oups! La facture de Lambda + API Gateway a dĂ©jĂ  dĂ©passĂ© la centaine de dollars! Au dĂ©but, j'ai commencĂ© Ă  jouer avec Lambda, en allouant moins de mĂ©moire pour la sauvegarder, mais quand j'ai bien regardĂ© ce qui se passait, il est devenu Ă©vident que le problĂšme Ă©tait avec la passerelle. Voici les tarifs API Gateway:


Tarifs API de passerelle

Notre API accepte environ 10 millions de demandes par jour. Cela reprĂ©sente environ 35 $ par passerelle uniquement chaque jour . De plus, Lambda coĂ»te environ 10 $ par jour, bien que cela puisse ĂȘtre rĂ©duit en allouant moins de mĂ©moire. Ensemble, cela reprĂ©sente environ 45 $ par jour, soit 1350 $ par mois , contre 164 $ par mois sur Elastic Beanstalk. Huit fois plus cher ! J'aime les nouvelles technologies et un dĂ©ploiement rapide, mais je ne vais pas payer 1200 $ de plus par mois pour cela. Retour Ă  Beanstalk!

Conclusion


Probablement, j'aurais dĂ» me familiariser avec les prix Ă  l'avance et faire des calculs mathĂ©matiques! Mais bien sĂ»r, alors je devrais faire un vrai travail et ne pas acquĂ©rir de prĂ©cieuses compĂ©tences techniques! Je suis sĂ»r que dans certaines situations, les API Gateway et Lambda sont meilleures que Elastic Beanstalk. Ce n'est tout simplement pas notre cas. Peut-ĂȘtre que si vous utilisez des clĂ©s API, des limites de vitesse et d'autres fonctions de passerelle API, il est logique de payer 3,50 $ par million de demandes. Nous ferions mieux de mettre un Ă©quilibreur de charge normal devant Lambda. Pour autant que je sache, ce n'est pas possible; une API de passerelle est requise pour l'accĂšs http Ă  Lambda.

Mais mĂȘme si nous venions de payer Lambda, Ă  10 $ par jour, cela aurait rapportĂ© 300 $ par mois au lieu de 164 $. Nous avons de nombreuses requĂȘtes, mais chaque requĂȘte fait trĂšs peu: en gros, un appel DB par requĂȘte. Peut-ĂȘtre que les requĂȘtes plus lourdes qui utilisent plus de temps de calcul conviennent mieux Ă  Lambda, oĂč vous payez pour 100 ms de temps de calcul. Voici un rapport pour une demande. Comme vous pouvez le voir, nous utilisons 3,50 ms de temps de calcul, mais la facture est fixĂ©e Ă  100 ms, ce n'est pas un arrondi faible.


Rapport Lambda pour une demande

Enfin, je ne critique absolument pas les API Gateway, Lambda ou Serverless. Juste pour montrer que pour certaines charges de travail, ils sont beaucoup plus chers que l'ancien ennuyeux EC2 et Elastic Beanstalk. Sur ce que nous resterons. Il est Ă©galement probable qu'il existe un moyen bien meilleur ou plus efficace de configurer le systĂšme, je ne suis en aucun cas un expert AWS, donc si vous voyez des erreurs flagrantes, assurez-vous de l'indiquer dans les commentaires.

Source: https://habr.com/ru/post/fr468625/


All Articles