エレナ・ラザール:失敗は避けられない ― 信頼性は選択である

2023年10月の大規模なAWS障害が、Signal、Snapchat、ChatGPT、Zoom、Lyft、Slack、Reddit、マクドナルド、ユナイテッド航空、さらにはDuolingoを含む世界中のサービスを停止させたことで、クラウドファーストの運用の脆弱性が明らかになりました。今日のクラウドファーストの世界では、何でも失敗する可能性があります。企業がグローバルなクラウドプラットフォームに業務を分散させる中で、もはや「システムが失敗するかどうか」ではなく、「どれだけ早く復旧できるか、そしてそれをどれだけ賢く設計しているか」が問われています。

エレナ・ラザールは、この現実を深く理解しているエンジニアの一人です。彼女は20年以上にわたり、フランス、ポーランド、アメリカでレジリエントなアーキテクチャの設計、CI/CDパイプラインの自動化、可観測性の向上に取り組んできたシニアソフトウェアエンジニアです。電気電子技術者協会(IEEE)およびアメリカ科学振興協会の会員として、エレナは応用工学と科学的探究の世界を橋渡ししています。

エレナはHackReadに、分散システム時代における「失敗を前提としたエンジニアリング」とは何か、なぜレジリエンスが完璧さより重要なのか、AI支援によるログ解析がインシデント対応をどう変えているのか、そして複雑なシステム障害に直面したとき、なぜ透明性が階層構造よりも有効なのかを語りました。また、信頼性エンジニアリングを再定義するグローバルな文化的変化についても話し、リアクティブな「火消し」から、最初から復旧を組み込むモデルへの転換を説明しました。

Image
エレナ・ラザール

Q. New Relicの可観測性予測によると、重大なIT障害の中央値コストは1時間あたり200万ドルに達しており、その数字は上昇し続けています。あなたの視点から、なぜ復旧コストがこれほど高騰しているのでしょうか?企業が現実的に損失を最小限に抑えるためにできることは何ですか?

A. 障害のコストが高騰している主な理由は、デジタルインフラが深く相互接続され、グローバルに不可欠なものとなったからです。今やすべてのシステムが他の数十ものシステムに依存しているため、AWSやAzureのような主要プロバイダーがダウンすると、その影響は瞬時に業界全体に波及します。

      復旧コストが上昇しているのは、ダウンタイムによる直接的な損失だけでなく、障害発生から数分以内に発生する取引の損失やブランドイメージの低下も含まれるからです。企業がグローバル化・自動化するほど、ローカルなフォールバックメカニズムの維持が難しくなります。

      これらの損失を現実的に減らす唯一の方法は、制御された失敗を前提に設計することです。冗長なアーキテクチャを構築し、定期的に障害をシミュレートし、根本原因の検出を自動化して、復旧時間を数時間ではなく数秒で済むようにすることです。

      Q. エレナさん、あなたはソフトウェアエンジニアリングの分野で20年以上、フリーランス開発者から放送・コンテンツ配信分野の大規模プロジェクトまで携わってきました。分散システムにおける信頼性への理解は、キャリアの各段階でどのように進化しましたか?

      A. 20年前、本当に大規模な分散システムは比較的珍しく、主に大企業にしか存在しませんでした。なぜなら、信頼性の高いものを構築するには自社で物理インフラを維持する必要があったからです。たとえデータセンターにホスティングしていても、所有・運用は自社で行う必要がありました。当時は、CRMとウェブサイトの両方を動かす単一のエンタープライズサーバーでさえ「大規模インフラ」と見なされ、信頼性とは主にハードウェアの稼働維持とアプリケーションの手動チェックを意味していました。

      この15年で状況は一変しました。クラウドコンピューティングと仮想化により、冗長性が手頃になり、弾力性と自動化が実現しました。信頼性は単なるリアクティブな目標ではなく、設計上の特徴となりました。オンデマンドのスケーリング、自動フェイルオーバー、自己修正する監視パイプラインなどです。かつては監視スクリプトを一から書いていましたが、今ではダッシュボード、コンテナオーケストレーション、時系列データベースがすぐに使えます。今日、信頼性は単なるツールセットではなく、システムアーキテクチャの一部であり、スケーラビリティ、可用性、コスト効率に織り込まれています。

      Q. コンポーネントの障害を許容するよう意図的に設計したシステムの具体例を教えてください。その際に直面したトレードオフと、その解決方法は?

      A. 現在の仕事では、依存サービスの障害にも耐えられるCIおよびCDパイプラインを設計しています。パイプラインは各エラーを分析し、場合によってはリトライし、場合によっては即座に失敗して開発者にアラートを送ります。

      過去のプロジェクトでは、グレースフルデグラデーションの原則を適用しました。これは、ウェブやモバイルアプリの一部を一時的にオフラインにしても、全体のユーザー体験を損なわないようにするものです。安定性は向上しますが、コードの複雑さや運用コストが増加します。レジリエンスには常にそのトレードオフが伴います。より多くのロジック、監視、インフラのオーバーヘッドが必要ですが、他のシステムがダウンしても自分たちのシステムが稼働し続けるなら、それだけの価値があります。

      Q. CI/CDパイプラインやインフラ自動化の分野で、依存サービスの障害に強いパイプラインを実現するために、最も効果的だったツールやプラクティスは何ですか?

      A. 長年、ログをプログラム的に分析するスクリプトを使ってきました。しかし新しいシナリオに対応するには、手動デバッグよりも時間がかかることもありました。最近では、大規模言語モデル(LLM)を使った実験を始めています。

      今では、パイプラインが失敗した際、そのログの一部を根本原因を推測するよう訓練されたモデルに入力します。LLMの出力はSlackやメールで開発者に直接送られます。依存関係のバージョン違いやテスト失敗、古いAPIなどの単純な問題をよく検出し、サポート工数を大幅に削減できます。

      私はさらに深いLLM統合を推進しています。皮肉なことに、ログ解析を高速化するために自分のノートPC上のDockerで軽量AIモデルを動かすこともあります。今はまだ創意工夫で自動化のギャップを埋めている段階です。

      Q. 銀行、放送、ECなど様々なプロジェクトでご経験がありますが、システム信頼性向上に最も効果的だったアーキテクチャパターンは何ですか?

      A. レプリケーションとロードバランシングの組み合わせが、実は最強です。たとえばAWS ELBでヘルスチェックを有効にすると、事実上サーキットブレーカーの役割を果たし、復旧するまで不健康なノードへのトラフィックを止めてくれます。また、データベースレプリケーションも活用しています。現代のDBMSは非同期レプリケーションを標準でサポートしています。

      ある銀行プロジェクトでは、外部システムの統合がモノリシックサービスに過負荷をかけていました。その機能をスケーラブルなマイクロサービスとしてロードバランサーの背後に分離したことで問題は解決しましたが、同時に隠れた依存関係も露呈しました。内部ツールの一部はドキュメントがなかったために失敗しました。この経験から学んだ普遍的なルールは、「ドキュメント化されていないインフラは静かな信頼性の殺し屋である」ということです。

      Q. インフラ自動化やサービス信頼性の分野で、多数のシグナルを監視しつつ、チームを圧迫したりコストを膨らませたりしないための判断基準は?

      A. 現在では、ほとんどのフレームワークが標準でメトリクスをサポートしているため、メトリクス追加は簡単です。ログ解析からメトリクス監視への明確なシフトがあり、メトリクスは安定して構造化されていますが、ログは常に変化します。それでも、障害の「なぜ」を理解するには詳細なログが不可欠です。

      要はバランスです。メトリクスはシステムの健全性を保ち、ログはその「心理」を説明します。

      Q. 多くの組織が今や数百ものマイクロサービスを運用しています。こうしたスケーリングの際、特に障害の影響に関してどんな落とし穴がありますか?

      A. リソースのオーバーヘッドが最大の隠れコストです。ロードバランサーやキャッシュレイヤーだけで、コアサービスと同等の計算資源を消費することもあります。唯一の対策は優れたアーキテクチャです。

      障害伝播は典型例です。サービス間通信にハートビートやサーキットブレーカー、レイテンシ監視などの安全策がなければ、1つの障害がシステム全体に急速に波及します。しかし、保護を過剰に設計するとレイテンシやコストが増します。

      時には最もシンプルな解決策が最良です。エラーの代わりに「データ利用不可」のフォールバックレスポンスを返したり、スマートなリトライロジックを使ったりします。すべての問題にKafkaクラスタのようなユニバーサルだが高コストなイベント駆動・非同期アーキテクチャが必要なわけではありません。

      成長を管理する鍵は透明性です。開発者を「スコープ」に閉じ込めて全体像を見せないのは最悪のアンチパターンです。現代のInfrastructure-as-Codeツールは、巨大なシステムでも可読性・再現性・何より「理解可能性」をもたらします。

      Q. New RelicやUptime Instituteのレポートによれば、障害は企業に1時間あたり数百万ドルの損失をもたらします。短期的な納期優先のビジネス環境で、どうやって信頼性への長期投資を正当化していますか?

      A. 今や誰もが失敗のコストを知っている時代です。もはや多くを説得する必要はありません。障害率が上昇すれば自動的に調査が始まり、データが全てを物語ります。

      例えば、AOSPプラットフォームのアップデートサービスで古いAndroidクライアントが原因でエラー率が急増した場合、サービスと分散OSイメージの両方を分析します。ビジネス上の結論は常に「信頼性を修正するか、ユーザーを失うか」です。

      コードリポジトリやドキュメント、CI/CDパイプラインなどの内部ツールでも同様です。不安定なインフラは顧客向け機能のリリースを遅らせます。課題はステークホルダーの説得ではなく、それを直す時間と人材を見つけることです。

      Q. あなたの経験から、今日レジリエントなパイプラインを構築するエンジニアリングリーダーに伝えたい教訓は?

      A. 失敗は避けられませんが、カオスは避けられます。カオスを生むのは不明確な責任とコミュニケーション不足です。シンプルなルールが大いに役立ちます。「全員に全コードベースへのアクセス権を与える」ことです。明確な責任分担マップ(たとえば整理されたSlackワークスペース)があれば、チームはエスカレーションを待つのではなく協力できます。透明性こそがレジリエンスへの第一歩です。

      Q. 機械学習駆動の可観測性に携わり、自律的AIによる自動修復にも関心があると述べていました。今後5年間でAIが信頼性エンジニアリングをどう変革すると考えますか?

      A. 機械学習駆動の可観測性はすでに実現しており、ログをAIモデルに入力して障害を予測しています。しかし本当の最前線は自動修復です。システムが自ら修復し、有意義なインシデント後レポートを生成する世界です。

      確かに、企業は本番環境での自律的な変更を恐れるため、慣性がありますが、経済的合理性が勝ちます。スタートアップやダイナミックな組織はすでに信頼性向上のために自律AIを試しています。いずれこれが標準になるでしょう。

      レジリエンスは単なる稼働率の問題ではありません。それは透明性、責任、そして失敗を前提に設計された回復力あるシステムを優先するマインドセットです。

      (写真:Umberto氏によるUnsplash)

      翻訳元: https://hackread.com/elena-lazar-inevitable-failures-reliability-choice/

      ソース: hackread.com