
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 .
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.

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 :

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 »?

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.

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.

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.

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.

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 :

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 :

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 :

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 .
Que lire d'autre sur le sujet :
Source : habr.com
