architecture Microservice est répandue dans le développement de logiciels. Mais les organisations qui l'utilisent, en plus des difficultés de mise en œuvre de la logique métier, sont également confrontées à des défaillances distribuées.
Les erreurs de calcul distribué sont bien documentées mais difficiles à détecter. En conséquence, la construction d'une architecture de système distribué à grande échelle et fiable devient un défi complexe. Un code qui a fière allure sur un système monolithique peut devenir un problème une fois que vous passez à la mise en réseau.
Équipe Mail.ru Cloud Solutionstraduit un article dont l'auteur s'est engagé depuis plusieurs années dans la détection des défaillances typiques du code de production et a étudié les raisons qui ont conduit à ce résultat. Cet article fournit des directives de révision de code que l'auteur utilise comme liste de contrôle de base.
Le système distant échoue
Quel que soit le soin apporté à la conception du système, il échouera à un moment donné - c'est un fait lorsque le logiciel est lancé en production.
Les échecs se produisent pour diverses raisons: bogues, problèmes d'infrastructure, pics de trafic soudains, décroissance par négligence, mais ils se produisent presque toujours. La robustesse et la fiabilité de toute l'architecture dépend de la manière dont les modules appelants gèrent les erreurs:
- . . , , . — . , .
- . , . ? ? , ? ? .
Cette situation est pire qu'une panne totale, car on ne sait pas si le système distant est opérationnel. Par conséquent, pour gérer ce scénario, vous devez toujours rechercher les problèmes décrits ci-dessous.
Certains des problèmes peuvent être résolus de manière transparente au code de l'application en utilisant les technologies Service Mesh telles qu'Istio. Cependant, vous devez vous assurer que ces problèmes sont traités quelle que soit la méthode:
- Définissez des délais pour les appels système à distance . Cela s'applique également aux délais d'attente pour les appels d'API et de base de données distants, ainsi que pour la publication d'événements. Vérifiez si les délais d'attente et raisonnables sont définis pour tous les systèmes distants dans les appels. Cela évite de gaspiller des ressources en attendant si le système distant ne répond plus.
- -. , — . , .
, - (, ). , , . — , . - (Circuit Breaker). , , Hystrix. . , Circuit Breaker . — .
- - . - — , . , . , -. , .
- . , . , , .
- . , ( API, ), — . : , , . .
,
- , API . - API. , API . API API, — .
- SLA — . SLA , . , .
SLA : — . , SLA. — , , . - API-. SLA — SLA.
- . — , . , , , . .
— «» , «» . , id = 123, id =123. , «» , « ». .
- . , , . , Redis, . , .
- . API (), ? , , ? API ?
- . , , , . . . , , . . .
- Vérifiez l'entrée à chaque point d'entrée. Dans un environnement distribué, n'importe quelle partie du système peut être compromise du point de vue de la sécurité ou présenter des bogues. Par conséquent, chaque module doit vérifier ce qu'il reçoit en entrée. Et ne supposez pas qu'il recevra une entrée propre, c'est-à-dire sûre.
- Ne stockez jamais les informations d'identification dans un référentiel de code. C'est une erreur très courante dont il est difficile de se débarrasser. Cependant, les informations d'identification doivent toujours être chargées dans l'environnement d'exécution du système à partir d'un stockage externe, de préférence sécurisé.
J'espère que vous trouverez ces directives utiles pour réduire les bogues courants dans le code des systèmes distribués.
Bonne chance!
Quoi d'autre à lire: