【LPD】楽天におけるカオスエンジニアリングと入門ハンズオン

The English version of this article is here.

 

こんにちは。楽天グループのレジャープロダクト部(LPD)のソリューションエンジニアリング課に所属しているシニアシステムエンジニアのBurakです。私の役割は、楽天グループのミッションに沿って、当社のシステムを効率的かつ確実に動作させ、革新的で高品質な製品を提供することです。

サービスの向上につながる課題解決と、ソリューションの実装に注力することで、楽天グループが業界のグローバルリーダーになるという目標に貢献しています。

レジャープロダクト部(LPD)では、ダウンタイムが顧客の信頼を損ない、収益の損失につながる可能性があることを認識しています。この問題に対処するため、サイトリライアビリティエンジニアリング(SRE)の実践にカオスエンジニアリングを採用しました。テスト環境に意図的に制御された障害を導入することで、ユーザーに影響を与える前に、システムの弱点を事前に特定して対処します。このアプローチにより、当社のシステムは堅牢で信頼性が高く、お客様にシームレスな体験を提供できる状態を維持できます。

 

カオスエンジニアリングとは

カオスエンジニアリングとは、システムの弱点を特定し、信頼性を向上させるために、障害やエラーを意図的にシステムに導入することを指します。ネットワーク障害、アプリケーションエラー、突然のトラフィックスパイクなど、実際に起こり得る障害シナリオを想定した実験を、インフラストラクチャやアプリケーション構成を変更することなく設計することが含まれています。

この非侵入的な方法により、システムの元の設定との整合性を維持しながら、現実的なシナリオで回復力を計る複数の実験を、迅速かつ簡単に行えます。

たとえば、ユーザートラフィックの急増をシミュレートしてスケーラビリティの評価や、偽のデータを注入してシステムがエラーをどれだけ効果的に処理できるかのテストが可能です。これらの実験によって、システムの脆弱性が発見され、重大な問題に発展することを避けられます。これにより、ダウンタイムや利益の損失、顧客に不満を感じさせるリスクを軽減できます。結果としてサービスの信頼性向上とシームレスな顧客体験を向上させることができました。

カオスエンジニアリングの採用は、すでに楽天グループでは測定可能なメリットをもたらしています。この能動的なアプローチは、顧客の信頼を強化し、業界での競争力を維持するのに役立っています。

今日の複雑な分散システムアーキテクチャでは、カオスエンジニアリングは、システムが予期しない中断にも対処できる能力を構築するために、不可欠です。カオスエンジニアリングにより、当社のシステムの信頼性を高め、未来のオンラインサービスの課題にも対処できるようになります。

 

カオスエンジニアリングとサイトリライアビリティエンジニアリング(SRE)

サイトリライアビリティエンジニアリング(SRE)(以下、SRE)は、大規模な分散システムの信頼性を高め、それを維持し、改善することに特化した分野です。主なSREの目標には、高可用性の確保、パフォーマンスの最適化、スケーラビリティの実現などが含まれます。カオスエンジニアリングはシステムの回復力のテストや、システムを強化するための構造化されたアプローチを提供することで、SREの目標を補完します。
カオスエンジニアリングとSREを組み合わせることで、障害やトラブルに耐えられる信頼性の高いシステムを構築するための、強力なフレームワークを形成できます。

カオスエンジニアリングは、障害をシミュレートを実施することにより、ボトルネック、単一障害点、見過ごされがちな重要な依存関係の特定に役立ちます。たとえば、カオスエンジニアリングの実験では、データベースの停止をシミュレートして、システムが重要なコンポーネントの損失を適切に処理できるかどうかを明らかにすることがあります。この能動的なアプローチにより、チームはユーザーに影響を与える前に脆弱性を改善できます。

制御された実験では、システムがどの程度障害から適切に回復できるかを評価します。たとえば、特定のサーバーやサービスをシャットダウンして、システムがトラフィックを再ルーティングし、機能を維持できるかどうかを確認するテストなどがあります。これらの実験により、予期せぬ中断が起きた場合でも、ダウンタイムが発生せず、システムが設計通りに動作し続けられます。
カオスエンジニアリングでは、突然のトラフィックスパイクなどのシナリオをシミュレートして、システムがリソースを迅速にスケールアップし、需要の増加に対応できるかどうかをテストできます。たとえば、販売キャンペーン中のトラフィックの急増をシミュレートして、システムが負荷の高い状態でもパフォーマンスを維持できるかどうかを確認することが可能です。

 

ツールとテクニック

楽天グループは、カオスエンジニアリングを効果的に実装するために、さまざまなツールとテクニックを活用し、システムの回復力と信頼性を確保しています。

私たちが主に使用している主要なツールの1つは、Cloud Native Computing Foundation(CNCF)によって管理されているオープンソースのカオスエンジニアリングプラットフォームであるChaos Mesh(https://chaos-mesh.org/)です。
Chaos Meshは、分散システムの障害のシミュレートを実施するための強力で柔軟性の高いフレームワークを提供し、高度なインフラストラクチャに最適です。そのKubernetesネイティブな設計と機能は、楽天グループのインフラストラクチャと運用ニーズとうまく整合しており、既存のワークフローとサービスにカオスエンジニアリングの実践をシームレスに統合できます。

Chaos Meshを使用して、潜在的な脆弱性を発見するために、さまざまなテクニックを適用しています。これには以下が含まれます。

  1. Fault Injection : 特定のサーバーまたはサービスをシャットダウンするなど、制御された障害を導入して、システムがトラフィックをどれだけ効果的に再ルーティングし、機能を維持するかをテストします。
  2. Traffic Simulation : トラフィックの急増をシミュレートしてスケーラビリティを評価し、主要な販売キャンペーンなどの需要の高いイベント中でも、システムがピーク負荷の処理が可能であることを確認します。
  3. Error Injection : 無効または破損したデータをシステムに注入して、エラー処理メカニズムをテストし、異常な条件下でのデータ整合性を確保します。

Chaos Meshとこれらのテクニックを活用することで、脆弱性を事前に特定し、システム設計を改善します。また、予期しないイベントが発生した場合でも、シームレスで信頼性の高いエクスペリエンスをお客様に提供することを可能にしています。

 

Chaos Meshを使った簡単なハンズオン

それでは、Chaos Meshについて詳しく見ていきましょう。このセクションでは、ローカル環境にChaos Meshをセットアップし、簡単なカオス実験を段階的に実行する方法について説明します。これがChaos Mesh入門のお役に立つことを願っています。

ステップ1:ローカルKubernetesクラスターのセットアップ

任意のKubernetesクラスターを使用できますが、デモンストレーションのために、ローカル環境でMinikubeを使用します。Minikubeは、ローカルのKubernetesクラスターを実行できる軽量なツールです。公式のスタートガイド(https://minikube.sigs.k8s.io/docs/start/)に従えば、簡単にインストールできます。

 

Minikube が起動すると、次のコマンドを実行してクラスターの状態を確認できます。

Will display:

 

ステップ2Chaos Meshのインストール

Chaos Meshは、KubernetesのパッケージマネージャーであるHelmを使用して簡単にインストールできます。したがって、まずHelm(https://helm.sh/)がインストールされているかを次のコマンドを実行して、確認してください。

これにより、インストールされているバージョンが表示されます(バージョンは異なる場合がありますが、3.5.4より新しい必要があります)

Helmがインストールされていない場合は、公式のインストールガイドを参考にすれば、簡単にインストールできます。
https://helm.sh/docs/intro/install/

Helmが使用できる環境であることを確認したら、公式のインストールガイドに従ってください。
https://chaos-mesh.org/docs/production-installation-using-helm/

まず、Chaos Mesh HelmリポジトリをローカルのHelm構成に追加します。

次に、chaos-meshという名前のnamespaceにChaos Meshをインストールします。 ここではdockerベースのチャートを使用していますが、公式Webサイトから別の構成も選択できます。

Chaos Meshの実行ステータスを確認するには、次のコマンドを実行します。

command

全てのPodが動いていることを確認してください。

 

ステップ3:基本的なカオス実験の実行

Chaos Meshがインストールされたら、簡単な実験を実行して、クラスター内のポッドの障害をシミュレートしましょう。 このために、deployment.yamlを作成して適用することにより、単純なnginxサーバーをデプロイします。

yaml

Nginx Podが動いていることを確認します。

 

次に、カオスPodを作成しましょう。 ポッド障害実験のためにexperiment.yamlファイルを作成します。

yaml

この実験では、ランダムに1つのNginxポッドを30秒間停止させます。

実験をクラスターに適用しましょう。

ここで、Nginxポッドのステータスを確認して実験を監視できます。エラーのステータスに注意してください。

30秒後にRunning状態に戻っています。

適用できる実験は他にもたくさんあります。 詳細については、chaos-meshドキュメント(https://chaos-mesh.org/docs/basic-features/#fault-injection)を確認してください。

完了したら、次のコマンドを実行してリソースをクリーンアップし、Minikubeクラスターを停止します。

 

結論

楽天グループでは、カオスエンジニアリングはSREの実践における重要な要素であり、潜在的なリスクを事前に発見して、事前の解決を可能にします。これにより、当社のシステムは常に高可用性を実現し、お客様にシームレスなエクスペリエンスを提供できます。

レジャープロダクト部(LPD)内では、このアプローチは楽天グループ全体の成功に対して重要な役割を担っているため、システムの信頼性、回復力、イノベーションの新たな指標を確立しつつ、リーダーシップを維持できるよう努めています。

今後、システムの信頼性をさらに高めるために、追加のツールとテクニックを検討して、カオスエンジニアリングの実践を拡大する予定です。さらに高度な障害シナリオを実験に統合することを目指しています。カオスエンジニアリングの実践を継続的に進化させることにより、イノベーションを推進し、楽天グループのシステムが将来の課題に対応できるように準備したいと考えています。

 

※掲載内容は2025年9月19日時点のものです。

私たちと一緒に働きませんか?

コマース & マーケティングカンパニー ライフ&レジャーサービス開発部(LLSD)では、新たなサービス開発から日々の運用・改善まで、一緒に働く仲間を募集中!エンジニアやプロダクトマネージャーなど、幅広い職種で募集しています。ご応募をお待ちしております。

 →LLSDの採用情報はこちら

→全ての採用情報はこちら

corp.rakuten.co.jp