第2回 Cloud Foundry 輪読会




VCAPの中のNATS
VCAPの

   Katsunori Kawaguchi
        @hamakn
       2011-11-17
VCAPの各コンポーネント間の
     メッセージングに、
NATSがどう利用されているかを
サンプルを見ながら共有します。
アジェンダ
1. 復習:NATSとは?
2. NATSとCF各コンポーネント
3. ケーススタディ
 1. アプリのデプロイ時
 2. アプリの削除時
 3. DEAの障害発生時
4. まとめ          TODO: 今回はちゃんと
                20分で終わらせます…
自己紹介
• 川口 克則 @hamakn
• NTTコム所属
• Web/スマートフォンアプリの開発
  主にRails

• Cloud Foundryを検証中(2011年10月~)
 – 最近は、アカウント払出/管理アプリを作ったり、
   vcapノードの追加/管理ツールを作ったり。
復習:NATSとは?
1. NATSは、
   EventMachineを使い、
   Rubyで実装された、
   軽量なPub/Sub メッセージングシステム
2. Cloud FoundryはNATSを使っている
   疎結合で自律的なシステムをNATSで実現。

 ※詳細は前回の資料
 http://www.slideshare.net/hamakn/reading-nats
 などを参照してください。
NATSとCloud Foundry



 この
実装が
NATS

           Cloud Foundry The building of the Open PaaS OSCON2011
              http://www.slideshare.net/derekcollison/oscon-2011
NATSとCloud Foundry(2)




   青い
  矢印が
 NATSの
メッセージ       Cloud Foundry The building of the Open PaaS OSCON2011
               http://www.slideshare.net/derekcollison/oscon-2011
例

             subject: dea.discover
             mem:256 disk:2048 fds:256 runtime:ruby
             このアプリを実行できるDEAいる?

  Cloud      reply:
Controller
             できるよー

                                                              DEA


             subject: router.register
             url:test.cloudfoundry.com host:172.16.0.10 port:10000
             というアプリを登録よろしく > router
   DEA
NATSメッセージの確認
• NATSの入っているサーバで
 $ nats-sub ‘>’ –s nats://nats_address:nats_port/
 Listening on [>]
 [#1] Received on [router.start] : …

 – ‘>’ で全てのpublishされたメッセージをListen

• vcap自体のログと合わせて見ると
  動きが把握しやすい
• ソースを追う時は、
  NATS/publish/subscribe
  などでgrepするといい
ケーススタディ
1. アプリのデプロイ時



           ccと
           service



           ccとhm
           とdea
1-1. Cloud Controllerと
                Serviceのやり取り
# Publisher Subscriber Subject                Context
1 cc        service    *aaS.discover          serviceの存在確認
2 service   cc         reply to #1            service idと残容量の返答
3 cc        service    *aaS.provision.service_id #2のserviceへの
                                                 provision要求
4 service   cc         reply to #3            DB, user, passwdなどの
                                              返答
5 cc        service    *aaS.bind.service_id   #4のserviceへの
                                              bind要求
6 service   cc         reply to #5            bind結果の返答
NATSとCloud Foundry(2)




   1.1
のやり取り

            Cloud Foundry The building of the Open PaaS OSCON2011
               http://www.slideshare.net/derekcollison/oscon-2011
1-2. CC, HM, deaのやり取り
           (前半: Stagingまで)
# Publisher Subscriber Subject        Context
1 cc        hm         droplet.updated dropletのupdateの通知
2 cc        dea        dea.discover   memoryやruntimeの条件に合う
                                      deaの返答要求
3 dea       cc         reply to #2    #2に対して、
                                      受け入れ可能な返答
4 cc        dea        dea.dea_id.start dea_idのアプリの実行開始要求
NATSとCloud Foundry(2)




   1.2
のやり取り

            Cloud Foundry The building of the Open PaaS OSCON2011
               http://www.slideshare.net/derekcollison/oscon-2011
1-3. CC, HM, deaのやり取り
         (後半: アプリ実行開始まで)
# Publisher Subscriber Subject            Context
1 cc        hm         healthmanager.health アプリのhealth状況の問い合
                                            わせ(instance数)
2 hm        cc         reply to #1
3 cc        hm         healthmanager.status アプリのstatus状況の問い合
                                            わせ(flapping, crushed)
4 hm        cc         reply to #3
5 hm        dea        dea.heartbeat      heartbeat
1~5を繰り返す
6 dea       router     router.register    アプリのhost:portへの
                                          regist要求
NATSとCloud Foundry(2)




   1.3
のやり取り

            Cloud Foundry The building of the Open PaaS OSCON2011
               http://www.slideshare.net/derekcollison/oscon-2011
まとめ
• NATSがvcapでどう使われているかを
  具体例とともに見てみました
 – この仕組みによって、CloudFoundryは
   疎結合で自律的なシステムになっています。


• コードを追う際は、
 – 全メッセージをsubscribeする
   NATSクライアントが便利
 – git grep NATS/publish/subscribe が便利

NATS on VCAP

  • 1.
    第2回 Cloud Foundry輪読会 VCAPの中のNATS VCAPの Katsunori Kawaguchi @hamakn 2011-11-17
  • 2.
    VCAPの各コンポーネント間の メッセージングに、 NATSがどう利用されているかを サンプルを見ながら共有します。
  • 3.
    アジェンダ 1. 復習:NATSとは? 2. NATSとCF各コンポーネント 3.ケーススタディ 1. アプリのデプロイ時 2. アプリの削除時 3. DEAの障害発生時 4. まとめ TODO: 今回はちゃんと 20分で終わらせます…
  • 4.
    自己紹介 • 川口 克則@hamakn • NTTコム所属 • Web/スマートフォンアプリの開発 主にRails • Cloud Foundryを検証中(2011年10月~) – 最近は、アカウント払出/管理アプリを作ったり、 vcapノードの追加/管理ツールを作ったり。
  • 5.
    復習:NATSとは? 1. NATSは、 EventMachineを使い、 Rubyで実装された、 軽量なPub/Sub メッセージングシステム 2. Cloud FoundryはNATSを使っている 疎結合で自律的なシステムをNATSで実現。 ※詳細は前回の資料 http://www.slideshare.net/hamakn/reading-nats などを参照してください。
  • 6.
    NATSとCloud Foundry この 実装が NATS Cloud Foundry The building of the Open PaaS OSCON2011 http://www.slideshare.net/derekcollison/oscon-2011
  • 7.
    NATSとCloud Foundry(2) 青い 矢印が NATSの メッセージ Cloud Foundry The building of the Open PaaS OSCON2011 http://www.slideshare.net/derekcollison/oscon-2011
  • 8.
    subject: dea.discover mem:256 disk:2048 fds:256 runtime:ruby このアプリを実行できるDEAいる? Cloud reply: Controller できるよー DEA subject: router.register url:test.cloudfoundry.com host:172.16.0.10 port:10000 というアプリを登録よろしく > router DEA
  • 9.
    NATSメッセージの確認 • NATSの入っているサーバで $nats-sub ‘>’ –s nats://nats_address:nats_port/ Listening on [>] [#1] Received on [router.start] : … – ‘>’ で全てのpublishされたメッセージをListen • vcap自体のログと合わせて見ると 動きが把握しやすい • ソースを追う時は、 NATS/publish/subscribe などでgrepするといい
  • 10.
  • 11.
    1. アプリのデプロイ時 ccと service ccとhm とdea
  • 12.
    1-1. Cloud Controllerと Serviceのやり取り # Publisher Subscriber Subject Context 1 cc service *aaS.discover serviceの存在確認 2 service cc reply to #1 service idと残容量の返答 3 cc service *aaS.provision.service_id #2のserviceへの provision要求 4 service cc reply to #3 DB, user, passwdなどの 返答 5 cc service *aaS.bind.service_id #4のserviceへの bind要求 6 service cc reply to #5 bind結果の返答
  • 13.
    NATSとCloud Foundry(2) 1.1 のやり取り Cloud Foundry The building of the Open PaaS OSCON2011 http://www.slideshare.net/derekcollison/oscon-2011
  • 14.
    1-2. CC, HM,deaのやり取り (前半: Stagingまで) # Publisher Subscriber Subject Context 1 cc hm droplet.updated dropletのupdateの通知 2 cc dea dea.discover memoryやruntimeの条件に合う deaの返答要求 3 dea cc reply to #2 #2に対して、 受け入れ可能な返答 4 cc dea dea.dea_id.start dea_idのアプリの実行開始要求
  • 15.
    NATSとCloud Foundry(2) 1.2 のやり取り Cloud Foundry The building of the Open PaaS OSCON2011 http://www.slideshare.net/derekcollison/oscon-2011
  • 16.
    1-3. CC, HM,deaのやり取り (後半: アプリ実行開始まで) # Publisher Subscriber Subject Context 1 cc hm healthmanager.health アプリのhealth状況の問い合 わせ(instance数) 2 hm cc reply to #1 3 cc hm healthmanager.status アプリのstatus状況の問い合 わせ(flapping, crushed) 4 hm cc reply to #3 5 hm dea dea.heartbeat heartbeat 1~5を繰り返す 6 dea router router.register アプリのhost:portへの regist要求
  • 17.
    NATSとCloud Foundry(2) 1.3 のやり取り Cloud Foundry The building of the Open PaaS OSCON2011 http://www.slideshare.net/derekcollison/oscon-2011
  • 18.
    まとめ • NATSがvcapでどう使われているかを 具体例とともに見てみました – この仕組みによって、CloudFoundryは 疎結合で自律的なシステムになっています。 • コードを追う際は、 – 全メッセージをsubscribeする NATSクライアントが便利 – git grep NATS/publish/subscribe が便利