自律分散 JVM
マイクロサービス・クラウド

     矢野 勉


                1
モチベーション
• ひとりでも保守できるようにしたい
• アプリケーションとは本質的にステー
 トフル

• クラウドを生かすためにはステートレ
 スであるべき



                      2
ひとりでも保守できるようにしたい


   サーバというものは落ちるのが普通

落ちるたびにメール通知→即対応とかマジでウザイ
     落ち着いて酒も飲めやしない




                          3
ひとりでも保守できるようにしたい

   サーバというものは落ちるのが普通

•落ちたサーバにリクエストが飛んで欲しくない
→ 死ぬならちゃんと死んでくれ

•復旧作業とかしたくない
→ 落ちたサーバはもういなかったことにしたい


                         4
ひとりでも保守できるようにしたい


        自律分散
•サーバが死んだらサービスから自動的に切り離される
•サーバを起動したらサービスに自動的に接続する




                            5
Heart Beat
          find
  AP               Service
                    Service
                     Service
Server            Registrar
                  Registrar
                   Registrar
         return




                                            6
find
  AP               Service
                    Service
                     Service
Server            Registrar
                  Registrar
         return    Registrar




                               7
Heart Beat
          find
  AP               Service
                    Service
                     Service
Server            Registrar
                  Registrar
                   Registrar
         return




                                            8
アプリケーションとステートレス



   アプリケーション


   ユーザステートの管理




                  9
アプリケーションとステートレス



     アプリケーション
                    きる
              トレスにで
       理は ステー
    の処
  個々ユーザステートの管理
でも




                         9
Heart Beat
          find
  AP               Service
                    Service
                     Service
Server            Registrar
                  Registrar
                   Registrar
         return




                                            10
Heart Beat
          find
  AP               Service
                    Service
                        この部分は全部
                     Service
Server            Registrar
                  Registrar
                   Registrar「処理」
         return
                   なのでステートレス




                                      10
ステートレス

分散できる




         11
全部自分でつくるのがめんどくさい


    時間もないし…




                   12
Jini




       13
JINI

• 大昔のJava用分散サービス仕様
• もともとは組み込み用途を想定       ランプの精 リトル・ジーニー




• SunでBill Joyが開発してた
• 現Apache River
• gigaspace.com
                                        14
JINIで全部できる

                                                   Lease &Join
         Service Discovery
  AP                            Lookup
                                 Service
                                  Service
Server                          Service
                                Registrar
                                Registrar
         notification




                     Jini Extensible Remote Invocation




                                                                 15
Jini Extensible Remote Invocation
                 (JERI)

階層化されたプラガブルなリモート通信プロトコル


               Marshaling Layer
            Object Invocation Layer
               Transport Layer




                                      16
Jini Extensible Remote Invocation
                 (JERI)

階層化されたプラガブルなリモート通信プロトコル


               Marshaling Layer       差し替え可能

            Object Invocation Layer   変更不可

               Transport Layer        差し替え可能




                                               16
Jini Extensible Remote Invocation
               (JERI)
                 Message Pack/Protocol Buffer/Other
             Java Serialization
          Object Invocation Layer
                TCP-IP/SSL




                                                      17
マイクロサービス・クラウド
                                   Amazon Web Service




                               Heart Beat
          find
  AP               Service
                    Service
                     Service
Server            Registrar
                  Registrar
                   Registrar
         return




                                               さくら
            自宅サーバ
                           自社
                                                        18
あんなのとかこんなのとか
  積み上げたい…




               19
めんどうなところ




           20
• セキュリティマネージャ
• コードベースとクラスローダ
• バージョン管理


                  21
コードベースと
     セキュリティ・マネージャ


                        リモートメソッド



                              戻り値

       AP            外部
                        からク
                            ラス
                                       コードベース

     Server                    をロー
                                   ド
                                       class
コードベースからのダウンロードを
許可する設定が必要
コードベースのURLを書く必要がある



セキュリティ・マネージャ

                                                22
サービスのバージョンアップ


         リモートメソッド
  AP                 v1.1
Server
                    コードベース


                     class




                             23
サービスのバージョンアップ


         リモートメソッド
  AP                 v1.1
Server
                    コードベース


                     class
           どうやって変える?


  AP
                     v1.2
Server



                             23
com.uzabase.service.MyService
         version 1.1

                Javaは同じ名前のクラスを区別できない




com.uzabase.service.MyService
         version 1.2



                                       24
com.uzabase.service.v1_1.MyService
            version 1.1

                  名前を変えれば区別できる




com.uzabase.service.v1_2.MyService
            version 1.2



                                     25
Q&A


      26

分散JVMマイクロサーバの構築