
Cet article contient quelques modÚles courants pour aider les ingénieurs à travailler avec des services à grande échelle accessibles par des millions d'utilisateurs.
D'aprÚs l'expérience de l'auteur, il ne s'agit pas d'une liste exhaustive, mais effectivement efficace des conseils. Alors, commençons.
Traduit avec support .
Niveau d'entrée
Les mesures Ă©numĂ©rĂ©es ci-dessous sont relativement simples Ă mettre en Ćuvre mais ont un impact Ă©levĂ©. Si vous ne les avez jamais essayĂ©s auparavant, vous serez surpris des amĂ©liorations significatives.
Infrastructure en tant que code
La premiÚre partie du conseil consiste à implémenter l'infrastructure en tant que code. Cela signifie que vous devez disposer d'un moyen programmatique pour déployer l'intégralité de l'infrastructure. Cela semble compliqué, mais nous parlons en réalité du code suivant :
Déploiement de 100 machines virtuelles
- Ń Ubuntu
- 2 Go de RAM chacun
- ils auront le code suivant
- avec ces paramĂštres
Vous pouvez suivre les modifications apportées à votre infrastructure et y revenir rapidement à l'aide du contrÎle de version.
Le moderniste en moi dit que vous pouvez utiliser Kubernetes/Docker pour faire tout ce qui précÚde, et il a raison.
De plus, vous pouvez fournir une automatisation Ă l'aide de Chef, Puppet ou Terraform.
Intégration et livraison continues
Pour crĂ©er un service Ă©volutif, il est important de disposer d'un pipeline de construction et de test pour chaque demande d'extraction. MĂȘme si le test est trĂšs simple, il garantira au moins que le code que vous dĂ©ployez est compilĂ©.
A chaque fois à ce stade vous répondez à la question : mon assemblage va-t-il compiler et réussir les tests, est-ce valide ? Cela peut sembler une barre basse, mais cela résout de nombreux problÚmes.

Il n'y a rien de plus beau que de voir ces tiques
Pour cette technologie, vous pouvez évaluer Github, CircleCI ou Jenkins.
Ăquilibreurs de charge
Nous souhaitons donc exĂ©cuter un Ă©quilibreur de charge pour rediriger le trafic et garantir une charge Ă©gale sur tous les nĆuds, sinon le service continue en cas de panne :

Un équilibreur de charge fait généralement un bon travail de répartition du trafic. La meilleure pratique consiste à suréquilibrer afin de ne pas avoir un seul point de défaillance.
En rÚgle générale, les équilibreurs de charge sont 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 d'application avec un message comme celui-ci : " Quelque chose s'est mal passé. Enregistrez cet identifiant et envoyez-le à notre équipe d'assistance"?

Un identifiant unique, un ID de corrélation, un RayID ou l'une des variantes est un identifiant unique qui vous permet de suivre une demande tout au long de son cycle de vie. Cela vous permet de suivre l'intégralité du chemin de la demande dans les journaux.

L'utilisateur fait une demande au systÚme A, puis A contacte B, qui contacte C, la stocke dans X, puis la demande est renvoyée à A.
Si vous deviez vous connecter Ă distance Ă des machines virtuelles et essayer de retracer le chemin de la requĂȘte (et de corrĂ©ler manuellement les appels effectuĂ©s), vous deviendrez fou. Avoir un identifiant unique rend la vie beaucoup plus facile. Câest lâune des choses les plus simples que vous puissiez faire pour gagner du temps Ă mesure que votre service se dĂ©veloppe.
Niveau moyen
Les conseils ici sont plus complexes que les prĂ©cĂ©dents, mais les bons outils facilitent la tĂąche, offrant un retour sur investissement mĂȘme pour les petites et moyennes entreprises.
Journalisation centralisée
Toutes nos félicitations! Vous avez déployé 100 machines virtuelles. Le lendemain, le PDG vient se plaindre d'une erreur qu'il a reçue lors du test du service. Il indique l'ID correspondant dont nous avons parlé ci-dessus, mais vous devrez parcourir les journaux de 100 machines pour trouver celle qui a provoqué le crash. Et il faut le trouver avant la présentation de demain.
MĂȘme si cela semble ĂȘtre une aventure amusante, il est prĂ©fĂ©rable de vous assurer que vous avez la possibilitĂ© de rechercher tous les magazines au mĂȘme endroit. J'ai rĂ©solu le problĂšme de la centralisation des journaux en utilisant la fonctionnalitĂ© intĂ©grĂ©e de la pile ELK : elle prend en charge la collecte de journaux consultable. Cela aidera vraiment Ă rĂ©soudre le problĂšme de la recherche dâune revue spĂ©cifique. En prime, vous pouvez crĂ©er des graphiques et dâautres choses amusantes comme ça.

Fonctionnalité de la pile ELK
Agents de surveillance
Maintenant que votre service est opĂ©rationnel, vous devez vous assurer quâil fonctionne correctement. La meilleure façon d'y parvenir est d'exĂ©cuter plusieurs agents, qui fonctionnent en parallĂšle et vĂ©rifient qu'ils fonctionnent et que les opĂ©rations de base sont effectuĂ©es.
A ce stade, vous vérifiez que la version en cours se sent bien et fonctionne bien.
Pour les projets de petite et moyenne taille, je recommande Postman pour surveiller et documenter les API. Mais en gĂ©nĂ©ral, vous voulez simplement vous assurer que vous disposez dâun moyen de savoir quand une panne sâest produite et dâĂȘtre averti en temps opportun.
Mise à l'échelle automatique en fonction de la charge
C'est trÚs simple. Si vous avez des demandes de maintenance de VM et que son utilisation de la mémoire approche les 80 %, vous pouvez soit augmenter ses ressources, soit ajouter plus de VM au cluster. L'exécution automatique de ces opérations est excellente pour les changements de puissance élastiques sous charge. Mais vous devez toujours faire attention au montant que vous dépensez et fixer des limites raisonnables.

Avec la plupart des services cloud, vous pouvez le configurer pour une mise à l'échelle automatique en utilisant davantage de serveurs ou des serveurs plus puissants.
SystÚme d'expérimentation
Un bon moyen de dĂ©ployer les mises Ă jour en toute sĂ©curitĂ© est de pouvoir tester quelque chose pour 1 % des utilisateurs pendant une heure. Vous avez bien sĂ»r vu de tels mĂ©canismes en action. Par exemple, Facebook affiche une couleur diffĂ©rente Ă certaines parties de lâaudience ou modifie la taille de la police pour voir comment les utilisateurs perçoivent les changements. Câest ce quâon appelle les tests A/B.
MĂȘme la publication d'une nouvelle fonctionnalitĂ© peut ĂȘtre lancĂ©e Ă titre expĂ©rimental, puis dĂ©terminer comment la publier. Vous avez Ă©galement la possibilitĂ© de « mĂ©moriser » ou de modifier la configuration Ă la volĂ©e en fonction de la fonction qui provoque la dĂ©gradation de votre service.
Niveau avancé
Voici des astuces assez difficiles Ă mettre en Ćuvre. Vous aurez probablement besoin dâun peu plus de ressources, donc une petite ou moyenne entreprise aura du mal Ă gĂ©rer cela.
Déploiements bleu-vert
Câest ce que jâappelle la maniĂšre « Erlang » de se dĂ©ployer. Erlang est devenu largement utilisĂ© avec lâapparition des compagnies de tĂ©lĂ©phone. Les softswitches ont commencĂ© Ă ĂȘtre utilisĂ©s pour acheminer les appels tĂ©lĂ©phoniques. L'objectif principal du logiciel sur ces commutateurs Ă©tait de ne pas interrompre les appels lors des mises Ă niveau du systĂšme. Erlang a une bonne façon de charger un nouveau module sans planter le prĂ©cĂ©dent.
Cette étape dépend de la présence d'un équilibreur de charge. Imaginons que vous disposez de la version N de votre logiciel, et que vous souhaitiez ensuite déployer la version N+1.
Vous pourrait arrĂȘtez simplement le service et dĂ©ployez la version suivante Ă un moment qui convient Ă vos utilisateurs et obtenez un certain temps d'arrĂȘt. Mais supposons que vous ayez vraiment conditions strictes de SLA. Ainsi, SLA 99,99 % signifie que vous pouvez vous dĂ©connecter seulement de 52 minutes par an.
Si vous souhaitez vraiment atteindre de tels indicateurs, vous avez besoin de deux dĂ©ploiements en mĂȘme temps :
- celui qui est en ce moment (N) ;
- version suivante (N+1).
Vous dites à l'équilibreur de charge de rediriger un pourcentage du trafic vers la nouvelle version (N+1) pendant que vous surveillez activement les régressions.

Ici, nous avons un déploiement N vert qui fonctionne bien. Nous essayons de passer à la prochaine version de ce déploiement
Nous envoyons dâabord un trĂšs petit test pour voir si notre dĂ©ploiement N+1 fonctionne avec une petite quantitĂ© de trafic :

Enfin, nous disposons d'un ensemble de contrÎles automatisés que nous exécutons éventuellement jusqu'à ce que notre déploiement soit terminé. Si tu trÚs trÚs attention, vous pouvez également sauvegarder votre déploiement N pour toujours pour un rollback rapide en cas de mauvaise régression :

Si vous souhaitez passer à un niveau encore plus avancé, laissez tout s'exécuter automatiquement dans le déploiement bleu-vert.
Détection des anomalies et atténuation automatique
Ătant donnĂ© que vous disposez dâune journalisation centralisĂ©e et dâune bonne collecte de journaux, vous pouvez dĂ©jĂ dĂ©finir des objectifs plus Ă©levĂ©s. Par exemple, prĂ©disez de maniĂšre proactive les Ă©checs. Les fonctions sont suivies sur des moniteurs et dans des journaux et divers diagrammes sont créés - et vous pouvez prĂ©dire Ă l'avance ce qui ne va pas :

Une fois les anomalies dĂ©tectĂ©es, vous commencez Ă examiner certains des indices fournis par le service. Par exemple, un pic de charge du processeur peut indiquer qu'un disque dur est en panne, tandis qu'un pic de requĂȘtes peut indiquer que vous devez Ă©voluer. Ce type de donnĂ©es statistiques vous permet de rendre le service proactif.
Grùce à ces informations, vous pouvez évoluer dans n'importe quelle dimension et modifier de maniÚre proactive et réactive les caractéristiques des machines, des bases de données, des connexions et d'autres ressources.
C'est ça!
Cette liste de priorités vous évitera bien des 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 open source, pull request de l'auteur .
Que lire d'autre sur le sujet :
Source: habr.com
