osc.cloud 2012 分散システムを支えるメッセージングの仕組み
TRANSCRIPT
1
2012.12.16日本 OpenStack ユーザ会 中島 @irix_jp
openstackOpen source software to build public and private clouds.
OSC.Cloud 2012
OpenStack を支えるメッセージングの基礎
2
前置き
● OpenStack は分散指向● スケーラビリティ● アベイラビリティ
● その仕組みとして、 AMQP によるメッセージング機構が採用されています。
3
プロプライエタリハードウェア
コモディティサーバ
復習
● OpenStack とは?
コモディティサーバ
サーバ仮想化 NW仮想化ストレージ仮想化
オブジェクトストア
OpenStack API、 Amazon 互換 API
OpenStack
4
プロプライエタリハードウェア
コモディティサーバ
復習
● OpenStack とは?
コモディティサーバ
サーバ仮想化 NW仮想化ストレージ仮想化
オブジェクトストア
OpenStack API、 Amazon 互換 API
OpenStack
この中どうなってるの??
5
OpenStack の全体像
6
拡大図
7
拡大図
これの話
8
概略イメージ図
Horizon(web I/F)
ClientCommand
nova-api
nova-api
Queue
nova-scheduler
nova-scheduler
nova-compute
nova-compute
nova-compute
hypervisor
hypervisor
hypervisor
HTTP
● 全体像
9
概略イメージ図
Horizon(web I/F)
ClientCommand
nova-api
nova-api
Queue
nova-scheduler
nova-scheduler
nova-compute
nova-compute
nova-compute
hypervisor
hypervisor
hypervisor
HTTP
● クライアントから API サーバに命令を発行
10
概略イメージ図
Horizon(web I/F)
ClientCommand
nova-api
nova-api
Queue
nova-scheduler
nova-scheduler
nova-compute
nova-compute
nova-compute
hypervisor
hypervisor
hypervisor
HTTP
● API が命令を解釈してキューへリクエストを送信
msg
11
概略イメージ図
Horizon(web I/F)
ClientCommand
nova-api
nova-api
Queue
nova-scheduler
nova-scheduler
nova-compute
nova-compute
nova-compute
hypervisor
hypervisor
hypervisor
HTTP
● キューを取り出し、実行するホストを決定。
msg
12
概略イメージ図
Horizon(web I/F)
ClientCommand
nova-api
nova-api
Queue
nova-scheduler
nova-scheduler
nova-compute
nova-compute
nova-compute
hypervisor
hypervisor
hypervisor
HTTP
● 実行するホストを指定してキューへ命令を戻す。
msg
13
概略イメージ図
Horizon(web I/F)
ClientCommand
nova-api
nova-api
Queue
nova-scheduler
nova-scheduler
nova-compute
nova-compute
nova-compute
hypervisor
hypervisor
hypervisor
HTTP
● 指定されたホストがキューから命令を取り出し実行
msg
14
これが DB だったらかなり大変
Horizon(web I/F)
ClientCommand
nova-api
nova-api
DB
nova-scheduler
nova-scheduler
nova-compute
nova-compute
nova-compute
hypervisor
hypervisor
hypervisor
HTTP
FIFOの保証をどう担保?負荷も集中
OpenStackも DBは持っているので誤解なきように
15
OpenStack では?
16
Queue とは?
● AMQP を使ったメッセージング機構● 異なるノードに分散配置された各 Nova コンポーネント
間での通信を実現する。
http://ja.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol
Horizon(web I/F)
ClientCommand
nova-api
nova-api
AMQP
nova-scheduler
nova-scheduler
nova-compute
nova-compute
nova-compute
hypervisor
hypervisor
hypervisor
HTTP
17
AMQP とは?
● Advanced Message Queuing Protocol● メッセージ指向ミドルウェアのオープンスタンダードなア
プリケーション層プロトコルである。 AMQP の機能の定義は、メッセージ指向、キューイング、ルーティング ( ポイント・ツー・ポイント , 出版 - 購読型モデル ) 、信頼性、セキュリティに及ぶ。 *1
● OpenStack では以下が利用可能– RabbitMQ (鉄板)– Apache QPID ( RHEL 系ならあり)– ZeroMQ (動かしてる人を見たことがない??)
http://ja.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol
18
AMQP とは?
● 用語● ブローカー
– ようはキューサーバ / メッセージサーバの事
● ブローカーは以下の 2 つの要素を持つ– Queue ・・・メッセージがたまる所– Exchange ・・・キューへの配送ルールを定義
● メッセージ交換器
http://ja.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol
19
AMQP とは?
● Queue と Exchange を組み合わせる事で柔軟なメッセージ配送が可能になる。
● Direct 配送– Exchage & Queue が1:1で対応する
● Fanout 配送– Exchage & Queue が1: N で対応する
● Topic 配送– Exchage & Queue が1: N で対応する
● ただしメッセージが含むキーワードにマッチした Queue にのみ配送
http://ja.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol
20
OpenStack のメッセージ処理
● メッセージングの実体は openstac.common.rpc 以下に配置されている (Folsom )● 通称 RPC
● Exchange と Quene による各種配送処理を抽象化した API で、 OpenStack の至るところで使われる重要なプログラム。– 同一コンポーネント全てへメッセージを送る– 誰か1台が受け取れば良いメッセージを送付– 特定の1台へメッセージを送付
http://openstack.jp/assets/files/20120323/howtoreadnovacodes/rpc.html
21
nova-* が利用する queue
● 各 nova プロセスは起動時に AMQP ブローカーへ接続し、 3 つのキューを作成し、このキューへのメッセージを待ち受けする。● 例 ) QPID & nova-volume ( Essex )
– volume● 誰か1台が受け取れ良いメッセージ
– volume.<<FQDN>>● 自分自身が指定されたメッセージ
– volume_fanout_<<UUID>>● ブロードキャストメッセージを受け取る
22
nova-* が利用する queue
● 例 ) QPID & nova-volume
volume
volume.<<FQDN1>>
volume_fanout_<<UUID1>>
host1(FQDN1)
host2(FQDN2)
host3(FQDN3)
volume_fanout_<<UUID2>>
volume_fanout_<<UUID3>>
volume_fanout
host1(FQDN1)
host2(FQDN2)
host3(FQDN3)
nova host1(FQDN1)
msg
msg
msg
Exchange Queue Receiver
key=volume.<<FQDN1>>
volume.<<FQDN2>> host2(FQDN2)
msg
msg
msg
msg
msg
どれか一台
指定された一台
全台
23
まとめ
● OpenStack は分散環境の制御に AMQP を利用● シンプルにスケーラビリティ、アベイラビリティを実現
● AMQP は Exchage/Queue から構成される
● メッセージングの仕組みを知っておくと、 OpenStack の動作理解の助けになります– OpenStack に関係なく、ちょっとしたツールを作る際にも
FIFO が保証され、様々な配送制御が可能な AMQP はとても便利です。
● Python, Ruby, Perl, C/C++, Common Lisp 等ほとんど言語から利用可能です。