お仕事でAWSに関する社内勉強会をやっていて、その中で参加者からしばしば疑問としてあがってくる「EC2のプレイスメントグループ」。
私自身も机上学習派としてイマイチ理解しきれていない印象がありました。今回アドベントカレンダー企画中をきっかけにあらためて整理してみることにしました。
プレースメントグループとは?
EC2インスタンスを複数台まとめて運用する際に、パフォーマンス(ネットワーク帯域・レイテンシ)や可用性(障害耐性)を最適化するための物理配置戦略を提供する機能。
あらかじめAWS管理コンソール上で「プレースメントグループ」(PG)を定義。EC2インスタンスを起動するときこのグループを選択することで配置戦略を指示する。
前提
- 根っこにあるのはいつでも物理的な基盤 ─ EC2はAWSが提供するマネージドな仮想マシン構築・運用サービス。AWSが運用するリージョン→そこに属するAvailability Zone→そのゾーンを構成するデータセンター→センター内に配置されたラック→そのラック内で動く物理サーバー→そのサーバー上で動く仮想化ソフトウェア→そのソフトウェアの上で実行されるのがEC2インスタンス。この巨大なインフラ上でEC2インスタンスを構築・運用する機能を提供してくれるがEC2というサービスといえる。つまりクラウドとはいっても根っこにあるのはやはり物理的な基盤(ハードウェア)。
- しばしば複数インスタンスを運用 ─ 構築・運用したいITサービス(システム)の性質にもよるが、EC2インスタンスはしばしば複数台で利用することになる。2・3台かもしれないし数十・数百台かもしれない。インスタンス同士の間では相互通信や役割分担が存在。
- 何を動かすかにより求められる「強み」は変わる ─ 複数台のEC2インスタンスを使って何を動かすかによって、そのインスタンス群(グループ)に求められる「強み」は変わってくる。同じEC2インスタンス群の中での相互通信の速度? ハードウェア障害のリスク低減?
各PGの特徴
集合体を構成するインスタンス間のネットワーク・パフォーマンスを最大化するならばCluster、可用性(耐障害性)を最大化するならばSpreadとなります。
集合体を構成するインスタンスが多数にのぼり、インスタンスが果たす役割ごとにできるだけ可用性を高めたいとき(可用性と競合しない程度にインスタンス間のネットワーク・パフォーマンスも高めたいとき)Partistionとなります。
| 種類 | 目的 | 配置戦略 | ユースケース |
|---|---|---|---|
| Cluster | 高速通信 | 近接配置 | HPC、ビッグデータ処理でMaxパフォーマンス実現 |
| Spread | 高可用性 | 分散配置 | 少数インスタンスでMax可用性実現 |
| Partition | 大規模分散 | パーティション分離 | Hadoop、Cassandraなどにおいてできるだけ高可用性 |
Cluster PG
- もっともネットワーク・パフォーマンスが高い構成
- インスタンスは同一AZ内の「物理的に近い」基盤内─同じラック、または非常に近いラック群に配置することで、ネットワークレイテンシを最小化
- 当然のことながらハードウェア障害への耐性はもっとも低い
- 基盤のキャパシティ不足による起動失敗のリスクももっとも高い
- クラスター内に配置できるインスタンス数に明確な上限はなく、インスタンスタイプやリージョン・AZのキャパシティに依存
- ネットワークのラウンドトリップ・レイテンシのテール遅延が30〜67%削減されたとの報告や、シングルフロートラフィックの帯域幅が2倍となるとの説明
Spread PG
- もっとも高可用性(耐障害性)が高い構成
- インスタンスは異なる物理ハードウェア上に配置
- 1AZに最大7インスタンスまで配置可能
- PG作成にあたり複数AZを選択可能
- 当然のことながらネットワーク・パフォーマンスは劣後
Partistion PG
- インスタンスが果たす役割ごとにできるだけ可用性を高めた構成(可用性を優先しそれと競合しない程度にインスタンス間のネットワーク・パフォーマンスも高めた構成)
- インスタンスは複数の「パーティション」に振り分けられ、各パーティションは異なるラックに配置
- 「パーティション=ラック障害ドメイン」とのことで、同じパーティションに属するインスタンスは同じラック内、または非常に近いラック群に配置
- 例えば、Hadoopのクラスターを構成するPrimary NameNode、Secondary NameNode、DataNode(s)といった役割のノード(サーバー)を Primary NameNode+DataNodes、Secondary NameNode+DataNodes、その他のDataNodesといったグループに分け、それぞれを異なるパーティションに配置。これにより正副2つのNameNodeが単一のハードウェア障害で共倒れになるリスクを回避しつつ、ノード間のネットワーク・パフォーマンスもできるだけ高める─といった用途
- 最大7パーティションまで作成可能
参考資料
- 【速報】EC2でSpread placement groupsが使えるようになりました #reinvent
- AWS Black Belt Online Seminar - Amazon Elastic Compute Cloud (Amazon EC2)
- Amazon EC2 インスタンスのプレイスメントグループ
- AWS Partner Network (APN) Blog - Boost High Frequency Trading Performance on Amazon EC2 with Chronicle Tune
- Amazon Elastic Compute Cloud User Guide - Amazon EC2 instance network bandwidth



