osc.cloud 2012 分散システムを支えるメッセージングの仕組み

23
1 2012.12.16 日本 OpenStack ユーザ会 中島 @irix_jp openstack Open source software to build public and private clouds. OSC.Cloud 2012 OpenStack を支える メッセージングの基礎

Upload: irixjp

Post on 29-Jun-2015

3.277 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

1

2012.12.16日本 OpenStack ユーザ会 中島 @irix_jp

openstackOpen source software to build public and private clouds.

OSC.Cloud 2012

OpenStack を支えるメッセージングの基礎

Page 2: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

2

前置き

● OpenStack は分散指向● スケーラビリティ● アベイラビリティ

● その仕組みとして、 AMQP によるメッセージング機構が採用されています。

Page 3: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

3

プロプライエタリハードウェア

コモディティサーバ

復習

● OpenStack とは?

コモディティサーバ

サーバ仮想化 NW仮想化ストレージ仮想化

オブジェクトストア

OpenStack API、 Amazon 互換 API

OpenStack

Page 4: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

4

プロプライエタリハードウェア

コモディティサーバ

復習

● OpenStack とは?

コモディティサーバ

サーバ仮想化 NW仮想化ストレージ仮想化

オブジェクトストア

OpenStack API、 Amazon 互換 API

OpenStack

この中どうなってるの??

Page 5: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

5

OpenStack の全体像

Page 6: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

6

拡大図

Page 7: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

7

拡大図

これの話

Page 8: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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

● 全体像

Page 9: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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 サーバに命令を発行

Page 10: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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

Page 11: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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

Page 12: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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

Page 13: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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

Page 14: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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は持っているので誤解なきように

Page 15: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

15

OpenStack では?

Page 16: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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

Page 17: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

17

AMQP とは?

● Advanced Message Queuing Protocol● メッセージ指向ミドルウェアのオープンスタンダードなア

プリケーション層プロトコルである。 AMQP の機能の定義は、メッセージ指向、キューイング、ルーティング ( ポイント・ツー・ポイント , 出版 - 購読型モデル ) 、信頼性、セキュリティに及ぶ。 *1

● OpenStack では以下が利用可能– RabbitMQ (鉄板)– Apache QPID ( RHEL 系ならあり)– ZeroMQ (動かしてる人を見たことがない??)

http://ja.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

Page 18: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

18

AMQP とは?

● 用語● ブローカー

– ようはキューサーバ / メッセージサーバの事

● ブローカーは以下の 2 つの要素を持つ– Queue ・・・メッセージがたまる所– Exchange ・・・キューへの配送ルールを定義

● メッセージ交換器

http://ja.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

Page 19: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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

Page 20: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

20

OpenStack のメッセージ処理

● メッセージングの実体は openstac.common.rpc 以下に配置されている (Folsom )● 通称 RPC

● Exchange と Quene による各種配送処理を抽象化した API で、 OpenStack の至るところで使われる重要なプログラム。– 同一コンポーネント全てへメッセージを送る– 誰か1台が受け取れば良いメッセージを送付– 特定の1台へメッセージを送付

http://openstack.jp/assets/files/20120323/howtoreadnovacodes/rpc.html

Page 21: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

21

nova-* が利用する queue

● 各 nova プロセスは起動時に AMQP ブローカーへ接続し、 3 つのキューを作成し、このキューへのメッセージを待ち受けする。● 例 ) QPID & nova-volume ( Essex )

– volume● 誰か1台が受け取れ良いメッセージ

– volume.<<FQDN>>● 自分自身が指定されたメッセージ

– volume_fanout_<<UUID>>● ブロードキャストメッセージを受け取る

Page 22: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

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

どれか一台

指定された一台

全台

Page 23: OSC.Cloud 2012 分散システムを支えるメッセージングの仕組み

23

まとめ

● OpenStack は分散環境の制御に AMQP を利用● シンプルにスケーラビリティ、アベイラビリティを実現

● AMQP は Exchage/Queue から構成される

● メッセージングの仕組みを知っておくと、 OpenStack の動作理解の助けになります– OpenStack に関係なく、ちょっとしたツールを作る際にも

FIFO が保証され、様々な配送制御が可能な AMQP はとても便利です。

● Python, Ruby, Perl, C/C++, Common Lisp 等ほとんど言語から利用可能です。