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