Journal de l'architecte - Pratiquez la haute disponibilité des logiciels

Auteur : JD Retail Liu Huiqing

Introduction

La haute disponibilité des logiciels est un sujet courant. La "haute disponibilité" (High Availability) décrit généralement un système qui a été spécialement conçu pour réduire les temps d'arrêt tout en maintenant une haute disponibilité de ses services. La formule de calcul est la suivante : taux de disponibilité = ( temps total - temps d'indisponibilité ) / temps total.

Cet article se concentre sur la perspective de la pratique de mise en œuvre en tant que point d'entrée et amène tout le monde à montrer les étapes de mise en œuvre et les détails de mise en œuvre de la haute disponibilité du point de vue de l'efficacité de la collaboration, de la mise en œuvre de la technologie et des spécifications de fonctionnement. Afin de faciliter la compréhension, unifions d'abord le langage et le vocabulaire, et examinons les différentes étapes du processus de livraison du logiciel, comme le montre la figure suivante :



 

Pourquoi dites-vous que la haute disponibilité des logiciels est confrontée à de nombreux défis ?

Du point de vue du lien de livraison de la demande, la réalisation de la livraison cible nécessite la coopération étroite de plusieurs parties prenantes telles que le produit, la R&D, les tests, l'exploitation et la maintenance, et les opérations. Pour certaines exigences de projet, il y a parfois des centaines de collaborateurs. Chacun a des responsabilités différentes, mais ils coopèrent et s'appuient les uns sur les autres. En cas d'erreur dans un lien, le taux de disponibilité peut être affecté ;
Du point de vue du temps, si vous souhaitez atteindre un taux de disponibilité annuel de 99,99 %, cela signifie que le temps de panne autorisé dans une année est de : 365*24*60*(100%-99,99%)=52 minutes, si Pour atteindre un taux de disponibilité de 5 neuf, le temps de panne autorisé n'est que de 5 minutes, ce qui correspond presque au temps nécessaire pour redémarrer l'application une fois que nous avons trouvé le problème ;
Du point de vue de l'efficacité de l'itération, s'il n'y a pas d'itération et pas en ligne, la probabilité de problèmes sera beaucoup plus faible. Il existe une corrélation négative entre l'efficacité de l'itération logicielle et la disponibilité. L'équilibre entre les deux sera également confronté à des défis considérables.

En résumé, les problèmes spécifiques auxquels nous sommes confrontés sont les suivants :

◦Comment résoudre le problème des nombreux collaborateurs et des liens longs liés à la livraison à la demande ?
◦Comment traiter le problème de la faible tolérance aux temps d'arrêt ?
◦Comment éviter que le taux de disponibilité ne soit fortement impacté dans la situation actuelle d'itérations fréquentes de la demande ?

2. Garantie d'efficacité de la collaboration

Incompréhension cognitive

À partir de l'ensemble du lien de livraison de la demande, nous pouvons constater qu'à mesure que le lien augmente pas à pas, plus il y aura de branches du lien de transmission d'informations et plus le niveau de transmission sera profond. Cela pose deux problèmes :

1. L'efficacité de la transmission de l'information est réduite ;
2. La précision des informations se détériore.

Le résultat final de ces deux problèmes est la réduction de l'efficacité de la collaboration.





 

Un étudiant sans expérience pratique pensera souvent que l'augmentation du nombre de personnes améliorera l'efficacité de la livraison de la demande. En fait, cette idée n'est pas tout à fait correcte. Pour la relation spécifique, reportez-vous à la figure suivante :





 

C'est comme construire un bâtiment : si une personne le construit étape par étape, cela prendra 100 jours. Si 100 personnes sont invitées à aider, la maison peut-elle être construite en 1 jour ? la réponse est négative.

Il y a des coûts de collaboration, tels que : la compréhension de l'équipe (concepteurs, maçons, maçons, plombiers), l'appariement des emplois, le contrôle des risques ;

Il existe des dépendances de processus, par exemple : la construction dépend de la conception, et la décoration douce vient toujours après la décoration dure ;

Il existe des budgets de coûts, tels que : le gradient des talents et l'échelle de l'ensemble de l'organisation (sous-traitants, agents, sous-traitants) ;

Tous les problèmes ci-dessus ne sont pas simplement résolus en mettant de la main-d'œuvre.

Spécification du processus

La logique sous-jacente de l'amélioration de l'efficacité de la collaboration est de réduire le niveau de lien de livraison et de raccourcir le lien de transmission de l'information, garantissant ainsi l'exactitude et l'efficacité de la transmission de l'information. (Le contenu du niveau de construction organisationnelle ne sera pas développé ici)

Cela nécessite la capacité de faire le travail d'aujourd'hui et de terminer le travail d'aujourd'hui. Au niveau organisationnel, cela s'appelle la spécification des processus, et au niveau personnel, cela s'appelle les méthodes de travail et le sens des responsabilités.

Essayez d'éviter de reporter l'affaire en cours au lien suivant, sinon cela affectera l'efficacité de la planification et de la livraison des liens suivants, et même des retouches peuvent se produire dans des cas extrêmes. Bref, réfléchissez bien et n'enterrez pas le trou. Les exigences du produit sont pour la R&D, la conception R&D est pour les tests et les cas de test sont pour chaque nœud de livraison tel que les produits. Les livrables doivent être fiables.

Garantie d'atterrissage de trois technologies

Dans le cycle de réponse à la demande, la mise en œuvre de haute qualité de la conception de l'architecture, de la mise en œuvre du codage, du lancement sécurisé, du déploiement et de l'exploitation et d'autres étapes de production est la prémisse et la base de la mise en œuvre d'un logiciel à haute disponibilité.

conception architecturale

La conception de l'architecture affecte souvent le coût de mise en œuvre précoce (ROI) du système et la difficulté d'exploitation et de maintenance ultérieures. Elle appartient à la conception de haut niveau du logiciel, qui comprend à la fois le schéma de conception macro et les contraintes de paradigme dans les détails de mise en œuvre. .

Garantie de processus

Invitez les architectes à participer : invitez les architectes à participer aux nœuds de transaction principaux et aux changements majeurs de la demande, ce qui est le moyen le plus direct et le plus efficace de fermer la fosse ;

Accent mis sur les documents de conception : Une description claire du schéma et l'approbation des parties prenantes concernées sont les conditions préalables pour marcher sur la bonne voie.

Garantie de conception

Conception de reprise après sinistre : Il est nécessaire de réserver une issue, de réfléchir clairement à l'avance et de faire un bon travail dans la conception de reprise après sinistre. Restauration, fusible, nouvelle tentative et rétrogradation possibles.

Conception robuste : conception sans état, conception anti-lourde, conception idempotente, conception de cohérence des données

Implémentation de l'encodage

Si la conception architecturale est le squelette, la mise en œuvre du codage concerne les nerfs, les vaisseaux sanguins et les muscles. Le premier détermine la stabilité et la durée de marche, tandis que le second détermine la vitesse et la distance que vous pouvez parcourir. Mis en œuvre au niveau du codage, c'est le degré de vieillissement et de corruption du code.

Spécification du processus

Mécanisme de revue de code : La revue de code n'est pas aussi simple que de trouver des problèmes dans le système. C'est un comportement à long terme et une forme et un support pour la mise en œuvre et l'héritage de la culture organisationnelle. Au cours du processus d'examen, les limites des responsabilités de l'entreprise, le consensus de conception et de codage et l'excellent consensus de recherche et développement axé sur les normes ont été clarifiés. Cela équivaut à donner des orientations précises à travers des cas concrets, qui sont les pierres angulaires pour assurer l'efficacité au combat de l'équipe.

De nombreux problèmes dans le processus de R&D peuvent être découverts et résolus grâce au mécanisme de revue de code, tels que :

Comment gérer la conception et la réalisation des besoins temporaires ?
◦Que pensez-vous de l'écriture de "Hello World!" dans N ?
Comment comprendre les design patterns et les limites de la sur-ingénierie ?
◦Comment évaluer les livrables de l'étape en cours ?
Faut-il introduire des tests unitaires ?
Normes de codage
Existe-t-il une gestion des erreurs ? Pour les services externes appelés, les valeurs de retour sont-elles vérifiées ou les exceptions gérées ?
La conception suit-elle un modèle de conception connu ou un modèle couramment utilisé dans le projet ?
Le nouveau code écrit par le développeur peut-il être implémenté avec les fonctions du SDK/Framework existant ? Existe-t-il une fonction similaire dans ce projet que je peux appeler sans tout réimplémenter ?
◦ Des fonctions inutiles, dupliquées ou des dépendances de packages jar de différentes versions sont-elles introduites dans le projet ? (bibliothèque json, divers utilitaires)
Existe-t-il un code inutile qui peut être supprimé ?
Dans quelle mesure le code est-il lisible ? Y a-t-il suffisamment de commentaires ?
◦ Y a- t-il une erreur dans le passage des paramètres, et y a-t-il une assertion (Assert) ou un jugement pour s'assurer que les conditions que nous pensons être invariantes sont réellement remplies ?
Comment les conditions aux limites sont-elles gérées ? Comment la branche par défaut de l'instruction switch est-elle gérée ? Est-il possible que la boucle ait une boucle infinie?
◦Où les ressources sont-elles demandées et libérées ? Existe-t-il des fuites de ressources possibles (y compris les délais d'attente, la mémoire, les fichiers, les références d'objets, les objets volumineux, le nombre de threads, etc.) ? Y a-t-il de la place pour l'optimisation ?
Quelle est l'efficacité du code ? Quel est le pire scénario ?
◦ Dans le code, en particulier dans la boucle, y a-t-il une partie évidente qui peut être optimisée (les opérations sur les chaînes peuvent-elles être optimisées avec StringBuilder) ?
Les appels vers le système et le réseau expireront-ils ? Comment y faire face?
◦ Le code est- il facile à tester (le nombre de lignes de méthode, la complexité cyclomatique et si la définition des paramètres d'entrée et de sortie est raisonnable) ?
La modification affecte-t-elle l'ancienne version, les données historiques et la compatibilité en amont ?
La conception de l'interface prend-elle en compte des problèmes tels que l'idempotence, la concurrence, la portée excessive et la dégradation ?
Existe-t-il des problèmes de mise en cache, de performances de la base de données et de cohérence des données provenant de plusieurs sources de données ?
Le plan en ligne tient-il compte du plan en niveaux de gris et de l'état incohérent des données ?

en ligne en toute sécurité

70 % des pannes en ligne sont déclenchées par une sorte de changement, et une proportion considérable d'entre elles sont causées par une connexion irrégulière. Il est donc très important d'aller en ligne en toute sécurité.

Spécification du processus
◦ Il est strictement interdit de se connecter fréquemment : par exemple, pas plus de 2 fois par semaine ;
◦Il est strictement interdit de se connecter en période de pointe : réduisez l'ampleur du problème ;
◦Il est strictement interdit d'aller en ligne sans autorisation : s'il y a un changement, il doit passer le test de vérification et la confirmation de retour du produit ;
Spécification du processus
◦Pick up traffic : sélectionnez le premier lot de machines jsf off-line/np pour récupérer le trafic (choisissez comme cold standby) ;
◦Regardez le journal : observez le journal pour confirmer qu'il n'y a pas de trafic sur la machine supprimée ;
◦ Préchauffage du service  : confirmez que la machine a démarré avec succès et que l'interface métier principale doit être préchauffée ;
Trafic suspendu : montez le trafic de la machine en ligne ;
◦Regardez les voyants : observez si les voyants mdc de la machine en ligne sont anormaux (cpu, mémoire, charge), et si les logs sont anormaux

opération de déploiement

Un moyen très important d'atteindre une haute disponibilité est la redondance de capacité. La direction et les idées sont données ci-dessous, ainsi que les détails et stratégies de mise en œuvre spécifiques, qui peuvent être étendus en fonction de situations spécifiques.

réseau
◦ Au niveau des opérateurs, China Unicom, China Telecom, China Mobile, etc. ;
◦ Nœuds de liaison , VIP, CDN, routeur/commutateur, proxy inverse, client, navigateur, etc. ;
stockage
◦ Qu'il s'agisse d'une architecture maître-esclave de base de données ou d'une architecture de copie d'ES, c'est un moyen d'atteindre une haute disponibilité du stockage, et les données importantes doivent faire bon usage des fonctionnalités pertinentes ;
◦ Lors de la conception de la structure des données, il est également nécessaire de faire un bon travail de stratégie de shunt, de capacité de planification, de fractionnement des données ou d'hétérogénéité. Par exemple : évitez de mettre en cache les raccourcis clavier, les goulots d'étranglement dans le débit des tables de base de données, les limitations du nombre de connexions à la base de données et d'autres problèmes qui affectent la haute disponibilité.
Services
◦ Expansion horizontale : Il est très important pour les services de s'assurer que la capacité peut être étendue en ajoutant des ressources ;
◦ Regroupement de services  : selon les parties commerciales ou les scénarios d'utilisation, les services sont isolés à différentes granularités pour éviter que des situations extrêmes ne s'affectent les unes les autres ;
◦ Stratégie extrême : Il s'agit principalement d'une stratégie de défense dans des situations anormales extrêmes, dont le but est de maintenir au maximum la fiabilité du service après la survenance d'un accident. Par exemple : limite de courant, fusible, réessayer, panne rapide, etc. ;
Stratégie en niveaux de gris : lorsque de nouvelles fonctions sont lancées, les problèmes sont souvent les plus susceptibles de se produire. Disposer de capacités matures en niveaux de gris du trafic est la clé pour contrôler l'étendue des problèmes ;

Garantie standard de quatre opérations

Spécifications de fonctionnement

1. Peut surveiller : l'état de fonctionnement du système
2. Peut appeler la police : la situation anormale peut informer le personnel concerné du système
3. Peut être localisé : après qu'un problème se soit produit, la cause du problème peut être rapidement localisée
4. Réparable : En cas de situation anormale, le problème peut être réparé dans un premier temps ;

plan d'urgence

La haute disponibilité signifie une faible tolérance aux temps d'arrêt, signifie pas de temps pour le dépannage et la réparation, et pas de temps pour ouvrir le code pour le dépannage des vulnérabilités. Cela nous oblige à disposer d'un ensemble complet de plans d'urgence, qui peuvent résoudre la plupart des problèmes de défaillance prévisibles.

Spécification du processus
reprendre la production en premier ;
◦Deuxième dépannage ;

Pour le manuel détaillé de traitement d'urgence en cas d'accident, veuillez vous référer à la figure suivante :





 

Spécification du processus
◦Développez des plans correspondants en trois dimensions : réseau, service et stockage, et remplissez la liste des plans d'urgence (nom du fichier : liste de contrôle) dans votre propre base de code pour conserver le contenu hérité et mis à jour ;
◦ La prévisibilité , c'est-à-dire que les scénarios de déclenchement de problèmes doivent être écrits clairement. Exemple : Selon l'avancement actuel (10 000/jour), avec l'augmentation des données de la base de données, on estime qu'au bout de 10 mois, des requêtes lentes apparaîtront dans la table de la base de données (nom de table xxx) ;
◦Achievability , la capacité d'éliminer les solutions aux problèmes. Exemple : démarrer la tâche d'archivage des données historiques (xxxWorker) et transférer les données historiques vers la base d'archivage ;

Conformité aux normes

Peu importe la qualité du processus et des normes, il doit y avoir un mécanisme correspondant pour les mettre en œuvre, sinon ce sera une fleur dans le miroir, une lune dans l'eau, qui est belle mais qui est en fait inutile. Exécutable et mesurable sont les conditions préalables pour s'améliorer en fonction des objectifs. Voici donc un outil appelé "Tableau d'auto-inspection périodique de la haute disponibilité et de la conformité" pour aider à la mise en œuvre de la spécification.

Cinq Résumé

Cet article traite de la question « Pourquoi la haute disponibilité représente-t-elle un grand défi ? », souligne l'importance de l'efficacité de la collaboration dans le processus de livraison de la demande et explique pourquoi il est nécessaire de suivre le principe de fonctionnement « Le travail d'aujourd'hui, le travail d'aujourd'hui ". Des aspects de la conception de l'architecture, de la mise en œuvre du codage, du lancement sécurisé, du déploiement et de l'exploitation, etc., il présente en détail les directives et les détails de mise en œuvre liés à la garantie de mise en œuvre de la technologie. Enfin, du point de vue de l'exploitation post-lancement, il donne des outils pratiques de garantie d'exploitation tels que plan d'urgence, tableau d'autocontrôle régulier, etc. J'espère que cela pourra aider les lecteurs.

{{o.name}}
{{m.name}}

Je suppose que tu aimes

Origine my.oschina.net/u/4090830/blog/8563505
conseillé
Classement