Site Reliability Engineering #2

2章 SREの観点から覽たGoogleのプロダクション環境

2.1 ハードウェア

Googleが設計した独自のデーターセンタ群から構成される

  • マシン
    • 一つのハードウェアまたは1つのVM
  • サーバ
    • サービスを実装しているソフトウェア

マシンは抽象化を施すことで、Googleクラスタオペレーティングシステムである「Borg」がプログラムの実行に必要なリソースの割当を受け持つ。

データセンター内のマシン間の通信を支えるためにJupiterと呼ばれる高速な仮想スイッチをGoogleは開発した。 JupiterはClosネットワーク装置であり、サーバ間で1.3Pbsの帯域幅をサポートする。 データーセンタ群はSDNにより地球規模のバックボーンネットワークで相互接続されている。

2.2 ハードウェアを「組織化」するシステムソフトウェア

Googleはスケーラビリティが高いソフトウェアによりハードウェアの障害によりユーザが影響を受けないようにしている

BorgはApache Mesosに似た分散クラスタオペレーティングシステムでジョブをクラスタのレベルで管理する - ジョブは同一タスクが1つ以上含まれることがある

Borgは障害ドメインを考慮して、タスクをマシンに配置する

  • #注釈 Borgはkubernetesの祖先にあたるシステム

タスクはHDPSに相当するストレージが利用でき、多くのレイヤーから構成される

ネットワークは世界中に分散配置されたシステムから、サービスのレイテンシを最小化する最も近いデータセンターにユーザを振り分ける。 ユーザの振り分けはGSLBで行われ、3つのレベルでロードバランスをする。

  • DNSリクエストへの地理的なロードバランス
  • ユーザサービスレベルのロードバランシング
  • RPCレベルのロードバランシング

2.3 他のシステムソフトウェア

これらに加えて非同期の合意形成に利用するPaxosプロトコルを持つChubbyというストレージがある。

モニタリングとアラートのためにBorgmanというインスタンスがサーバのメトリクスをスクレイプしている。

2.4 Googleのソフトウェアインフラストラクチャ

極度にマルチスレッド化、かつRPCを使った通信に揃えたソフトウェアアーキテクチャとすることで、分散化を容易にしている。

また、protocol buffersによりXMLと比較してサイズが最大1/10、最大100倍高速化している。

2.5 Googleの開発環境

Googleは単一の共有リポジトリを使って作業することで、次のメリットを得ている

  • プロジェクト外のコンポーネントに対して変更提案の”Changelist”をコンポーネントの所有者に贈り、メインラインに投入してもらうことができる
  • ”Changelist”が投入されるたびに依存関係を持つコンポーネントのテストが実行され、所有者が異常に素早く気がつける

2.6 シェークスピア:サンプルのサービス

具体例としてシェークスピアの全作品から単語を検索できるサービスの提供を考えてみる。

ユーザからのリクエストは次のデータフローに沿って処理される

  1. ユーザ -> DNS
  2. ユーザ -> GFE -> アプリケーションフロントエンド -> アプリケーションバックエンド -> Bigtable

ユーザのリクエスト受付からユーザへのレスポンス開始まで数百ミリ秒の時間で実現している。