コンテンツに移動
管理ツール

NALSD フラッシュカードを使用した 分散システムの設計

2020年5月27日
https://storage.googleapis.com/gweb-cloudblog-publish/images/GCP_Management_tools.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2020 年 5 月 2 日に、Google Cloud blog に投稿されたものの抄訳です。

分散システムには数多くの設計方法が存在しますが、その一つにシステムの自然な拡張を考慮した設計があります。この方法では、システムがより多くのリクエストを処理していくにつれて、コンポーネントの書き換えや再設計を行います。また、概念実証から始める手法もあります。システムによってビジネスに付加価値がもたらされたら、次のバージョンがゼロから設計されます。 

Google では、Non-Abstract Large System Design(NALSD)と呼ばれる手法を使用しています。NALSD は、分散コンピューティング向けの Borg クラスタ管理Google の分散ファイル システムなど、分散システムの設計、検証、評価を行うための反復プロセスについて記述しています。最初から NALSD を使用したシステム設計に取り組むのは少し難しく感じられるかもしれませんので、この投稿ではフラッシュカードを使用した効果的な戦略をご紹介します。分散システムを設計する際にフラッシュカードを使用して、制約されたリソースに対して最も重要な数値を結びつける方法について取り上げます。カードに記載されている数値は、CPU、メモリ、ストレージ、ネットワークのレイテンシやスループットに関する根拠のある概算値です。

これらの数値の 2 つの使用例を見てみましょう。

最初の例では、画像を保存する目的で設計されたサーバーがあるとします。ここでは、基盤となる
ストレージ レイヤの書き込みスループットを最重要視します。基盤となるストレージ レイヤは、これを構成するディスクの書き込み速度によって制限される場合があります。ディスクのシーク時間と書き込みスループットを把握することでシステム全体のボトルネックを見つけることができるため、これらの時間の数値を知ることは重要です。

次の例では、低レイテンシのメタデータ検索クエリの処理に対応する別のサーバーがあるとします。ここでは、メモリ使用量か CPU 使用率に潜在的なボトルネックがある可能性があります。メモリ使用量はインデックスの保持によるもので、CPU 使用率は実際の検索の実行によるものです。どちらがボトルネックになっているのかを明らかにするには、CPU キャッシュとメインメモリ アクセスのレイテンシの数値を調べる必要があります。リクエストとレスポンスのサイズが小さいことが予想されるため、ネットワーク スループットについてはそれほど問題視されません。ただし、計画段階でシステムをスケールアップすると、ボトルネックが変化する可能性があります。そのため、分散システムのすべてのコンポーネントには、根拠のある概算値を常に割り当てるのが最善です。

NALSD は、システムのスケールアップに伴う潜在的なボトルネックの特定に役立ちます。たとえば、全体的によりスケーラブルなアーキテクチャが見つかるまで設計を繰り返すことで、早い段階でボトルネックに対処できます。

誰もが知っておくべき数値

ここで示唆されている数値とは何でしょうか。Google エンジニアとして長いキャリアを持つ Jeff Dean は、「誰もが知っておくべき数値」があると述べています。これには、分散システムのサーバーやその他のコンポーネントが実行されるマシンによって実行される、一般的な動作を説明する数値が含まれます(この動画が録画された時点から数値は変わっています。本投稿では、最新の数値を使用しています)。その例をご紹介します。

  • L1 キャッシュ参照に 1 ナノ秒かかります。

  • ブランチ予測失敗は、L1 キャッシュ参照の約 3 倍のコストがかかり、3 ナノ秒かかります。

  • ミューテックス(同時実行の同期に使用されるリソース保護構造)のロックやロック解除は、ブランチ予測失敗の 5 倍以上のコストで約 17 ナノ秒かかります。

  • メインメモリ参照はやや高額で、約 100 ナノ秒のコストがかかります。

  • 10 Gb/s ネットワークで 2 KB を送信するには、1.6 マイクロ秒(1,600 ナノ秒)かかります。ここで高額な費用が発生します!

  • 同じデータセンター内での往復は 500 マイクロ秒ですが、カリフォルニアとオランダ間の
    往復時間は約 300 倍(150 ミリ秒)になります。

  • ディスクのシーク時間は約 10 ミリ秒です。ディスクから 1 MB をシーケンシャルに読み込む場合(約 5 ミリ秒かかる)に比べて、非常に高額になります。

このような数字を簡単に記憶できる人もいるかもしれませんが、私たちのようなエンジニアは、システムの設計や保守に使用する数字を覚えておくのにフラッシュカードを好んで使用します。フラッシュカードは、大規模なシステムを設計するうえでの大事な相棒です。また、サイト信頼性エンジニア(SRE)の同僚を楽しませるクイズとして、または Google の SRE チームとの NALSD インタビューの準備ツールとして使用することもできます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Flashcards.max-2000x2000.jpg

これらのフラッシュカードにご興味がある場合は、サイト信頼性エンジニア用フラッシュカードのセットをダウンロードできます。次の簡単な手順に沿って、便利なフラッシュカードを作成してみましょう。  

  1. できれば厚い紙を使用してドキュメントを印刷します。

  2. 各ページを縦半分に折って、裏面を貼り合わせます。

  3. 線に沿ってカードを切り取ります。

これで完了です。NALSD のフラッシュカード セットが準備できました。ぜひクイズをお楽しみください。

これらの数値が NALSD の全体的なプロセスにどのように適合しているかについて詳しくは、以下をご覧ください。

- By サイト リライアビリティ マネージャー Dan Lüdtke

投稿先