US-EAST-1でのAmazonKinesisの倧芏暡な混乱に関するポストモヌテム11月25日

箄transl。先週、AWSサヌビスの1぀が停止したため、この䞻芁プロバむダヌの倚数のクラりドサヌビスが利甚可胜/正しく機胜したした。むンタヌネット䌚瀟の゚ンゞニアによっお即座に投皿された公匏出版物は、事件の詳现、その原因、そしお最も重芁なこずに、事件から孊んだ教蚓に぀いお述べおいたす。私たちはあなたの泚意にその翻蚳を提瀺したす。



この投皿では、2020幎11月25日にバヌゞニア北郚US-EAST-1で発生したサヌビスの䞭断の詳现を共有したいず思いたす。



Amazon Kinesisは、ストリヌミングデヌタをリアルタむムで収集、凊理、分析したす。顧客による盎接䜿甚に加えお、倚くのAWSサヌビスに関䞎しおいたす。これらのサヌビスも停止に芋舞われたした。このむベントのトリガヌ䞻な原因ではありたせんは、サヌビスぞの容量の比范的小さな远加でした。これは、PSTの午前2:44に開始され、午前3:47に終了したした。



キネシスデバむスに぀いお



Kinesisは、デヌタストリヌムを凊理するセルセルの倚数の「バック゚ンド」クラスタヌを䜿甚したす。これらはKinesisの䞻力補品です。圌らは、ストリヌミングの配信、アクセス、スケヌリングを担圓したす。ストリヌムは、シャヌディングを䜿甚しおフロント゚ンドサヌバヌからバック゚ンドサヌバヌに配信されたす。バック゚ンドクラスタヌは倚くのシャヌドを「所有」し、䞀貫したスケヌリングず障害分離を提䟛したす。私たちの堎合のフロント゚ンドの䜜業は小さいですが、重芁です。これは、バック゚ンドクラスタヌ䞊の正しいスレッドシャヌドぞの芁求の認蚌、調敎、およびルヌティングを担圓したす。



フロント゚ンドのマシンフリヌトに新しい容量を远加しおいたした。各フロント゚ンドサヌバヌは、メンバヌシップずシャヌド所有者バック゚ンドクラスタヌ間を含むデヌタのキャッシュを圢成し、いわゆるシャヌドマップを圢成したす。メンバヌシップ情報を提䟛するサヌビスに芁求を送信し、DynamoDBから構成デヌタを取埗するこずにより、この情報を取埗したす。



さらに、各サヌバヌは他のKinesisフロント゚ンドサヌバヌからのメッセヌゞを継続的に凊理したす。これを行うために、各フロント゚ンドサヌバヌの各フロント゚ンドマシンのOSにスレッドが䜜成されたす。新しい容量が远加されるず、フロント゚ンドパヌクですでに動䜜しおいるサヌバヌが新しいメンバヌに぀いお孊習し、察応するストリヌムを䜜成したす。既存のすべおのフロント゚ンドサヌバヌが新しいマシンに぀いお認識するのに最倧1時間かかりたす。



蚺断ず問題解決



5:15 PSTに、Kinesisレコヌドの曞き蟌みず取埗䞭に最初の゚ラヌメッセヌゞが衚瀺されたした。私たちのチヌムはすぐにログの調査を開始したした。疑惑はすぐに新しい容量に萜ちたしたが、゚ラヌのいく぀かは新しいマシンにたったく関係がなく、新しい容量をすべお削陀したずしおも、おそらくどこにも行きたせんでした。



それでも、予防策ずしお、他の゚ラヌの原因を突き止めるために、それらを削陀し始めたした。それらの倚様性は私たちの蚺断を遅らせたした。フロント゚ンドマシンフリヌトの既存および新芏メンバヌによるあらゆる皮類の呌び出しのあらゆる偎面でバグが発生したため、副䜜甚を根本原因から分離するこずは非垞に困難でした。



PSTの午前7:51の時点で、容疑者を少数の候補者に絞り蟌み、最も可胜性の高い原因のいずれかが完党なフロント゚ンドの再起動を必芁ずするこずを確認したした。キネシスチヌムは、このプロセスが遅くお詳现であるべきであるこずを完党によく知っおいたした。



実際のずころ、シャヌドカヌドぞの入力は、フロント゚ンドサヌバヌのリ゜ヌスに察する着信芁求の凊理ず競合したす。したがっお、フロント゚ンドサヌバヌのオンラむンぞの埩垰が速すぎるず、2぀のプロセス間に競合が発生し、着信芁求を凊理するには少なすぎたす。結果は予枬可胜です。゚ラヌ率の増加ず埅ち時間の増加です。さらに、遅いフロント゚ンドサヌバヌは、異垞の兆候ずしお認識される可胜性がありたす。これにより、䜿甚可胜なサヌバヌのリストからサヌバヌが削陀され、リカバリプロセスがさらに遅くなる可胜性がありたす。



考えられるすべおの解決策には、各フロント゚ンドサヌバヌの構成を倉曎しお再起動するこずが含たれおいたした。トラブルの原因メモリに圧力をかけおいるように芋える問題の最有力候補は有望に芋えたしたが、間違っおいるず、すべおを修正しお再起動する必芁があるため、回埩時間が2倍になるリスクがありたした。再起動を高速化するために、調査ず䞊行しお、フロント゚ンドサヌバヌの構成の倉曎を開始し、フロント゚ンドネむバヌからではなく、起動時にメタデヌタストアから盎接デヌタを受信できるようにしたした。



䞻な理由



PSTの午前9時39分に、クラッシュの根本原因を最終的に確認するこずができたした。それは蚘憶ずは関係がないこずがわかった。新しい容量が远加された結果、すべおのフロント゚ンドサヌバヌのスレッド数が、システム構成で蚱可されおいる最倧数を超えたした。制限を超えたため、キャッシュシャヌドカヌドを䜜成できたせんでした。その結果、フロント゚ンドサヌバヌはリク゚ストをバック゚ンドクラスタヌに転送できたせんでした。



事前テストなしでOSのスレッド制限を増やしたくはありたせんでした。たた、その時点で远加容量がすでに削陀されおいたため、スレッド数のシステム制限を超えるリスクは最小限であるず刀断し、サヌバヌを再起動し続けたした。新しいフロント゚ンドの最初のグルヌプは、1007PSTにKinesisトラフィックの受け入れを開始したした。



フロント゚ンドフリヌトは数千のサヌバヌで構成されおおり、䞊蚘の理由により、1時間あたり数癟以䞋の速床でサヌバヌを远加できたす。正午以降、Kinesisサヌビス゚ラヌが着実に枛少しおいるこずに泚目しお、フロント゚ンドにトラフィックをゆっくりず远加し続けたした。サヌビスは午埌10時23分PSTに完党に回埩したした。



私たちは䜕を孊びたしたか



キネシス事件からいく぀かの教蚓を孊び、近い将来修正を行う予定です。



  • , CPU . , , , . , . , .

  • .
  • , . , .
  • -. - AWS ( CloudWatch) , -.
  • (cellularization) ( , ). ( -) . Kinesis , , , . / , , .




クラッシュは、Kinesisを䜿甚する䞀郚のサヌビスにも圱響したした。



Amazon Cognitoは、Kinesis Data Streamsを䜿甚しお、APIアクセスパタヌンを収集および分析したす。この情報はCognitoサヌビスの運甚に非垞に圹立ちたすが、配信される保蚌はありたせん最善の努力。デヌタはロヌカルにバッファリングされ、Kinesis DataStreamsサヌビスでの遅延たたは短期間の䜿甚䞍可にサヌビスが察凊できるようにしたす。



残念ながら、Kinesis Data Streamsが長期間䜿甚できなくなったため、バッファリングコヌドに朜圚的なバグがあり、CognitoWebサヌバヌがKinesisDataStreamバッファのブロックを開始したした。その結果、Cognitoの消費者は、APIの䞍具合に盎面し、CognitoナヌザヌプヌルずIDプヌルの埅ち時間が長くなりたした。倖郚ナヌザヌは、䞀時的なAWS資栌情報を認蚌たたは取埗できたせんでした。



停止の初期段階で、Cognitoチヌムは、容量を远加しおKinesisの通話バッファリング機胜を匷化するこずにより、Kinesisのバグの圱響を軜枛しようずしたした。圓初、これはサヌビスに有益な効果をもたらしたしたが、PSTの午前7:01たでに、゚ラヌ率が倧幅に増加したした。䞊行しお、チヌムはCognitoのKinesisぞの䟝存を枛らすために取り組みたした。午前10時15分に、この゜リュヌションが展開され、゚ラヌ率が䜎䞋し始めたした。午埌12時15分たでに、゚ラヌ率は倧幅に䜎䞋し、PSTの午埌2時18分には、Cognitoは正垞に機胜しおいたした。この問題の再発を防ぐために、CognitoWebサヌバヌを倉曎したした。バッファを䜿い果たすこずなくナヌザヌの問題に぀ながる、KinesisAPI゚ラヌを蚱容できるようになりたした。



CloudWatchKinesis DataStreamsを䜿甚しおメトリックずログを凊理したす。午前5時15分以降、CloudWatchではPutMetricDataAPIずPutLogEventsAPIの゚ラヌず遅延が増加し、アラヌトが状態になりたしたINSUFFICIENT_DATA。䞀郚のCloudWatchメトリックは停止䞭も凊理され続けたしたが、それらのほずんどは倚数の゚ラヌず遅延の増加の犠牲になりたした。



PSTの午埌5時47分に、Kinesis Data Streamの状況が改善するに぀れお回埩の最初の兆候が珟れ、午埌10時31分たでにCloudWatchのメトリックずアラヌトが完党に回埩したした。次の数時間で、遅延メトリックずログの凊理が続行されたした。 CloudWatchがバグに苊しんでいる間、内郚および倖郚のクラむアントはメトリックデヌタをCloudWatchに配信できたせんでした。その結果、CloudWatchメトリックデヌタにギャップがありたす。



珟時点では、CloudWatchサヌビスはKinesisを䜿甚しおメトリックずログを収集しおいたすが、そのチヌムは間もなく倉曎を実装し、その埌CloudWatchはデヌタをロヌカルストレヌゞに3時間保存したす。この倉曎により、CloudWatchメトリックAutoScalingを含むに関連付けられたナヌザヌずサヌビスが、オンプレミスのCloudWatchデヌタストアで新しく収集されたメトリックに盎接アクセスできるようになりたす。このアむデアはすでにUS-EAST-1地域で実装されおおり、今埌数週間でグロヌバルに展開する予定です。



さらに2぀のサヌビスが、CloudWatchメトリックに関する問題の人質になりたした。



  • たず、CloudWatchメトリックに基づくAutoScalingポリシヌでは、CloudWatchが跳ね返り始めた午埌5時47分たで遅延が発生したした。
  • -, Lambda. - CloudWatch. Lambda, , , CloudWatch . 6:15 PST , , -. : . 10:36 PST , .


CloudWatch EventsずEventBridgeでは、午前5時15分ETからむベント凊理でAPI゚ラヌず遅延が増加したした。可甚性を向䞊させた埌、Kinesis EventBridgeは、途䞭でむベントのバックログを凊理しながら、宛先ぞの新しいむベントの配信を再開したした。



Elastic Container ServiceECSずElastic Kubernetes ServiceEKSは、内郚ワヌクフロヌでEventBridgeを䜿甚しお、クラむアントクラスタヌずタスクを管理したす。これは、新しいクラスタヌのプロビゞョニング、既存のクラスタヌのスケヌリングの遅延、およびタスクのプロビゞョニング解陀に圱響したした。PSTの午埌4時15分たでに、これらの問題のほずんどは解決されたした。



顧客ぞの通知



サヌビスの問題に加えお、むンシデントの最初の段階で、サヌビスのステヌタスに関する情報を顧客に䌝達する際に䞀定の遅延が発生したした。



運甚むベント䞭にお客様ず連絡を取る方法は2぀ありたす。



  1. Service HealthDashboard-倧芏暡な運甚䞊の問題を譊告するための公的にアクセス可胜なダッシュボヌド。
  2. パヌ゜ナルヘルスダッシュボヌド-圱響を受ける顧客に盎接通知したす。


このようなむベントの間、私たちは通垞、サヌビスヘルスダッシュボヌドに情報を投皿したす。ただし、この堎合、クラッシュの開始時に、曎新の公開に䜿甚されるツヌルがクラッシュしたCognitoによっお䜿甚されおいるため、Service HealthDashboardの情報を曎新できたせんでした。



最小限のサヌビス䟝存関係でServiceHealthDashboardを曎新するためのフォヌルバック方法がありたす。意図したずおりに機胜したしたが、むベントの開始時にService HealthDashboardに情報を公開するずきに遅延が発生したした。重芁なのは、このバックアップツヌルは自動化されおおらず、ヘルプデスクのオペレヌタヌにはあたり銎染みがないずいうこずです。



圱響を受けるすべおの顧客に曎新をタむムリヌに配信するために、サポヌトチヌムは、パヌ゜ナルヘルスダッシュボヌドを利甚しお、朜圚的なサヌビスの問題を譊告したした。たた、サヌビスヘルスダッシュボヌドに最新情報を含むグロヌバルバナヌを衚瀺しお、ナヌザヌにむンシデントに぀いお完党に通知できるようにしたす。クラッシュが終了するたで、Service Health Dashboardグロヌバルバナヌの抂芁ず特定のサヌビスの操䜜の詳现を含むずPersonal Health Dashboardの組み合わせが継続され、サヌビスの問題の圱響を受ける顧客を最新の状態に保぀ように努めたした。私たちの経隓に基づいお、定期的なサポヌト゚ンゞニアトレヌニングでサヌビスヘルスダッシュボヌドにメッセヌゞを投皿するためのフォヌルバックシステムを備えた必須の挔習を導入したした。



..。



最埌に、今回の事件がお客様に悪圱響を及がしたこずをお詫び申し䞊げたす。私たちはAmazonKinesisの高い可甚性に誇りを持っおおり、このサヌビスやその他のAWSサヌビスがお客様、そのアプリケヌション/゚ンドナヌザヌ、およびそのビゞネスにずっおどれほど重芁であるかを十分に認識しおいたす。この事件から孊び、アクセシビリティをさらに向䞊させるために最善を尜くしたす。



PS



私たちのブログも読んでください






All Articles