Développement du système
1. Cohésion élevée/couplage faible
La cohésion élevée fait référence à un module logiciel. est composé de codes hautement liés et n'est responsable que d'une seule tâche, souvent appelée principe de responsabilité unique. La cohésion d'un module reflète l'étroitesse des connexions internes au sein du module.
Plus la connexion entre les modules est étroite, plus le couplage est fort et plus l'indépendance du module est mauvaise. Le niveau de couplage entre modules dépend de la complexité de l'interface entre modules, de la méthode appelante et des informations transférées. Pour un système complet, les modules doivent exister de la manière la plus indépendante possible. Généralement, plus le degré de cohésion de chaque module dans la structure du programme est élevé, plus le degré de couplage entre les modules est faible.
2. Surconception
La surconception signifie réaliser trop de conception tournée vers l'avenir ou trop compliquer des choses relativement simples, rechercher trop la modularité, l'évolutivité, les modèles de conception, etc., en ajoutant des fonctionnalités inutiles à la complexité du système.
3. Optimisation prématurée
L'optimisation prématurée ne fait pas référence au stade précoce du processus de développement, mais au moment où les changements futurs des exigences n'ont pas encore été compris. Non seulement vos optimisations peuvent vous empêcher de bien implémenter les nouvelles exigences, mais votre estimation de l'optimisation attendue peut être erronée, ce qui vous fera en réalité n'obtenir rien d'autre que compliquer le code.
La bonne méthode consiste d'abord à mettre en œuvre vos besoins avec qualité, à rédiger suffisamment de cas de test, puis à établir un profil pour trouver les goulots d'étranglement des performances, puis à procéder à l'optimisation.
4. Refactoring
La refactorisation consiste à améliorer la qualité et les performances du logiciel en ajustant le code du programme, en rendant le modèle de conception et l'architecture du programme plus raisonnables et en améliorant l'évolutivité et la maintenabilité du logiciel.
5. Effet des fenêtres brisées
Également connue sous le nom de théorie des fenêtres brisées, la théorie des fenêtres brisées est une théorie en criminologie. Cette théorie estime que si des phénomènes indésirables dans l’environnement sont autorisés à exister, les gens seront tentés de les imiter, voire de les aggraver. Prenez un bâtiment avec quelques fenêtres cassées. Si ces fenêtres ne sont pas réparées, les vandales peuvent détruire davantage de fenêtres. Finalement, ils peuvent même pénétrer par effraction dans un bâtiment et, s'ils sont trouvés inhabités, peut-être s'y installer ou y mettre le feu.
Appliqués au génie logiciel, les dangers cachés dans le code système ou la conception de l'architecture ne doivent pas émerger, sinon avec le temps, les dangers cachés deviendront de plus en plus graves. Au contraire, un système de haute qualité incitera les gens à écrire involontairement du code de haute qualité.
6. Le principe de méfiance mutuelle
signifie que dans l'ensemble du lien en amont et en aval du fonctionnement du programme, aucun point ne peut être garanti comme étant absolument fiable. Tout point peut tomber en panne ou avoir un comportement imprévisible à tout moment, y compris les réseaux de machines. , le service lui-même dépend de l'environnement, des entrées et des demandes, etc., il doit donc être gardé partout.
7. Persistance
La persistance est un mécanisme permettant de convertir les données du programme entre des états temporaires et persistants. En termes simples, les données temporaires (telles que les données en mémoire, qui ne peuvent pas être enregistrées de manière permanente) sont conservées dans des données persistantes (telles que celles conservées dans une base de données ou un disque local, qui peuvent être enregistrées pendant une longue période).
8. Section critique
La section critique est utilisée pour représenter une ressource commune ou des données partagées, qui peuvent être utilisées par plusieurs threads, mais à la fois, un seul thread peut l'utiliser une fois la ressource de la section critique occupée, les autres. Si un thread souhaite utiliser cette ressource, il doit attendre.
9. Blocage/non-blocage
Le blocage et le non-blocage décrivent généralement l'interaction entre plusieurs threads. Par exemple, si un thread occupe une ressource de section critique, alors tous les autres threads qui ont besoin de cette ressource doivent attendre dans cette section critique. L'attente entraînera le blocage du thread. Cette situation est bloquante. À ce stade, si le thread occupant la ressource n'a pas voulu libérer la ressource, alors tous les autres threads bloqués dans cette section critique ne pourront pas fonctionner. Le non-blocage permet à plusieurs threads d'entrer dans la section critique en même temps.
10. Synchronisation/Asynchrone
Habituellement, la synchronisation et l'asynchrone font référence à l'appel de fonction/méthode.
La synchronisation signifie que lors de l'émission d'un appel de fonction, l'appel ne reviendra pas tant que le résultat n'est pas obtenu. L'appel asynchrone reviendra instantanément, mais le retour instantané de l'appel asynchrone ne signifie pas que votre tâche est terminée. Il démarrera un thread en arrière-plan pour continuer la tâche et informera l'appelant via un rappel ou d'autres méthodes une fois la tâche terminée. complété.
11. Concurrence/Parallèle
Parallèle signifie que plusieurs instructions sont exécutées simultanément sur plusieurs processeurs en même temps. Ainsi, que ce soit d’un point de vue micro ou macro, les deux sont exécutés ensemble.
La concurrence signifie qu'une seule instruction peut être exécutée en même temps, mais que plusieurs instructions de processus sont exécutées en rotation rapide, ce qui a pour effet que plusieurs processus s'exécutent en même temps d'un point de vue macro, mais pas simultanément d'un point de vue micro. , divisez simplement le temps en plusieurs segments, afin que plusieurs processus puissent s'exécuter rapidement et alternativement.
Conception d'architecture
1. Haute concurrence
En raison de l'avènement des systèmes distribués, la haute concurrence (High Concurrency) fait généralement référence à la garantie que le système peut traiter de nombreuses requêtes en parallèle en même temps grâce à la conception. En termes simples, une concurrence élevée signifie qu'au même moment, de nombreux utilisateurs accèdent simultanément à la même interface API ou à la même adresse URL. Cela se produit souvent dans des scénarios commerciaux avec un grand nombre d’utilisateurs actifs et une forte concentration d’utilisateurs.
2. Haute disponibilité
La haute disponibilité HA (haute disponibilité) est l'un des facteurs qui doivent être pris en compte dans la conception d'une architecture de système distribué. Cela signifie généralement qu'un système est spécialement conçu pour réduire les temps d'arrêt tout en maintenant un degré élevé. de disponibilité de ses services.
3. Séparation de la lecture et de l'écriture
Afin d'assurer la stabilité des produits de base de données, de nombreuses bases de données disposent de fonctions de sauvegarde à chaud sur deux machines. C'est-à-dire que le premier serveur de base de données est un serveur de production qui fournit des services externes d'ajout, de suppression et de modification ; le deuxième serveur de base de données effectue principalement des opérations de lecture.
4. Veille froide/veille chaude
Veille froide : Deux serveurs, un en cours d'exécution et un ne fonctionnant pas en tant que sauvegarde. De cette façon, une fois le serveur en cours d'exécution tomber en panne, le serveur de sauvegarde sera en cours d'exécution. La solution de veille à froid est relativement simple à mettre en œuvre, mais l'inconvénient de la veille à froid est que la machine de secours ne prend pas automatiquement le relais en cas de panne de l'hôte et nécessite une commutation active des services.
Veille chaude : elle est communément appelée méthode active/veille. Les données du serveur, y compris les données de la base de données, sont écrites sur deux serveurs ou plus en même temps. Lorsque le serveur actif tombe en panne, la machine de secours est activée via un diagnostic logiciel (généralement via un diagnostic de battement de cœur) pour garantir que l'application est entièrement restaurée pour une utilisation normale dans un court laps de temps. Lorsqu'un serveur tombe en panne, il passe automatiquement à un autre serveur de sauvegarde.
5. Multi-actif dans des sites distants
Multi-actif dans des sites distants fait généralement référence à la création de centres de données indépendants dans différentes villes. La sauvegarde à froid consiste à sauvegarder la totalité des données. données et ne prend généralement pas en charge les besoins de l'entreprise. Seulement lorsque la salle informatique principale tombe en panne, elle sera transférée vers la salle informatique de secours. La multiactivité signifie que ces salles informatiques doivent également gérer le trafic et fournir un soutien commercial dans les activités quotidiennes.
6. Load Balance
L'équilibrage de charge est un service d'équilibrage de charge qui distribue le trafic sur plusieurs serveurs. Il peut automatiquement distribuer les capacités de service externe de l'application entre plusieurs instances, améliorer la disponibilité du système d'application en éliminant les points de défaillance uniques, vous permettant ainsi d'atteindre un niveau plus élevé de tolérance aux pannes d'application, fournissant ainsi de manière transparente la charge requise pour distribuer l'application. trafic. Une capacité équilibrée pour vous fournir des services efficaces, stables et sécurisés.
7. Séparation dynamique et statique
La séparation dynamique et statique fait référence à la méthode de conception architecturale consistant à séparer les pages statiques des pages dynamiques ou des interfaces de contenu statique et des interfaces de contenu dynamiques pour différents accès au système dans l'architecture du serveur Web, améliorant ainsi les performances d'accès. et la maintenabilité de l'ensemble du service.
8. Cluster
La capacité de charge simultanée d'un seul serveur est toujours limitée. Lorsque la capacité de traitement d'un seul serveur atteint le goulot d'étranglement des performances, plusieurs serveurs sont combinés pour fournir des services. Cette combinaison est appelée un cluster. dans le cluster est appelé un « nœud » du cluster, et chaque nœud peut fournir le même service, doublant ainsi les capacités de traitement simultanées de l'ensemble du système.
9. Distribué
Un système distribué consiste à diviser un système complet en plusieurs sous-systèmes indépendants en fonction des fonctions commerciales. Chaque sous-système est appelé un « service ». Le système distribué trie et distribue les requêtes à différents sous-systèmes, permettant à différents services de gérer différents services. demandes. Dans un système distribué, les sous-systèmes fonctionnent indépendamment et sont connectés via une communication réseau pour assurer l'interopérabilité des données et des services composites.
10. Théorie CAP
La théorie CAP signifie que dans un système distribué, la cohérence (cohérence), la disponibilité (disponibilité) et la tolérance de partition (tolérance aux pannes de partition) ne peuvent pas être établies en même temps.
- Cohérence : Cela nécessite qu'au même moment, toutes les sauvegardes de données dans le système distribué soient identiques ou dans le même état.
- Disponibilité : Même après la panne de certains nœuds du cluster système, le système peut toujours répondre correctement aux demandes des utilisateurs.
- Partition Fault Tolerance : le système est capable de tolérer les pannes de communication réseau entre les nœuds.
En termes simples, dans un système distribué, jusqu'à deux des attributs ci-dessus peuvent être pris en charge. Mais évidemment, puisqu'il est distribué, nous sommes obligés de le partitionner. Puisqu'il est partitionné, nous ne pouvons pas éviter à 100 % les erreurs de partition. Nous ne pouvons donc faire un choix qu’entre cohérence et disponibilité.
Dans les systèmes distribués, nous recherchons souvent la disponibilité, qui est plus importante que la cohérence. Alors, comment atteindre une haute disponibilité, voici une autre théorie, qui est la théorie BASE, qui élargit encore la théorie CAP.
11. Théorie BASE
La théorie BASE déclare :
- Basiquement disponible (basiquement disponible)
- Eventuellement cohérent (éventuellement cohérent)
La théorie BASE est le résultat d'un compromis entre cohérence et disponibilité dans CAP, L'idée centrale de la théorie est la suivante : nous ne pouvons pas atteindre une forte cohérence, mais chaque application peut utiliser des méthodes appropriées en fonction de ses propres caractéristiques commerciales pour que le système atteigne une cohérence finale.
12. Expansion horizontale/expansion verticale
L'expansion horizontale Scale Out répartit la charge en ajoutant plus de serveurs ou d'instances de programme, augmentant ainsi la capacité de stockage et la puissance de calcul. De plus, recherchez le backend du compte officiel Programming Technology Circle et répondez « centre commercial » pour obtenir un coffret cadeau surprise.
L'expansion verticale Scale Up améliore la capacité de traitement d'une seule machine.
Il existe deux façons de s'étendre verticalement :
- (1) Améliorez les performances du matériel autonome, par exemple : augmentez le nombre de cœurs de processeur tels que 32 cœurs, mettez à niveau vers une meilleure carte réseau telle que 10G, mettez à niveau vers un meilleur disque dur tel que SSD, étendez le disque dur capacité de disque telle que 2T et étendre la mémoire système telle que 128G; débit du service, utilisez des structures de données sans verrouillage pour réduire le temps de réponse ;
Semblable à l'expansion horizontale. Les nœuds du serveur de cluster sont tous des nœuds homologues parallèles. Lorsqu'une expansion est requise, davantage de nœuds peuvent être ajoutés pour améliorer les capacités de service du cluster. De manière générale, les chemins critiques du serveur (tels que la connexion, le paiement, la logique métier principale, etc.) doivent prendre en charge l'expansion parallèle dynamique au moment de l'exécution.
14. L'expansion élastique
fait référence à l'expansion dynamique en ligne du cluster déployé. Le système d'expansion élastique peut ajouter automatiquement davantage de nœuds (y compris des nœuds de stockage, des nœuds de calcul et des nœuds de réseau) en fonction de l'environnement commercial réel et de certaines stratégies pour augmenter la capacité du système, améliorer les performances du système ou améliorer la fiabilité du système, ou atteindre ces trois objectifs à en même temps.
15. Synchronisation d'état/synchronisation de trame
Synchronisation d'état : La synchronisation d'état signifie que le serveur est responsable du calcul de toute la logique du jeu et de la diffusion des résultats de ces calculs. Le client est uniquement responsable de l'envoi des opérations du joueur et de l'affichage des opérations reçues. résultats du jeu.
Caractéristiques : la synchronisation des états est hautement sécurisée, les mises à jour logiques sont pratiques, la déconnexion et la reconnexion sont rapides, mais l'efficacité du développement est faible, le trafic réseau augmente avec la complexité du jeu et le serveur doit supporter une plus grande pression.
Synchronisation des trames : Le serveur transfère uniquement les messages sans aucun traitement logique. Chaque client a le même nombre d'images par seconde et traite les mêmes données d'entrée dans chaque trame.
Fonctionnalité : La synchronisation des images doit garantir que le système a la même sortie sous la même entrée. La synchronisation de trames présente une efficacité de développement élevée, une faible consommation de trafic et une faible stabilité, et exerce très peu de pression sur le serveur. Cependant, les exigences du réseau sont élevées, les temps de déconnexion et de reconnexion sont longs et la pression informatique du client est élevée.
Communication réseau
1. Pool de connexions
Établissez un pool de tampons de connexion à l'avance et fournissez un ensemble de stratégies d'utilisation, d'allocation et de gestion des connexions afin que les connexions du pool de connexions puissent être réutilisées efficacement et en toute sécurité, en évitant les frais généraux. d'établissement et de fermeture fréquents de connexions.
2. Déconnexion et reconnexion
En raison des fluctuations du réseau, les utilisateurs sont déconnectés par intermittence du serveur. Une fois le réseau restauré, le serveur tente de connecter l'utilisateur à l'état et aux données lors de sa dernière déconnexion.
3. Persistance de session
La persistance de session fait référence à un mécanisme sur l'équilibreur de charge qui peut identifier la corrélation entre le processus d'interaction entre le client et le serveur et garantir qu'une série d'accès associés lors de l'équilibrage de charge sont tous attribués. à une machine. Pour le dire en termes humains : plusieurs requêtes initiées au cours d’une session tomberont toutes sur la même machine.
4. Connexion longue/connexion courte
fait généralement référence à la connexion longue et à la connexion courte de TCP. Une connexion longue signifie qu'une fois la connexion TCP établie, la connexion est maintenue. Généralement, des battements de cœur sont envoyés les uns aux autres pour confirmer l'existence de la correspondance. Plusieurs transmissions de données commerciales sont effectuées au milieu et la connexion n'est généralement pas active. déconnecté. Les connexions courtes font généralement référence à l'établissement d'une connexion, à l'exécution d'une transaction (telle qu'une requête http), puis à la fermeture de la connexion.
5. Contrôle de flux/contrôle de congestion
Le contrôle de flux empêche l'expéditeur d'envoyer trop rapidement et d'épuiser les ressources du destinataire, de sorte que celui-ci n'ait pas le temps de traiter.
Le contrôle de la congestion empêche l'expéditeur d'envoyer des messages trop rapidement, ce qui fait que le réseau n'a pas le temps de traiter et provoque une congestion, ce qui à son tour entraîne une baisse des performances de cette partie et même de l'ensemble du réseau. Dans les cas graves, cela peut même entraîner une baisse des performances. provoquer l'arrêt des services de communication réseau.
6. L'effet de troupeau tonitruant
L'effet de troupeau tonitruant est aussi appelé effet de troupeau tonitruant, mais comment s'appelle-t-il ? le même événement (état de veille), si l'événement que vous attendez se produit, alors il réveillera tous les processus (ou threads) en attente, mais au final un seul processus (thread) pourra obtenir le "contrôle" de ce temps et traite l'événement, tandis que les autres processus (thread) ne parviennent pas à obtenir le « contrôle » et ne peuvent que rentrer dans l'état dormant. Ce phénomène et ce gaspillage de performances sont appelés troupeaux tonitruants.
7. NAT
NAT (Network Address Translation, Network Address Translation) consiste à remplacer les informations d'adresse dans l'en-tête du message IP. NAT est généralement déployé à la sortie du réseau d'une organisation pour assurer l'accessibilité du réseau public et la connectivité du protocole de couche supérieure en remplaçant l'adresse IP du réseau interne par l'adresse IP de sortie.
Panne anormale
1. Temps d'arrêt
Le temps d'arrêt fait généralement référence à une panne de l'ordinateur hôte en raison d'une panne inattendue. Deuxièmement, certains serveurs, tels que les blocages de bases de données, peuvent également être appelés temps d'arrêt. Certains services sur certains serveurs raccrochent, pour ainsi dire.
2. coredump
Lorsqu'une erreur de programme se produit et est interrompue anormalement, le système d'exploitation stocke l'état actuel du travail du programme dans un fichier coredunmp. Habituellement, les fichiers coredump contiennent de la mémoire, l'état du registre, le pointeur de pile, des informations sur la gestion de la mémoire, etc. lorsque le programme est en cours d'exécution.
3. Pénétration/panne/avalanche du cache
Pénétration du cache : La pénétration du cache fait référence à l'interrogation de données qui n'existent certainement pas. Puisque le cache n'atteint pas, il doit être interrogé à partir de la base de données. trouvée, elle ne sera pas écrite dans le cache, ce qui entraînera l'interrogation de ces données inexistantes dans la base de données à chaque fois qu'elles seront demandées, mettant ainsi la pression sur la base de données.
Panne du cache : la panne du cache fait référence au moment où une clé de point d'accès expire à un certain moment, et il y a un grand nombre de requêtes simultanées pour cette clé à ce moment, donc un grand nombre de requêtes atteignent la base de données .
Avalanche de cache : L'avalanche de cache fait référence au délai d'expiration d'une grande quantité de données dans le cache, et l'énorme quantité de données de requête entraîne une pression excessive sur la base de données et même des temps d'arrêt.
La différence avec la panne de cache est que la panne de cache est l'échec des clés de hotspot, et l'avalanche de cache est l'échec d'un grand nombre de clés en même temps.
4. 500/501/502/503/504/505
500 Erreur de serveur interne : Erreur de service interne Généralement, le serveur rencontre une situation inattendue et ne peut pas terminer la demande. Raisons possibles :
1. Erreurs de programme, telles que des erreurs de syntaxe ASP ou PHP ;
2 En raison de la concurrence élevée, les limitations des ressources du système ne peuvent pas ouvrir trop de fichiers.
501 Non implémenté : Le serveur ne comprend pas ou ne prend pas en charge la requête HTTP demandée.
502 Bad Gateway : Le serveur WEB échoue. Cela peut être dû à des processus de programme insuffisants. Le php-fpm demandé a été exécuté, mais il n'a pas été terminé pour une raison quelconque, ce qui conduit finalement à l'arrêt du php-fpm. processus. Raisons possibles :
1. Serveur Nginx, le nombre de processus php-cgi n'est pas suffisant ;
2.
3. Le processus php-cgi est mort
503 Service indisponible : Le serveur est actuellement indisponible. Le serveur de maintenance du système est temporairement incapable de traiter la demande du client. Il s'agit uniquement d'un état temporaire. Vous pouvez contacter le fournisseur du serveur.
504 Gateway Timeout : L'erreur 504 du serveur indique un timeout, ce qui signifie que la requête envoyée par le client n'atteint pas la passerelle, et que la requête n'atteint pas php-fpm qui peut être exécuté. Ceci est généralement lié à la configuration. de nginx.conf.
505 Version HTTP non prise en charge : le serveur ne prend pas en charge la version du protocole HTTP utilisée dans la requête. (La version HTTP n'est pas prise en charge)
À l'exception de l'erreur 500, qui peut être une erreur de langage de programmation, le reste des erreurs peut probablement être compris comme des problèmes avec le serveur ou la configuration du serveur.
5. Débordement de mémoire/fuite de mémoire
Débordement de mémoire : Débordement de mémoire (Out Of Memory) signifie que lorsque le programme demande de la mémoire, il n'y a pas assez de mémoire pour que le demandeur puisse l'utiliser, ou en d'autres termes, cela donne vous avez un bloc pour stocker des données de type int Espace de stockage, mais vous stockez des données de type long, le résultat est que la mémoire n'est pas suffisante et une erreur MOO sera signalée, ce qu'on appelle un débordement de mémoire.
Fuite de mémoire : la fuite de mémoire fait référence à la mémoire tas allouée dynamiquement dans le programme qui n'est pas libérée ou ne peut pas être libérée pour une raison quelconque, entraînant un gaspillage de mémoire système, un ralentissement du programme ou même des pannes du système et d'autres conséquences graves .
6. Fuite de handle
La fuite de handle est que le processus ne libère pas le handle de fichier ouvert après avoir appelé le fichier système. Le phénomène général après une fuite de handle est que la machine ralentit, que le processeur augmente et que l'utilisation du processeur du cgi ou du serveur sur lequel se produit la fuite de handle augmente.
7. Deadlock
Deadlock fait référence à un phénomène de blocage provoqué par deux ou plusieurs threads en compétition pour les ressources ou communiquant entre eux pendant l'exécution. Sans force externe, ils sont tous empêchés d'être dans un état de blocage. À ce moment-là, on dit que le système est dans un état de blocage ou que le système est dans une impasse.
8. Interruption douce/interruption dure
Interruption dure : L'interruption à laquelle nous faisons habituellement référence est une interruption dure (hardirq).
Principalement utilisé pour informer le système d'exploitation des changements dans l'état des périphériques du système.
Interruption logicielle : 1. Habituellement, le noyau est interrompu par une routine de service d'interruption matérielle ; 2. Afin de répondre aux exigences des systèmes en temps réel, le traitement des interruptions doit être aussi rapide que possible.
Afin de réaliser cette fonctionnalité, Linux utilise des interruptions matérielles pour traiter les tâches qui peuvent être terminées en peu de temps lorsqu'une interruption se produit, et les tâches qui nécessitent beaucoup de temps pour traiter les événements sont terminées après l'interruption, qui est une interruption logicielle. (softirq).
9. Glitch
À court instant, les indicateurs de performances du serveur (tels que le trafic, les E/S disque, l'utilisation du processeur, etc.) sont bien supérieurs à la période précédant et suivant ce moment. L'apparition de problèmes signifie que les ressources du serveur sont inégalement et insuffisamment utilisées, ce qui peut facilement entraîner d'autres problèmes plus graves.
10. Attaque par relecture
L'attaquant envoie un paquet qui a été reçu par l'hôte de destination pour tromper le système. Il est principalement utilisé pour le processus d'authentification de l'identité et détruit l'exactitude de l'authentification. Il s'agit d'un type d'attaque qui répète continuellement, de manière malveillante ou frauduleuse, une transmission de données valide. Une attaque par rejeu peut être menée par l'initiateur ou par un adversaire qui intercepte et retransmet les données. Les attaquants utilisent la surveillance du réseau ou d'autres méthodes pour voler les informations d'authentification, puis les renvoyer au serveur d'authentification.
11. Network Island
Network Island fait référence à une situation dans un environnement de cluster dans laquelle certaines machines perdent la connexion réseau avec l'ensemble du cluster, sont divisées en un petit cluster et une incohérence des données se produit.
12. Asymétrie des données
Pour les systèmes de cluster, le cache est généralement distribué, c'est-à-dire que différents nœuds sont responsables d'une certaine plage de données mises en cache. Nous ne disséminons pas suffisamment les données mises en cache, ce qui entraîne la concentration d'une grande quantité de données mises en cache sur un ou plusieurs nœuds de service, ce que l'on appelle le biais de données. De manière générale, le biais des données est dû à une mauvaise mise en œuvre de l’équilibrage de charge.
13. Split-brain
Split-brain fait référence à une division du système causée par l'inaccessibilité du réseau entre certains nœuds d'un système de cluster. Différents petits clusters divisés fourniront des services en fonction de leurs états respectifs, et le cluster d'origine aura des services incohérents. en même temps, provoquant une concurrence entre les nœuds pour les ressources, le chaos du système et l'endommagement des données.
Surveillance des alarmes
1. Surveillance du service
L'objectif principal de la surveillance du service est de détecter avec précision et rapidité quand des problèmes de service surviennent ou sont sur le point de se produire afin de réduire l'ampleur de l'impact. Il existe généralement de nombreuses méthodes de suivi des services, qui peuvent être divisées en niveaux :
- Couche système (CPU, état du réseau, IO, charge de la machine, etc.)
- Couche application (état du processus, journal des erreurs, débit, etc.)
- Couche métier (code d'erreur du service/interface , temps de réponse) )
- Couche utilisateur (comportement des utilisateurs, surveillance de l'opinion publique, points enterrés front-end)
2. Surveillance de lien complet
Test de numérotation de service : Le test de numérotation de service est une méthode de surveillance. pour détecter la disponibilité des services (applications). Le service cible est périodiquement détecté via des nœuds de test d'accès à distance, qui sont principalement mesurés par la disponibilité et le temps de réponse. Il existe généralement plusieurs nœuds de test d'accès à distance à différents endroits.
Détection de nœuds : la détection de nœuds est une méthode de surveillance utilisée pour découvrir et suivre la disponibilité et la fluidité du réseau entre les nœuds dans différentes salles informatiques (centres de données). Elle est principalement mesurée par le temps de réponse, le taux de perte de paquets et le nombre de sauts. méthode Généralement ping, mtr ou autres protocoles privés.
Filtrage des alarmes : filtrez certaines alarmes prévisibles et excluez les données des statistiques d'alarme, telles que les erreurs de réponse http 500 causées par un petit nombre de visites du robot, les informations d'exception personnalisées du système d'entreprise, etc.
Déduplication d'alarme : Lorsqu'une alarme est notifiée au responsable, la même alarme ne sera plus reçue jusqu'à ce que l'alarme soit restaurée.
Suppression des alarmes : Afin de réduire les interférences causées par la gigue du système, une suppression doit également être mise en œuvre. Par exemple, une charge élevée momentanée sur le serveur peut être normale. Seules des charges élevées qui durent un certain temps sont nécessaires. à prendre au sérieux.
Récupération d'alarme : le personnel de développement/exploitation et de maintenance doit non seulement recevoir des notifications d'alarme, mais doit également recevoir des notifications indiquant que le défaut a été éliminé et que l'alarme est revenue à la normale.
Fusion d'alarmes : fusionnez plusieurs alarmes identiques générées en même temps. Par exemple, si un cluster de microservices comporte plusieurs alarmes avec une charge de sous-service excessive en même temps, elles doivent être fusionnées en une seule alarme.
Convergence des alarmes : Parfois, lorsqu'une alarme se produit, elle est souvent accompagnée d'autres alarmes. À ce stade, vous ne pouvez générer une alarme que pour la cause première, et les autres alarmes seront regroupées en sous-alarmes et les notifications seront envoyées ensemble. Par exemple, lorsqu'un serveur cloud dispose d'une alarme de charge CPU, elle est souvent accompagnée d'alarmes de disponibilité pour tous les systèmes qu'il transporte.
Auto-guérison des défauts : détection en temps réel des alarmes, pré-diagnostic et analyse, récupération automatique des défauts et ouverture des systèmes environnants pour fermer l'ensemble du processus.
Gouvernance des services
1. Les microservices
L'architecture des microservices est un modèle architectural qui préconise de diviser une seule application en un ensemble de petits services. Les services se coordonnent et coopèrent les uns avec les autres pour offrir aux utilisateurs une valeur ultime. Chaque service s'exécute selon son propre processus indépendant et les services communiquent entre eux à l'aide d'un mécanisme de communication léger (généralement une API Restful basée sur HTTP. Chaque service est construit autour d'une activité spécifique et peut être déployé indépendamment dans un environnement de production, comme celui d'une production). environnement, etc
2. Découverte de services
La découverte de services fait référence à l'utilisation d'un centre d'enregistrement pour enregistrer des informations sur tous les services dans un système distribué afin que d'autres services puissent trouver rapidement ces services enregistrés. La découverte de services est le module de base qui prend en charge l'architecture SOA et microservices à grande échelle, et elle doit être aussi hautement disponible que possible.
3. Traffic Peak Shaving
Si vous regardez la courbe de suivi des demandes du système de loterie ou de vente flash, vous constaterez que ce type de système aura un pic pendant la période où l'événement est ouvert. , le volume de requêtes du système, les charges des machines sont généralement relativement stables. Afin d'économiser les ressources de la machine, nous ne pouvons pas toujours fournir des capacités de ressources maximales pour répondre aux demandes de pointe à court terme. Par conséquent, certains moyens techniques doivent être utilisés pour affaiblir le pic de demande instantané et maintenir le débit du système contrôlable en cas de pic de demande. L'écrêtage des pics peut également être utilisé pour éliminer les problèmes et rendre l'utilisation des ressources du serveur plus équilibrée et plus complète. Les stratégies courantes d'écrêtement des pics incluent les files d'attente, la limitation de fréquence, le filtrage hiérarchique, la mise en cache multi-niveaux, etc.
4. Compatibilité des versions
Dans le processus de mise à niveau de la version, vous devez déterminer si la nouvelle structure de données peut comprendre et analyser les anciennes données après la version mise à niveau, si le protocole nouvellement modifié peut comprendre l'ancien protocole et répondre aux attentes. et une gestion appropriée. Cela nécessite la compatibilité des versions pendant le processus de conception du service.
5. Protection contre les surcharges
La surcharge signifie que la charge actuelle a dépassé la capacité de traitement maximale du système. L'apparition d'une surcharge entraînera l'indisponibilité de certains services. Si elle n'est pas gérée correctement, elle entraînera très probablement l'indisponibilité du service. être totalement indisponible, voire une avalanche. La protection contre les surcharges est une mesure prise contre cette situation anormale pour éviter que le service ne soit totalement indisponible.
6. Disjoncteur de service
La fonction du disjoncteur de service est similaire à celle de notre fusible domestique. Lorsqu'un service devient indisponible ou que le délai de réponse expire, afin d'éviter que l'ensemble du système ne s'avalanche, les appels au service sont temporairement arrêtés.
7. Rétrogradation du service
La rétrogradation du service se produit lorsque la pression du serveur augmente fortement, certains services et pages sont stratégiquement rétrogradés en fonction des conditions commerciales et du trafic actuels, afin de libérer les ressources du serveur pour assurer le fonctionnement normal des tâches principales. La dégradation spécifie souvent différents niveaux et effectue un traitement différent face à différents niveaux d'exception. De plus, recherchez sur le compte officiel Java Architect Technical Backend et répondez « Spring » pour obtenir un coffret cadeau surprise.
Selon la méthode de service : vous pouvez refuser le service, vous pouvez retarder le service et parfois vous pouvez fournir un service aléatoire.
En fonction de l'étendue du service : une certaine fonction peut être coupée, ou certains modules peuvent être coupés.
En bref, le déclassement d'un service nécessite différentes stratégies de déclassement en fonction des différents besoins de l'entreprise. L’objectif principal est que même si le service est endommagé, c’est mieux que rien.
8. Meltdown VS Downgrade
Gleiche Punkte: Die Ziele sind die gleichen, angefangen bei Verfügbarkeit und Zuverlässigkeit, um Systemabstürze zu verhindern, aber am Ende stellen Benutzer fest, dass einige Funktionen vorübergehend nicht verfügbar sind;
Unterschiedlicher Punkt: Die Auslösegründe sind in der Regel durch den Ausfall eines bestimmten Dienstes (nachgelagerter Dienst) verursacht, während die Verschlechterung des Dienstes im Allgemeinen aus der Gesamtlast
Strom betrachtet wird Die Begrenzung kann als eine Art Dienstverschlechterung angesehen werden, bei der der Eingabe- und Ausgabefluss des Systems begrenzt wird, um den Zweck des Systemschutzes zu erreichen. Im Allgemeinen kann der Durchsatz des Systems gemessen werden, um den stabilen Betrieb des Systems sicherzustellen. Sobald der Schwellenwert erreicht ist, der eingeschränkt werden muss, muss der Datenverkehr eingeschränkt und einige Maßnahmen ergriffen werden, um den Zweck zu erreichen den Verkehr einzuschränken. Zum Beispiel: verzögerte Bearbeitung, Ablehnung der Bearbeitung oder teilweise Ablehnung der Bearbeitung usw.
10. Fehlermaskierung
Entfernen Sie die fehlerhafte Maschine aus dem Cluster, um sicherzustellen, dass neue Anfragen nicht an die fehlerhafte Maschine verteilt werden.
Testmethoden
1. Black-Box-/White-Box-Tests
Black-Box-Tests berücksichtigen nicht die interne Struktur und die logische Struktur des Programms. Sie werden hauptsächlich verwendet, um zu testen, ob die Funktionen des Systems den Anforderungsspezifikationen entsprechen. Im Allgemeinen gibt es einen Eingabewert, einen Eingabewert und einen erwarteten Wert zum Vergleich.
White-Box-Tests werden hauptsächlich in der Unit-Testphase verwendet, hauptsächlich für Tests auf Codeebene. Für die interne logische Struktur des Programms umfassen die Testmethoden: Anweisungsabdeckung, Entscheidungsabdeckung, Bedingungsabdeckung, Pfadabdeckung und Bedingungskombination Abdeckung
2. Unit-/Integrations-/System-/Akzeptanztests
Softwaretests sind im Allgemeinen in vier Phasen unterteilt: Unit-Tests, Integrationstests, Systemtests und Akzeptanztests.
Unit-Tests: Beim Unit-Testen wird die kleinste überprüfbare Einheit in der Software überprüft und verifiziert, z. B. ein Modul, ein Prozess, eine Methode usw. Unit-Tests haben die kleinste Granularität und werden im Allgemeinen vom Entwicklungsteam mithilfe eines White-Box-Ansatzes getestet. Dabei wird hauptsächlich getestet, ob die Einheit dem „Design“ entspricht.
Integrationstests: Integrationstests werden auch als Assembly-Tests bezeichnet. Dabei werden normalerweise alle Programmmodule auf der Grundlage von Unit-Tests geordnet und inkrementell getestet. Integrationstests liegen zwischen Unit-Tests und Systemtests und spielen eine „Brückenrolle“. Im Allgemeinen verwendet das Entwicklungsteam zum Testen einen White-Box-Plus-Black-Box-Ansatz, der nicht nur das „Design“, sondern auch die „Anforderungen“ überprüft.
Systemtests: Beim Systemtest wird die integrierte getestete Software als Teil des Computersystems verwendet und mit anderen Teilen des Systems kombiniert, um eine Reihe strenger und effektiver Tests in der tatsächlichen Betriebsumgebung durchzuführen Entdecken Sie mögliche Probleme mit der Software, um den normalen Betrieb des Systems sicherzustellen. Systemtests weisen die größte Granularität auf und werden im Allgemeinen von einem unabhängigen Testteam mithilfe eines Black-Box-Ansatzes getestet. Dabei wird hauptsächlich getestet, ob das System die „Anforderungsspezifikationen“ erfüllt.
Akzeptanztest: Der Abnahmetest, auch Liefertest genannt, ist ein formaler Test, der auf Benutzerbedürfnissen und Geschäftsprozessen basiert, um festzustellen, ob das System die Akzeptanzkriterien erfüllt. Benutzer, Kunden oder andere autorisierte Stellen entscheiden, ob sie das System akzeptieren. Abnahmetests ähneln Systemtests. Der Hauptunterschied besteht darin, dass die Tester unterschiedlich sind.
3. Regressionstests
Nachdem Fehler entdeckt und behoben wurden oder neue Funktionen zur Software hinzugefügt wurden, führen Sie einen erneuten Test durch. Wird verwendet, um zu überprüfen, ob die festgestellten Mängel behoben wurden und die Änderungen keine neuen Probleme verursacht haben.
4. Rauchtest
Dieser Begriff stammt aus der Eisenwarenindustrie. Nachdem Sie Änderungen oder Reparaturen an Hardware oder Hardwarekomponenten vorgenommen haben, schalten Sie das Gerät direkt ein. Tritt kein Rauch auf, besteht die Komponente den Test. In der Software beschreibt der Begriff „Rauchtests“ den Prozess der Validierung von Codeänderungen vor der Einbettung in den Quellbaum des Produkts.
Rauchtests sind eine schnelle Strategie zur Überprüfung grundlegender Funktionen von Softwareversionspaketen während des Softwareentwicklungsprozesses. Es handelt sich um ein Mittel zur Bestätigung und Verifizierung der Grundfunktionen der Software und nicht um einen eingehenden Test des Softwareversionspakets.
Zum Beispiel: Für einen Smoke-Test eines Login-Systems müssen wir nur den richtigen Benutzernamen und das richtige Passwort testen, um die Kernfunktion des Logins zu überprüfen. Was Eingabefelder, Sonderzeichen usw. betrifft, können diese anschließend ausgeführt werden der Rauchtest.
5. Leistungstest
Beim Leistungstest werden verschiedene Leistungsindikatoren des Systems mithilfe automatisierter Testtools getestet, um eine Vielzahl normaler, Spitzen- und anormaler Lastbedingungen zu simulieren. Sowohl Lasttests als auch Stresstests sind Leistungstests und können kombiniert werden.
Durch Lasttests wird die Leistung des Systems unter verschiedenen Arbeitslasten ermittelt. Ziel ist es, die Änderungen verschiedener Leistungsindikatoren des Systems zu testen, wenn die Last allmählich zunimmt.
Stresstests sind Tests, die Engpässe oder inakzeptable Leistungspunkte eines Systems ermitteln, um das maximale Serviceniveau zu erreichen, das das System bieten kann.
6. Benchmark-Test
Benchmark ist auch eine Leistungstestmethode, mit der die maximale tatsächliche Betriebsleistung der Maschinenhardware und der Leistungsverbesserungseffekt der Softwareoptimierung gemessen werden. Er kann auch zur Identifizierung der CPU eines bestimmten Codes verwendet werden . Oder Probleme mit der Speichereffizienz. Viele Entwickler nutzen Benchmarks, um die Anzahl der Worker-Pools zu konfigurieren und sicherzustellen, dass der Durchsatz des Systems maximiert werden kann
A/B-Test besteht darin, zwei oder mehr Gruppen zufällig zugewiesener Stichproben mit ähnlichen Zahlen zum Vergleich zu verwenden. Wenn die experimentellen Ergebnisse der Versuchsgruppe und der Vergleichsgruppe in den Zielindikatoren statistisch signifikant sind, kann dies die Gruppenfunktionalität erklären kann zu den gewünschten Ergebnissen führen und Ihnen dabei helfen, Hypothesen zu validieren oder Produktentscheidungen zu treffen. 8. Code-Coverage-Tests
Code-Coverage ist ein Maß beim Software-Testen, das den Anteil und Umfang des Quellcodes im getesteten Programm beschreibt. Der resultierende Anteil wird Code-Coverage genannt. Bei Unit-Tests wird die Codeabdeckung häufig als Indikator zur Messung der Testqualität verwendet. Die Codeabdeckung muss beispielsweise 80 % oder 90 % erreichen. Seitdem haben Tester große Anstrengungen unternommen, um Code für die Fallabdeckung zu entwerfen.
Release-Bereitstellung
1. DEV/PRO/FAT/UAT
DEV (Entwicklungsumgebung): Entwicklungsumgebung, die von Entwicklern zum Debuggen verwendet wird, mit großen Versionsänderungen.
FAT (Feature Acceptance Test Environment): Funktionale Akzeptanztestumgebung, die von Softwaretestern zum Testen verwendet wird.
UAT (Benutzerakzeptanztestumgebung): Benutzerakzeptanztestumgebung, die zur Funktionsüberprüfung in der Produktionsumgebung verwendet wird und als Vorabversionsumgebung verwendet werden kann.
PRO (Produktionsumgebung): Produktionsumgebung, formelle Online-Umgebung.
2. Grayscale-Release
Grayscale-Release bedeutet, dass einige Benutzer im Zuge der Aktualisierung der Version durch Partitionskontrolle, Whitelist-Steuerung usw. auf Produktfunktionen aktualisiert werden, während der Rest der Benutzer unverändert bleibt und dies auch tut Wenn es nach einiger Zeit keine Rückmeldungen von Benutzern zu den Produktfunktionen gibt, wird der Umfang schrittweise erweitert und die neuen Versionsfunktionen werden schließlich für alle Benutzer geöffnet, um die Stabilität des Gesamtsystems sicherzustellen. Probleme können in der ersten Graustufe erkannt und geändert werden, um ihre Auswirkungen sicherzustellen.
3. Rollback
bezieht sich auf die Wiederherstellung des letzten korrekten Zustands (oder der letzten stabilen Version) des Programms oder der Daten, wenn ein Programm- oder Datenverarbeitungsfehler auftritt.