
マイクロサービスアーキテクチャは、ソフトウェア開発で広く使用されています。しかし、それを使用する組織は、ビジネスロジックの実装の難しさに加えて、分散型の障害にも直面しています。
分散コンピューティングエラーは十分に文書化されていますが、検出が困難です。その結果、大規模で信頼性の高い分散システムアーキテクチャの構築は複雑な課題になります。モノリシックシステムで見栄えのするコードは、ネットワーキングに移行すると問題になる可能性があります。 Mail.ruクラウドソリューション
チーム著者が数年間本番コードの典型的な障害の検出に従事している記事を翻訳し、この結果につながった理由を研究しました。この記事では、作成者が基本的なチェックリストとして使用するコードレビューガイドラインを提供します。
リモートシステムに障害が発生する
システムがどれほど注意深く設計されていても、ある時点でクラッシュします。これは、ソフトウェアが本番環境で起動されたときの事実です。
障害はさまざまな理由で発生します。バグ、インフラストラクチャの問題、突然のトラフィックスパイク、怠慢の衰退などですが、ほとんどの場合に発生します。アーキテクチャ全体の堅牢性と信頼性は、呼び出し元のモジュールがエラーを処理する方法によって異なります。
- . . , , . — . , .
- . , . ? ? , ? ? .
リモートシステムが実行されているかどうかがわからないため、この状況は完全なクラッシュよりも深刻です。したがって、このシナリオを処理するには、以下に説明する問題を常に確認する必要があります。
一部の問題は、Istioなどのサービスメッシュテクノロジを使用することで、アプリケーションコードに対して透過的に解決できます。ただし、そのような問題が方法に関係なく処理されることを確認する必要があります。
- リモートシステム呼び出しのタイムアウトを設定します。これは、リモートAPIおよびデータベース呼び出しのタイムアウト、イベント公開にも適用されます。通話中のすべてのリモートシステムにトレーリングタイムアウトと適切なタイムアウトが設定されているかどうかを確認します。これにより、リモートシステムが応答しなくなった場合に待機中にリソースを浪費することを回避できます。
- -. , — . , .
, - (, ). , , . — , . - (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 ?
- . , , , . . . , , . . .
- すべてのエントリポイントで入力を確認してください。分散環境では、システムのどの部分もセキュリティの観点から危険にさらされたり、バグが発生したりする可能性があります。したがって、各モジュールは、入力として受け取るものを確認する必要があります。そして、彼がクリーンな、つまり安全な入力を受け取ると思い込まないでください。
- コードリポジトリに資格情報を保存しないでください。これは非常によくある間違いであり、取り除くのは困難です。ただし、資格情報は常に外部の、できれば安全なストレージからシステムランタイムにロードする必要があります。
これらのガイドラインが、分散システムコードの一般的なバグを減らすのに役立つことを願っています。
幸運を!
他に読むべきこと: