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

  • 3,050 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,050
On Slideshare
0
From Embeds
0
Number of Embeds
12

Actions

Shares
Downloads
53
Comments
0
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 5. OpenStack の全体像 5
  • 6. 拡大図 6
  • 7. 拡大図 これの話 7
  • 8. 概略イメージ図 ● 全体像 nova-scheduler Horizon HTTP nova-scheduler nova-api(web I/F) Queue Client nova-apiCommand 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-apiCommand 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-apiCommand 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-apiCommand 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-apiCommand 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-apiCommand 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-apiCommand nova-compute hypervisor nova-compute hypervisor FIFO の保証をどう担保? 負荷も集中 nova-compute hypervisorOpenStack も DB は持っているので誤解なきように 14
  • 15. OpenStack では? 15
  • 16. Queue とは? ● AMQP を使ったメッセージング機構 ● 異なるノードに分散配置された各 Nova コンポーネント 間での通信を実現する。 nova-scheduler Horizon HTTP nova-api nova-scheduler(web I/F) AMQP Client nova-apiCommand 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) msgmsg 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