SRE Classroom: 非抽象的な大規模システム設計の演習
Google Cloud Japan Team
※この投稿は米国時間 2020 年 9 月 24 日に、Google Cloud blog に投稿されたものの抄訳です。
耐障害性分散ソフトウェア システムの設計に挑戦したことはありますか。経験がある方は、システムの全体的な信頼性には多数の要因が絡むことをご存じかと思います。システムのさまざまな部分で、多様な予期しない障害が発生する可能性があります。特定のアーキテクチャ パターンが、ある状況では適切に機能しても、他の状況ではうまく機能しないこともあります。システムのどの部分をどのタイミングで最適化するかについては、多数のトレードオフが伴います。
多数の微妙な差異を見ていくと、分散システムの設計は大変な作業になりかねません。ただし、適切なツールを使用して実践を積めば、誰でもこのような問題に取り組めるようになります。分散システムには数多くの設計方法があります。その一つは、システムが処理するリクエストの増加やスコープの変更に合わせてコンポーネントの追加や書き換えを行い、システムを有機的に成長させる方法です。Google では、非抽象的な大規模システム設計(NALSD)と呼ばれる手法を使用しています。NALSD は、分散コンピューティング向けの Borg クラスタ管理やGoogle 分散ファイル システムなど、分散システムの設計、検証、評価を行うための反復プロセスです。このことを念頭に置いて、Google では NALSD 手法を実際に体験できる演習を作成しました。
NALSD 演習は、エンジニアが地球規模のシステムを設計するために必要となる基礎知識と問題解決のスキルを身に付けられるように設計されています。また、特定の設計がサービスに必要なサービスレベル目標(SLO)を達成しているかどうかを評価する方法についても学びます。これらのワークショップでは、簡単な計算を使用して抽象的な設計を具体的な計画へと変えるという課題に挑みます。最も重要な点として、このような抽象的な概念を実践に移す機会を提供します。
地球規模のシステム: ユーザーが世界中のどこにいてもサービスを提供できるシステム。高いパフォーマンスと可用性を備え、すべてのユーザーに確実にサービスを提供するシステムです。
SRE Classroom と最初の NALSD ワークショップ
Google のエンジニアによって作成された SRE Classroom は、NALSD やその他の主要な SRE 原則などの概念の理解を促進するために設計されたワークショップ シリーズです。これらのワークショップは、過去数年にわたって Google 内部や外部会議で実施され、数多くのエンジニアのシステム設計と思考スキルの向上に役立ってきました。Google の使命は、世界中のエンジニアリング チームがこれらの概念とベスト プラクティスを理解し、自身のシステムに適用できるようにすることです。
このたび、Google の Distributed Pub/Sub ワークショップのすべての資料をご利用いただけるようになりました。これは NALSD に焦点を当てた SRE Classroom による最初の演習です。Google が元の著者としてクレジットされている限り、クリエイティブ・コモンズ CC-BY 4.0 ライセンスに従ってこの資料を自由に利用および再利用していただけます。このワークショップの独自のバージョンを実施して、同僚、顧客、会議の出席者に大規模な分散システムの設計方法を指導してください。
Distributed PubSub ワークショップの内容
PubSub 演習は、地球規模の非同期パブリッシュ / サブスクライブ通信システムの設計をテーマとしています。このワークショップでは、課題の内容を示し、要件と利用可能なインフラストラクチャについて説明して、サンプル ソリューションを見ていきます。
ワークショップと資料は、次の 3 つのステージに分かれています。
- 単一のデータセンター向けの作業ソリューションを設計します。
- その設計を複数のデータセンターに拡張します。
- システムをプロビジョニングします(ハードウェアや帯域幅がどのくらい必要かを学びます)。
ワークショップの各ステージで、参加者は最初に独自のソリューションを検討します。自分たちのアイデアを検討した後、ワークショップのリーダーがサンプル ソリューションと特定の設計上の決定が行われた理由を示します。
この演習では、スケーリング、レプリケーション、シャーディング、コンセンサス、可用性、整合性、分散アーキテクチャ パターン(マイクロサービスなど)など、分散システムの設計に関連するさまざまなトピックを扱います。これらの概念を、目前の問題の解決に役立つコンテキスト、つまり特定の要件を満たすためのシステム設計の流れで示します。そのため、特定の概念が特定の問題の解決に役立つ可能性があるケースや理由を明確にすることができます。
通常、このワークショップを実施するときには、参加者を 4~6 人のグループに分け、協力してソリューションを作成させます。各グループは経験豊富な SRE ボランティアとペアになり、このボランティアがディスカッションを促進し、積極的な参加を促して、グループの順調な進行を手助けします。
独自の PubSub ワークショップを実施しましょう
ご興味のある方は、プレゼンター ガイドとファシリテーター ガイドをご覧ください。これらのガイドには Distributed Pub/Sub ワークショップの開催方法に関するより詳しい情報が記載されています。教育するチームがない場合は、仲間と一緒に、あるいは単独でこの演習を行うこともできます。問題に対して複数のソリューションを検討し、各ソリューションの長所と短所を特定することも有意義な演習になる場合があります。
SRE およびサービスの信頼性において業界をリードする手法について、詳しくはこちらをご覧ください。
-ソフトウェア エンジニア Jenny Liao
-サイト信頼性エンジニア Salim Virji