カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2

ノヌト。 翻蚳。: この蚘事は、AWS テクノロゞヌ ゚バンゞェリストの Adrian Hornsby による䞀連の蚘事の続きです。圌は、IT システムの障害の圱響を軜枛するための実隓の重芁性を、シンプルか぀明確な方法で説明するこずを目指しおいたす。

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2

「蚈画を立おなければ、倱敗する぀もりだずいうこずになる。」 - ベンゞャミンフランクリン

В 最初の郚分 この䞀連の蚘事では、カオス ゚ンゞニアリングの抂念を玹介し、それが本番環境の障害に぀ながる前にシステムの欠陥を芋぀けお修正するのにどのように圹立぀かを説明したした。 たた、カオス ゚ンゞニアリングが組織内でポゞティブな文化的倉化をどのように促進するかに぀いおも説明したした。

第 XNUMX 郚の最埌に、「システムに障害を導入するためのツヌルず方法」に぀いお話すず玄束したした。 残念ながら、この点に関しお私の頭では独自の蚈画があったため、この蚘事では、カオス ゚ンゞニアリングを始めようずする人々の間で生じる最も䞀般的な質問に答えようず思いたす。 最初に䜕を壊すか

玠晎らしい質問です しかし、このパンダのこずは特に気にしおいないようで  。

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2
カオスパンダに手を出すな

簡朔な答え: リク゚スト パスに沿っお重芁なサヌビスをタヌゲットにしたす。

長くなりたすが明確な答え: カオスの実隓をどこから始めればよいかを理解するには、次の XNUMX ぀の領域に泚意しおください。

  1. 調べる クラッシュ履歎 そしおパタヌンを特定したす。
  2. 決める 重芁な䟝存関係;
  3. いわゆる 自信過剰効果.

面癜いですが、この郚分も同様に簡単に呌び出すこずができたす。 「自己発芋ず啓発ぞの旅」。 その䞭で、いく぀かのクヌルな楜噚で「挔奏」を始めたす。

1. 答えは過去にある

芚えおいるず思いたすが、最初の郚分で私ぱラヌ修正 (COE) の抂念を玹介したした。これは、テクノロゞヌ、プロセス、たたは組織における間違いを分析しお、その原因を理解し、防止するための方法です。将来的に再発する可胜性がありたす。 䞀般に、ここから始める必芁がありたす。

「珟圚を理解するには過去を知る必芁がある。」 — カヌル・セヌガン

障害の履歎を確認し、COE たたは事埌分析でタグ付けしお分類したす。 問題を匕き起こすこずが倚い䞀般的なパタヌンを特定し、COE ごずに次の質問を自問しおください。

「これは予枬できたので、フォヌルト挿入によっお防ぐこずができたでしょうか?」

私のキャリアの初期に䞀床倱敗したこずを芚えおいたす。 単玔なカオス実隓をいく぀か実行しおいれば、これは簡単に防ぐこずができたでしょう。

通垞の状態では、バック゚ンド むンスタンスは次のヘルス チェックに応答したす。 ロヌドバランサヌ (ELB)。 ELB はこれらのチェックを䜿甚しお、リク゚ストを正垞なむンスタンスにリダむレクトしたす。 むンスタンスが「異垞」であるこずが刀明するず、ELB はそのむンスタンスぞのリク゚ストの送信を停止したす。 ある日、マヌケティング キャンペヌンが成功した埌、トラフィック量が増加し、バック゚ンドのヘルス チェックぞの応答が通垞より遅くなり始めたした。 これらの健康蚺断は、 深い぀たり、䟝存関係の状態がチェックされたした。

しかし、しばらくの間はすべおが順調でした。

その埌、すでにかなりストレスの倚い状況䞋で、むンスタンスの 100 ぀が重芁ではない通垞の ETL cron タスクの実行を開始したした。 高トラフィックず cronjob の組み合わせにより、CPU 䜿甚率がほが XNUMX% に達したした。 CPU の過負荷によりヘルスチェックぞの応答がさらに遅くなり、ELB はむンスタンスにパフォヌマンスの問題が発生しおいるず刀断したした。 予想通り、バランサヌはトラフィックの分散を停止し、その結果、グルヌプ内の残りのむンスタンスの負荷が増加したした。

突然、他のすべおのむンスタンスもヘルスチェックに倱敗し始めたした。

新しいむンスタンスを起動するにはパッケヌゞのダりンロヌドずむンストヌルが必芁で、ELB が自動スケヌリング グルヌプ内でパッケヌゞを XNUMX ぀ず぀無効にするよりもはるかに長い時間がかかりたした。 すぐにプロセス党䜓が臚界点に達し、アプリケヌションがクラッシュしたこずは明らかです。

その埌、私たちは次の点を氞遠に理解したした。

  • 新しいむンスタンスを䜜成するずきに゜フトりェアをむンストヌルするには時間がかかりたす。䞍倉のアプロヌチを優先するこずをお勧めしたす。 ゎヌルデンアミ.
  • 困難な状況では、ヘルスチェックず ELB ぞの応答を優先する必芁がありたす。残りのむンスタンスの動䜜が耇雑になるこずは絶察に避けおください。
  • ヘルスチェックのロヌカル キャッシュは (たずえ数秒間であっおも) 非垞に圹立ちたす。
  • 困難な状況では、cron タスクやその他の重芁ではないプロセスを実行しないで、最も重芁なタスクのためにリ゜ヌスを節玄しおください。
  • 自動スケヌリングする堎合は、より小さいむンスタンスを䜿甚したす。 10 個の小さな暙本からなるグルヌプは、4 ぀の倧きな暙本からなるグルヌプよりも優れおいたす。 10 ぀のむンスタンスに障害が発生した堎合、最初のケヌスではトラフィックの 9% が 25 ポむントに分散され、XNUMX 番目のケヌスではトラフィックの XNUMX% が XNUMX ポむントに分散されたす。

このように、 これは予芋できたので、問題を導入するこずで防ぐこずができたでしょうか?

はい、そしおいく぀かの方法で。

たず、次のようなツヌルを䜿甚しお高い CPU 䜿甚率をシミュレヌトしたす。 stress-ng たたは cpuburn:

❯ stress-ng --matrix 1 -t 60s

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2
ストレス-ng

次に、むンスタンスをオヌバヌロヌドしたす。 wrk および他の同様のナヌティリティ:

❯ wrk -t12 -c400 -d20s http://127.0.0.1/api/health

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2

実隓は比范的単玔ですが、実際の倱敗によるストレスを経隓するこずなく、考えるための良い材料を提䟛できたす。

しかし そこで止たらないでください。 テスト環境でクラッシュを再珟し、質問に察する答えを確認しおください。これは予芋できたので、障害を導入するこずで防止できたのでしょうか?」 これは仮説をテストするためのカオス実隓の䞭のミニ カオス実隓ですが、倱敗から始たりたす。

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2
それは倢だったのでしょうか、それずも本圓に起こったのでしょうか

したがっお、倱敗の歎史を研究し、分析しおください EOC、「ヒット半埄」、より正確には圱響を受ける顧客の数によっおそれらをタグ付けしお分類し、パタヌンを探したす。 この問題を導入するこずで、この事態を予枬しお防ぐこずができたかどうかを自問しおください。 答えを確認しおください。

次に、範囲が最倧の最も䞀般的なパタヌンに切り替えたす。

2. 䟝存関係マップを構築する

アプリケヌションに぀いお少し考えおください。 その䟝存関係を瀺す明確なマップはありたすか? 障害が発生した堎合にどのような圱響があるか知っおいたすか?

アプリケヌションのコヌドにあたり粟通しおいない堎合、たたはコヌドが非垞に倧芏暡になっおいる堎合、コヌドの機胜やその䟝存関係を理解するのが難しい堎合がありたす。 これらの䟝存関係ず、それらがアプリケヌションずナヌザヌに䞎える可胜性のある圱響を理解するこずは、カオス ゚ンゞニアリングをどこから始めるべきかを知る䞊で重芁です。開始点は、最倧の圱響範囲を持぀コンポヌネントです。

䟝存関係を特定しお文曞化するこずを「」ず呌びたす。䟝存関係マップの構築» (䟝存関係マッピング)。 これは通垞、倧芏暡なコヌド ベヌスを持぀アプリケヌションに察しお、コヌド プロファむリング ツヌルを䜿甚しお行われたす。 (コヌドプロファむリング) および蚈噚類 (蚈装)。 ネットワヌク トラフィックを監芖しおマップを䜜成するこずもできたす。

ただし、すべおの䟝存関係が同じずいうわけではありたせん (これにより、プロセスがさらに耇雑になりたす)。 いく぀かの 臎呜的、 他の - 二次的 (少なくずも理論䞊は、重芁ではないず考えられおいた䟝存関係の問題が原因でクラッシュが発生するこずが倚いため).

重芁な䟝存関係がなければ、サヌビスは機胜したせん。 重芁ではない䟝存関係」しおはいけない» 転倒時にサヌビスに圱響を䞎えるため。 䟝存関係を理解するには、アプリケヌションで䜿甚される API を明確に理解する必芁がありたす。 これは、少なくずも倧芏暡なアプリケヌションでは、思っおいるよりもはるかに難しい堎合がありたす。

たずはすべおの API を確認しおください。 䞀番匷調する 重芁か぀重芁な。 取る завОсОЌПстО コヌドリポゞトリからチェックしおください 接続ログ、衚瀺したす ドキュメンテヌション (もちろん、それが存圚する堎合は、そうでない堎合はただ残っおいたすПもっず倧きな問題。 ツヌルを䜿甚しお、 プロファむリングずトレヌス、倖郚呌び出しを陀倖したす。

次のようなプログラムを䜿甚できたす netstat - システム内のすべおのネットワヌク接続 (アクティブな゜ケット) のリストを衚瀺するコマンド ラむン ナヌティリティ。 たずえば、珟圚の接続をすべおリストするには、次のように入力したす。

❯ netstat -a | more 

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2

AWS では次のこずができたす フロヌログ (フロヌ ログ) VPC は、VPC 内のネットワヌク むンタヌフェむスに送受信される IP トラフィックに関する情報を収集できる方法です。 このようなログは、他のタスクにも圹立ちたす。たずえば、特定のトラフィックがむンスタンスに到達しない理由の答えを芋぀けるなどです。

䜿甚するこずもできたす AWS X 線。 X 線を䜿甚するず、詳现な「究極の」情報を埗るこずができたす。 端から端たで リク゚ストがアプリケヌション内を移動する際の抂芁を把握し、アプリケヌションの基瀎ずなるコンポヌネントのマップも䜜成したす。 䟝存関係を特定する必芁がある堎合に非垞に䟿利です。

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2
AWS X-Ray コン゜ヌル

ネットワヌク䟝存関係マップは郚分的な解決策にすぎたせん。 はい、どのアプリケヌションがどのアプリケヌションず通信しおいるかが衚瀺されたすが、他にも䟝存関係がありたす。

倚くのアプリケヌションは DNS を䜿甚しお䟝存関係に接続したすが、他のアプリケヌションはサヌビス怜出を䜿甚したり、構成ファむル内でハヌドコヌディングされた IP アドレスを䜿甚したりする堎合もありたす (䟋: /etc/hosts).

たずえば、次のように䜜成できたす。 DNSブラックホヌル 経由 iptables そしお䜕が壊れるか芋おみたしょう。 これを行うには、次のコマンドを入力したす。

❯ iptables -I OUTPUT -p udp --dport 53 -j REJECT -m comment --comment "Reject DNS"

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2
DNSブラックホヌル

堎合 /etc/hosts たたは他の蚭定ファむルを䜿甚するず、䜕も知らない IP アドレスが芋぀かるこずがありたす (はい、残念ながら、これも起こりたす)。再び助けを求めるこずができたす。 iptables。 あなたが発芋したずしたしょう 8.8.8.8 そしお、これが Google のパブリック DNS サヌバヌ アドレスであるこずを知りたせん。 を䜿甚するこずで iptables 次のコマンドを䜿甚しお、このアドレスぞの送受信トラフィックをブロックできたす。

❯ iptables -A INPUT -s 8.8.8.8 -j DROP -m comment --comment "Reject from 8.8.8.8"
❯ iptables -A OUTPUT -d 8.8.8.8 -j DROP -m comment --comment "Reject to 8.8.8.8"

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2
アクセスを閉じる

最初のルヌルは、Google のパブリック DNS からのすべおのパケットをドロップしたす。 ping 動䜜したすが、パケットが返されたせん。 XNUMX 番目のルヌルは、システムから Google のパブリック DNS に向かうすべおのパケットをドロップしたす。 ping 埗る 操䜜は蚱可されおいない.

泚: この特定のケヌスでは、を䜿甚する方がよいでしょう。 whois 8.8.8.8, しかし、これはほんの䞀䟋です。

TCP ず UDP を䜿甚するすべおのものは実際には IP にも䟝存するため、りサギの穎をさらに深く調べるこずができたす。 ほずんどの堎合、IP は ARP に関連付けられたす。 ファむアりォヌルも忘れずに 

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2
赀い薬を飲めばワンダヌランドに留たり、りサギの穎がどれだけ深いか教えおあげる。」

より根本的なアプロヌチは、 切断する 車を䞀台ず぀芋お、䜕が壊れおいるかを確認しおください...「カオスモンキヌ」になりたす。 もちろん、倚くの実皌働システムはそのようなブルヌ​​ト フォヌス攻撃向けに蚭蚈されおいたせんが、少なくずもテスト環境では詊すこずができたす。

䟝存関係マップの構築は、倚くの堎合、非垞に時間のかかる䜜業です。 私は最近、数癟のマむクロサヌビスずコマンドの䟝存関係マップを半自動的に生成するツヌルの開発にほが 2 幎を費やしたクラむアントず話をしたした。

ただし、その結果は非垞に興味深く、有益です。 システム、その䟝存関係、操䜜に぀いお倚くのこずを孊ぶこずができたす。 繰り返したすが、蟛抱匷く埅っおください。最も重芁なのは旅そのものです。

3. 自信過剰に泚意

「どんなこずを倢芋る人は、それを信じたす。」 — デモステネス

聞いたこずはありたすか 自信過剰効果?

りィキペディアによるず、自信過剰効果ずは、「特に自信のレベルが比范的高い堎合に、自分の行動や決定に察する人の自信が、それらの刀断の客芳的な正確さよりも倧幅に倧きくなる認知バむアス」です。

カオス ゚ンゞニアリング: 意図的な砎壊の芞術。 パヌト2
本胜ず経隓に基づいお...

私の経隓では、この歪みはカオス ゚ンゞニアリングをどこから始めるべきかに぀いおの倧きなヒントずなりたす。

自信過剰なオペレヌタヌに泚意しおください。

チャヌリヌ「これはXNUMX幎間萜ちおないよ、倧䞈倫だよ」
クラッシュ「埅っおください すぐに行きたす」

自信過剰の結果ずしおの偏芋は、それに圱響を䞎えるさたざたな芁因により、朜䌏性があり危険ですらありたす。 これは、チヌムメンバヌがテクノロゞヌに心血を泚いだ堎合、たたはテクノロゞヌの「修正」に倚くの時間を費やした堎合に特に圓おはたりたす。

たずめ

カオス ゚ンゞニアリングの出発点を探すず、垞に予想以䞊の結果が埗られたす。チヌムはすぐに物事を壊し始めるず、(カオス) のよりグロヌバルで興味深い本質を芋倱いたす。゚ンゞニアリング - クリ゚むティブなアプリケヌション 科孊的方法 О 経隓的蚌拠 ゜フトりェアシステムの蚭蚈、開発、運甚、保守および改善のため。

これで第 XNUMX 郚は終了です。 レビュヌを曞いたり、意芋を共有したり、手をたたいたりしおください M。 次のパヌトでは、 本圓に システムに障害を導入するためのツヌルず方法を怜蚎したす。 それたで

翻蚳者からの远䌞

私たちのブログもお読みください:

出所 habr.com

コメントを远加したす