Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentielsLOST by sophiagworld

Cet article regroupe quelques modĂšles gĂ©nĂ©raux qui aident les ingĂ©nieurs Ă  travailler avec des services Ă  grande Ă©chelle, qui reçoivent des requĂȘtes de millions d'utilisateurs. 

D'aprÚs l'expérience de l'auteur, ce n'est pas une liste exhaustive, mais elle contient vraiment des conseils efficaces. Alors, commençons.

Traduit avec le soutien de Mail.ru Cloud Solutions.

Niveau de base

Les mesures Ă©numĂ©rĂ©es ci-dessous sont relativement simples Ă  mettre en Ɠuvre, mais offrent un excellent retour sur investissement. Si vous ne les avez pas encore mises en Ɠuvre, vous serez surpris des amĂ©liorations significatives.

Infrastructure en tant que code

La premiĂšre partie des conseils consiste Ă  mettre en Ɠuvre l'infrastructure en tant que code. Cela signifie que vous devez avoir un moyen programmatique de dĂ©ployer l'ensemble de l'infrastructure. Cela peut sembler compliquĂ©, mais en rĂ©alitĂ©, nous parlons du code suivant :

Déploiement de 100 machines virtuelles

  • sous Ubuntu
  • 2 Go de RAM chacune
  • elles disposeront du code suivant
  • avec les paramĂštres suivants

Vous pouvez suivre les modifications de l'infrastructure et y revenir rapidement grĂące Ă  un systĂšme de gestion de versions.

Le moderniste en moi dit qu'il est possible d'utiliser Kubernetes/Docker pour réaliser tout ce qui a été mentionné ci-dessus, et il a raison.

De plus, l'automatisation peut ĂȘtre rĂ©alisĂ©e grĂące Ă  Chef, Puppet ou Terraform.

Intégration et livraison continues

Pour crĂ©er un service Ă©volutif, il est important d'avoir un pipeline de compilation et de test pour chaque demande de tirage. MĂȘme si le test est le plus simple, il garantit au moins que le code que vous dĂ©ployez se compile.

À chaque Ă©tape, vous vous posez la question suivante : ma compilation se compilera-t-elle et passera-t-elle des tests, est-elle valide ? Cela peut sembler une barre basse, mais cela rĂ©sout de nombreux problĂšmes.

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
Il n'y a rien de mieux que de voir ces cases cochées

Pour cette technologie, vous pouvez envisager Github, CircleCI ou Jenkins.

Équilibreurs de charge

Nous souhaitons donc mettre en place un rĂ©partiteur de charge pour rediriger le trafic et assurer une charge Ă©gale sur tous les nƓuds ou le bon fonctionnement du service en cas de dĂ©faillance :

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
Un répartiteur de charge aide généralement à répartir le trafic. La meilleure pratique est la redondance des équilibrages afin d'éviter un point de défaillance unique.

Les équilibreurs de charge sont généralement configurés dans le cloud que vous utilisez.

RayID, ID de corrĂ©lation ou UUID pour les requĂȘtes

Avez-vous déjà rencontré une erreur dans une application avec un message comme celui-ci : « Quelque chose s'est mal passé. Veuillez conserver cet ID et l'envoyer à notre support »?

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
Un identifiant unique, l'ID de corrĂ©lation, le RayID ou l'un de ses variantes, est un identifiant unique qui permet de suivre une requĂȘte tout au long de son cycle de vie. Cela permet de suivre tout le chemin de la requĂȘte dans les journaux.

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
L'utilisateur effectue une requĂȘte vers le systĂšme A, puis A se connecte Ă  B, qui se connecte Ă  C, enregistre dans X et la requĂȘte revient Ă  A.

Si vous vous connectiez Ă  distance aux machines virtuelles et essayiez de retracer le chemin de la requĂȘte (et de faire correspondre manuellement quels appels se dĂ©roulent), vous deviendriez fou. Avoir un identifiant unique facilite considĂ©rablement la vie. C'est l'une des choses les plus simples Ă  faire pour gagner du temps Ă  mesure que le service se dĂ©veloppe.

Niveau intermédiaire

Ici, les conseils sont plus complexes que prĂ©cĂ©demment, mais les bons outils facilitent la tĂąche, assurant un retour sur investissement mĂȘme pour les petites et moyennes entreprises.

Journalisation centralisée

Félicitations ! Vous avez déployé 100 machines virtuelles. Le lendemain, le directeur général vient et se plaint d'une erreur qu'il a rencontrée lors des tests du service. Il indique l'identifiant correspondant dont nous avons parlé précédemment, mais vous devrez passer en revue les journaux de 100 machines pour trouver celle qui a échoué. Et il faut la trouver avant la présentation de demain.

Bien que cela ressemble à une aventure amusante, il est préférable de s'assurer que vous avez la possibilité de rechercher dans tous les journaux depuis un seul endroit. J'ai résolu le problÚme de la centralisation des journaux avec la fonctionnalité intégrée de la pile ELK : ici, la collecte des journaux avec possibilité de recherche est prise en charge. Cela aidera vraiment à résoudre le problÚme de recherche d'un journal spécifique. En prime, vous pouvez créer des graphiques et d'autres choses amusantes.

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
Fonctionnalité de la pile ELK

Agents de surveillance

Maintenant que votre service est opérationnel, il est nécessaire de s'assurer qu'il fonctionne sans interruption. La meilleure façon de le faire est de lancer plusieurs agents, qui fonctionnent en parallÚle et vérifient qu'il fonctionne et que les opérations de base sont exécutées.

À ce stade, vous vĂ©rifiez que Le build lancĂ© fonctionne bien et fonctionne normalement..

Pour les petits et moyens projets, je recommande Postman pour surveiller et documenter les API. Mais en général, il suffit de s'assurer que vous avez un moyen de savoir quand une panne se produit et de recevoir des alertes en temps utile.

Mise à l'échelle automatique en fonction de la charge.

C'est trĂšs simple. Si vous avez une machine virtuelle servant des requĂȘtes et qu'elle approche de 80 % de mĂ©moire utilisĂ©e, vous pouvez soit augmenter ses ressources, soit ajouter davantage de machines virtuelles dans le cluster. L'exĂ©cution automatique de ces opĂ©rations convient parfaitement pour ajuster de maniĂšre Ă©lastique la puissance en fonction de la charge. Mais vous devez toujours faire attention Ă  combien d'argent vous dĂ©pensez et Ă©tablir des limites raisonnables.

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
Dans la plupart des services cloud, vous pouvez configurer la mise à l'échelle automatique en utilisant un plus grand nombre de serveurs ou des serveurs plus puissants.

SystÚme d'expérimentations.

Un bon moyen de déployer des mises à jour en toute sécurité serait de tester quelque chose pour 1 % des utilisateurs pendant une heure. Vous avez certainement vu ces mécanismes en action. Par exemple, Facebook montre à une partie de son audience une autre couleur ou modifie la taille de la police pour voir comment les utilisateurs perçoivent les changements. Cela s'appelle un test A/B.

MĂȘme le lancement d'une nouvelle fonctionnalitĂ© peut ĂȘtre rĂ©alisĂ© comme une expĂ©rience, puis dĂ©terminer comment la dĂ©ployer. Vous avez Ă©galement la possibilitĂ© de « rappeler » ou de modifier la configuration Ă  la volĂ©e en tenant compte d'une fonctionnalitĂ© qui cause une dĂ©gradation de votre service.

Niveau avancé.

Voici des conseils qui sont assez difficiles Ă  mettre en Ɠuvre. Vous aurez probablement besoin de ressources supplĂ©mentaires, donc il sera difficile pour une petite ou moyenne entreprise de gĂ©rer cela.

Déploiements bleu-vert.

C'est ce que j'appelle une méthode de déploiement « erlangienne ». Erlang a été largement utilisé lorsque les compagnies téléphoniques sont apparues. Des commutateurs logiciels ont été appliqués pour le routage des appels téléphoniques. La tùche principale du logiciel de ces commutateurs était de ne pas couper les appels pendant la mise à jour du systÚme. Erlang a un excellent moyen de charger un nouveau module sans faire tomber l'ancien.

Cette étape dépend de la disponibilité d'un répartiteur de charge. Supposons que vous ayez la version N de votre logiciel, puis que vous souhaitiez déployer la version N+1. 

Vous pourriez simplement arrĂȘter le service et dĂ©ployer la version suivante Ă  un moment que vous jugez appropriĂ© pour vos utilisateurs, ce qui entraĂźnerait un certain temps d'arrĂȘt. Mais supposons que vous ayez vraiment des conditions SLA strictes. Un SLA de 99,99 % signifie que vous pouvez ĂȘtre hors ligne uniquement pendant 52 minutes par an.

Si vous souhaitez vraiment atteindre de tels niveaux, il vous faut deux déploiements simultanés : 

  • celui qui est en cours (N) ;
  • la version suivante (N+1). 

Vous indiquez au répartiteur de charge de rediriger un pourcentage du trafic vers la nouvelle version (N+1), tandis que vous suivez activement les régressions.

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
Ici, nous avons le déploiement vert N, qui fonctionne normalement. Nous essayons de passer à la nouvelle version de ce déploiement.

D'abord, nous envoyons un trÚs petit test pour voir si notre déploiement N+1 fonctionne avec un faible volume de trafic :

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
Enfin, nous avons un ensemble de vĂ©rifications automatiques que nous exĂ©cutons jusqu'Ă  ce que notre dĂ©ploiement soit terminĂ©. Si vous ĂȘtes trĂšs, trĂšs prudent, vous pouvez Ă©galement conserver votre dĂ©ploiement N indĂ©finiment pour un retour rapide en arriĂšre en cas de mauvaise rĂ©gression :

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
Si vous voulez aller encore plus loin, laissez tout dans le déploiement bleu-vert se faire automatiquement.

Détection des anomalies et atténuation automatique des conséquences

Étant donnĂ© que vous avez une journalisation centralisĂ©e et une bonne collecte de logs, vous pouvez dĂ©jĂ  vous fixer des objectifs plus Ă©levĂ©s. Par exemple, prĂ©voir proactivement des pannes. Les moniteurs et les journaux suivent les fonctions et construisent divers graphiques — et il est possible de prĂ©dire Ă  l'avance ce qui pourrait mal tourner :

Comment bien dormir quand vous avez un service cloud : conseils architecturaux essentiels
Avec la dĂ©tection des anomalies, vous commencez Ă  examiner certains indices que le service indique. Par exemple, une augmentation de la charge CPU peut indiquer qu'un disque dur est en train de tomber en panne, et une augmentation du nombre de requĂȘtes signifie qu'il faut mettre Ă  l'Ă©chelle. Ce type de donnĂ©es statistiques permet de rendre le service proactif.

En recevant de telles données analytiques, vous pouvez évoluer dans n'importe quelle dimension, modifier proactivement et réactivement les caractéristiques des machines, des bases de données, des connexions et d'autres ressources.

C'est tout !

Cette liste de priorités vous débarrassera de nombreux problÚmes si vous développez un service cloud.

L'auteur de l'article original invite les lecteurs à laisser leurs commentaires et à apporter des modifications. L'article est distribué en tant que source ouverte, les demandes de tirage sont acceptées par l'auteur sur Github..

Que lire d'autre sur le sujet :

  1. Go et les caches CPU
  2. Kubernetes à la maniùre des pirates avec un modùle de mise en Ɠuvre
  3. Notre chaĂźne Autour de Kubernetes sur Telegram

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster