SlideShare ist ein Scribd-Unternehmen logo
1 von 84
クラウド対応
      WEBフレームワーク
         Cockatoo


楽天株式会社 開発部 アーキテクトG窪田 博昭 |2013年3月28日   1
目次




     2
目次
• WEBサイト・システム構成の変遷
  –   MVCキャスト
  –   PHPの世界
  –   クラスタ化の始まり
  –   クラスタ化の始まり(並行処理)
  –   APIクラスタ
  –   分散DB
  –   C10K
  –   そしてクラウドへ
• PHPクラウドへ
• Cockatoo
  –   Cockatoo概要
  –   Cockatoo構成例
  –   Cockatooシーケンス
                           3
WEBサイト・システム構成の編成




                   4
MVCモデル




         5
MVCモデル

       インターネット
       インターネット

       HTTPレスポンス           HTTPリクエスト
サーバー
                    Controller
                        表示指示
           View
                                 ロジック指示
                    表示項目

           Model




                                          6
PHPの世界




         7
PHPの世界

        インターネット
        インターネット

       HTTPレスポンス           HTTPリクエスト
サーバー
                    Controller
                        表示指示
  WEB      View
                                 ロジック指示
                    表示項目

           Model


  DB

                                          8
PHPの世界
All in one 構成

• PHPに限らず大抵のWEBサイトはこの構成
• PVが少なければ問題ない
• 運用が楽

PHP
• 非常に効率がいい
• フレームワークの選択肢も豊富。ライバルはRailsのみ




                                9
PHPの世界
All in one 構成

• PHPに限らず大抵のWEBサイトはこの構成
• PVが少なければ問題ない
• 運用が楽

PHP
• 非常に効率がいい
• フレームワークの選択肢も豊富。ライバルはRailsのみ
終焉
• PVが増えてくると簡単に限界に達する
• でも1台で捌けなくなって来るとちょっと嬉しい
                                10
PHPの世界

        インターネット
        インターネット

       HTTPレスポンス           HTTPリクエスト
サーバー
                    Controller
                        表示指示
  WEB      View
                                 ロジック指示
                    表示項目

           Model
                    この辺りが
                    ボトルネック
  DB

                                          11
PHPの世界

        インターネット
        インターネット

        HTTPレスポンス           HTTPリクエスト
サーバー
                     Controller
                         表示指示
  WEB       View
                                  ロジック指示
                     表示項目

            Model

DBサーバ
   DB

                                           12
PHPの世界
WEB+DB 構成

•   手っ取り早く追い出せるDBを追い出した形
•   DB自体が重いのでこれだけでも効果的
•   運用もそれ程変わらない
•   DB自体はまだまだ余裕
PHP
• スタンドアロン型フレームワークで楽出来るのはここまで




                               13
PHPの世界
WEB+DB 構成

•   手っ取り早く追い出せるDBを追い出した形
•   DB自体が重いのでこれだけでも効果的
•   運用もそれ程変わらない
•   DB自体はまだまだ余裕
PHP
• スタンドアロン型フレームワークで楽出来るのはここまで


終焉
• PHPのロジックがボトルネックになってくる
• この先は辛く厳しい道のり・・・
                               14
PHPの世界

        インターネット
        インターネット

        HTTPレスポンス           HTTPリクエスト
サーバー
                     Controller
                         表示指示
  WEB       View
                                  ロジック指示
                     表示項目

            Model     ボトルネック

DBサーバ
   DB

                                           15
クラスタ化の始まり




            16
クラスタ化の始まり

        インターネット
        インターネット




DBサーバ
   DB

                        17
クラスタ化の始まり

         インターネット
         インターネット


セッション
  DB




 DBサーバ
    DB

                         18
クラスタ化の始まり
WEBクラスタ+DB 構成

• 並列化によりPHPロジックのボトルネックを克服
• 同時にWEBサーバの冗長化も達成して安定化
• だんだん運用が・・・

PHP
• セッションレプリケーションを自前で書く事になる
• 大体のサイトはココ迄で事足りる




                            19
クラスタ化の始まり
WEBクラスタ+DB 構成

• 並列化によりPHPロジックのボトルネックを克服
• 同時にWEBサーバの冗長化も達成して安定化
• だんだん運用が・・・

PHP
• セッションレプリケーションを自前で書く事になる
• 大体のサイトはココ迄で事足りる


終焉
• DBが悲鳴を上げ始める
• キャッシュDB(memcachedなど)導入は延命治療に過ぎません
                                      20
クラスタ化の始まり

         インターネット
         インターネット


セッション
  DB




 DBサーバ
    DB             ボトルネック
                            21
クラスタ化の始まり

         インターネット
         インターネット


セッション
  DB


キャッシュ
  DB



 DBサーバ
    DB             ボトルネック
                            22
クラスタ化の始まり(並行処理)




                  23
クラスタ化の始まり(並行処理)




                  24
クラスタ化の始まり(並行処理)




                  25
クラスタ化の始まり(並行処理)
WEBクラスタ+DB 構成

• 単一リクエストの処理速度が頭打ち・・・
• 多くの処理が必要な複雑なページではレスポンスが確保できない
• ポータルTOPページや、最初は非表示でJS制御するページなど

PHP
• そもそもPHPはコンパイル型の言語より処理能力が低い
• PHPは並行処理が難しい(ワーカスレッドで解決できない)




                                 26
クラスタ化の始まり(並行処理)
WEBクラスタ+DB 構成

• 単一リクエストの処理速度が頭打ち・・・
• 多くの処理が必要な複雑なページではレスポンスが確保できない
• ポータルTOPページや、最初は非表示でJS制御するページなど

PHP
• そもそもPHPはコンパイル型の言語より処理能力が低い
• PHPは並行処理が難しい(ワーカスレッドで解決できない)


終焉
• レスポンスが遅いよ~~
• というかPHPはここ迄の規模をスコープしてない気がする・・・
                                   27
クラスタ化の始まり(並行処理)

         インターネット
         インターネット


セッション
  DB


キャッシュ
  DB
            ボトルネック   ボトルネック   ボトルネック


 DBサーバ
    DB

                                       28
APIクラスタ




          29
APIクラスタ

         インターネット
         インターネット


セッション
  DB


キャッシュ
  DB

           API       API   API

 DBサーバ
    DB

                                 30
APIクラスタ




API   API   API   API   API   API   API   API   API   API
                                                            31
APIクラスタ
WEBクラスタ+APIクラスタ+DB 構成

• ロジック部分を切り出しAPI化した形
• 処理の共通化も同時に実施でき開発効率UP
• WEBサーバの冗長化、ロジック並列化&冗長化を実現

PHPでやるの?
• PHPで非同期リクエストは一般的で無い(curl_multiとか?)
• Javaなどでは一般的な構成(SOAP、JSONなど)
• フレームワークを使っててもレンダリングエンジンしか残らない?




                                   32
APIクラスタ
WEBクラスタ+APIクラスタ+DB 構成

• ロジック部分を切り出しAPI化した形
• 処理の共通化も同時に実施でき開発効率UP
• WEBサーバの冗長化、ロジック並列化&冗長化を実現

PHPでやるの?
• PHPで非同期リクエストは一般的で無い(curl_multiとか?)
• Javaなどでは一般的な構成(SOAP、JSONなど)
• フレームワークを使っててもレンダリングエンジンしか残らない?

終焉
• DBの限界まではイケるでしょう
                                   33
APIクラスタ

         インターネット
         インターネット


セッション
  DB


キャッシュ
  DB

           API        API   API

 DBサーバ
    DB             ボトルネック
                                  34
分散DB




       35
分散DB

        インターネット
        インターネット


セッション
  DB




             API        API        API

        分散         分散         分散   分散
        DB         DB         DB   DB
                                         36
分散DB
WEBクラスタ+APIクラスタ+分散DB 構成

• MongoDB , Cassandra , Redis, Hibari など
• 極端なサーバ数じゃなければこれで大丈夫


とことんPHP
• かなり大規模なサイトの話
• KVSや分散DBのORMなど殆ど無い




                                           37
分散DB
WEBクラスタ+APIクラスタ+分散DB 構成

• MongoDB , Cassandra , Redis, Hibari など
• 極端なサーバ数じゃなければこれで大丈夫


とことんPHP
• かなり大規模なサイトの話
• KVSや分散DBのORMなど殆ど無い


終焉
• C10K問題(コネクション数の爆発)
Apache(100プロセス×10サーバ)×API (100プロセス×10サーバ)= 100万コネクション
                                                        38
分散DB

        インターネット
        インターネット


セッション
  DB


                              ボトルネック


             API        API            API

        分散         分散         分散       分散
        DB         DB         DB       DB
                                             39
C10K




       40
C10K

        インターネット
        インターネット


セッション
  DB         WEB           WEB         WEB


                        Gateway


             API            API        API

        分散         分散             分散   分散
        DB         DB             DB   DB
                                             41
C10K
WEBクラスタ+Gateway+APIクラスタ+分散DB 構成

• Gateway導入によってコネクション数を削減
• GatewayはWebサーバ毎に設置しても十分効果的
• API → 分散DBでも同様(MongoDBならばShardingで解決)

とことんPHP
• ゲートウェイ実装
    NIO & Pipelining が理想




                                          42
C10K
WEBクラスタ+Gateway+APIクラスタ+分散DB 構成

• Gateway導入によってコネクション数を削減
• GatewayはWebサーバ毎に設置しても十分効果的
• API → 分散DBでも同様(MongoDBならばShardingで解決)

とことんPHP
• ゲートウェイ実装
    NIO & Pipelining が理想

終焉
• 運用が破綻する
    各種APIサーバの管理は大変そう
• システムのある限り、また新たなC10Kがどこかに・・・             43
C10K

        インターネット
        インターネット


セッション
  DB         WEB           WEB         WEB


                        Gateway


             API            API        API

        分散         分散             分散   分散
        DB         DB             DB   DB
                                             44
そしてクラウドへ




           45
そしてクラウドへ(イメージ)

    インターネット
    インターネット


                   Controller
         WEB
         WEB
         View



Model   API
        API

   分散         分散          分散    分散
   DB         DB          DB    DB
                                     46
そしてクラウドへ
WEBクラウド+APIクラウド+分散DB 構成

• WEBクラウド、APIクラウド、の各ホストの事を考えたくない
• WEBクラウド→APIクラウドの通信経路をどう解決するか?


PHP
• PHPでもクラウド出来るぜ!!てきな・・・


懸念
• 分散DBはどうしよう?
• 何処かのC10K
• ネットワークインフラの限界はあるのでそっちはそっちで頑張る
                                   47
PHPクラウドへ




           48
PHPクラウドへ
クラウド化への課題

•   WEBクラウド→APIクラウドの通信経路をどう解決するか?
•   WEBクラウド→APIクラウドの非同期並列リクエスト
•   ゲートウェイ(C10K対策)
•   レンダリング(テンプレートエンジン)はどうするか?
•   分散DBの選定
•   運用面




                                    49
PHPクラウドへ
クラウド化への課題

•   WEBクラウド→APIクラウドの通信経路をどう解決するか?
•   WEBクラウド→APIクラウドの非同期並列リクエスト
•   ゲートウェイ(C10K対策)
•   レンダリング(テンプレートエンジン)はどうするか?
•   分散DBの選定
•   運用面




                                    50
PHPクラウドへ
WEBクラウド→Zookeeper→APIクラウド

WEBクラウド→APIクラウドの通信経路をどう解決するか?
• ZookeeperでAPIクラウドのノード管理を行う
Zookeeper
•   プロセス監視と有効プロセス一覧の提供、通知ができる
•   プロセスが死亡した場合、自動的に一覧からも削除される
•   ネームサーバと同様の使い方が可能    /API
•   数千を超えるノード監視ができる       |- API1
                          | |- node1
•   Zookeeper自身もクラスタ構成    | |- node2
                            | -API2
                                |- node3
                                |- node4
                                           51
PHPクラウドへ

            インターネット
            インターネット


                          Controller
                WEB
                WEB
Zookeeper       View



     Model     API
               API

        分散           分散          分散    分散
        DB           DB          DB    DB
                                            52
PHPクラウドへ
クラウド化への課題

•   WEBクラウド→APIクラウドの通信経路をどう解決するか?
•   WEBクラウド→非同期並列リクエスト
•   ゲートウェイ(C10K対策)
•   レンダリング(テンプレートエンジン)はどうするか?
•   分散DBの選定
•   運用面




                                    53
PHPクラウドへ
WEBクラウド→並行リクエスト→APIクラウド

ØMQで容易に実現できる。(バランシング込み)


ØMQ (zoeromq)
•   非常に高速(length-value データ構造で高効率)
•   特にデバイス(Gatewayで利用)はCと同速度(extention内で完結)
•   N vs M 通信が簡潔に記述できる
•   非同期通信(並行処理)が可能
•   リコネクト、リトライ、キューイングは勿論自動
•   柔軟な通信配線が可能
•   1メッセージがマルチパート
                                         54
PHPクラウドへ
ØMQ (zoeromq)



class GatewayDaemon {
 public function __construct($frontDSN,$backDSNs){
   $this->frontDSN = $frontDSN;
   $this->backDSNs = $backDSNs;
   $this->zmqCtx     = new ZMQContext();
   $this->zmqSockFront = new ZMQSocket($this->zmqCtx, ZMQ::SOCKET_XREP);
   $this->zmqSockBack = new ZMQSocket($this->zmqCtx, ZMQ::SOCKET_XREQ);
 }

 public function main(){
   $this->zmqSockFront->bind($this->frontDSN);
   foreach($this->backDSNs as $backDSN ) {
     $this->zmqSockBack->connect($backDSN);
   }
   new ZMQDevice(ZMQ::DEVICE_QUEUE,$this->zmqSockFront,$this->zmqSockBack);
 }
}                                                                               55
PHPクラウドへ

            インターネット
            インターネット


                          Controller
                WEB
                WEB                    φMQ
Zookeeper       View



     Model     API
               API           φMQ             φMQ

        分散           分散          分散                分散
        DB           DB          DB                DB
                                                        56
PHPクラウドへ
クラウド化への課題

•   WEBクラウド→APIクラウドの通信経路をどう解決するか?
•   WEBクラウド→非同期並列リクエスト
•   ゲートウェイ(C10K対策)
•   レンダリング(テンプレートエンジン)はどうするか?
•   分散DBの選定
•   運用面




                                    57
PHPクラウドへ
ClearSilver

• Viewでは余計な仕事はしたくない人向け
• 高速でシンプルなレンダリングエンジン(C言語)
• if / else , for , function call 辺りまでなら十分


    <?cs if: S.wiki.login.name ?>
     <a href="/wiki/default/a/login">Logout</a>
    <?cs else ?>
     <a href="/wiki/default/a/signup">Sign up</a>
    <?cs /if ?>


                                                    58
PHPクラウドへ
クラウド化への課題

•   WEBクラウド→APIクラウドの通信経路をどう解決するか?
•   WEBクラウド→非同期並列リクエスト
•   ゲートウェイ(C10K対策)
•   レンダリング(テンプレートエンジン)はどうするか?
•   分散DBの選定
•   運用面




                                    59
PHPクラウドへ
MongoDB

•   C++で開発された高速DB (NoSQL)
•   大量処理に特化
•   トランザクション不可
•   リレーション不可
•   Map/Reduce
•   Sharding (パーテショニング)
•   ドキュメントベース
•   1000台規模を組む事ができ、勿論C10Kも対応(MongoOS)
•   Readが速い!=WEB向き


                                        60
PHPクラウドへ
クラウド化への課題

•   WEBクラウド→APIクラウドの通信経路をどう解決するか?
•   WEBクラウド→非同期並列リクエスト
•   ゲートウェイ(C10K対策)
•   レンダリング(テンプレートエンジン)はどうするか?
•   分散DBの選定
•   運用面




                                    61
PHPクラウドへ
Capistrano
•   Ruby製のデプロイツール
•   Railsではお馴染み
•   ターゲットサーバにはSSHしか求めない(特別な準備が必要ない)
•   シェルベース処理ならなんでも来い



               Capistranoサーバ

              オペレーション(on ssh)




       サーバ   サーバ   サーバ   サーバ


                                 62
そしてクラウドへ
クラウド化への課題

•   WEBクラウド→APIクラウドの通信経路をどう解決するか?
•   WEBクラウド→非同期並列リクエスト
•   ゲートウェイ(C10K対策)
•   レンダリング(テンプレートエンジン)はどうするか?
•   分散DBの選定
•   運用面




                                    63
Cockatoo(開発名Albatross)




                         64
Cockatoo概要




             65
Cockatoo
特徴

• PHP製WEBフレームワーク
• シングルポイントを排除
    – どのサーバ(1台)が落ちても即時運用は発生しない
•   並行処理でリクエストを高速化
•   WEB→APIの呼び出しはRPCインターフェスで隠蔽
•   レイアウト(ページの構成)情報を外部ストレージ化(MongoDB)
•   開発効率重視
    –   CMSを搭載(WebUI)
    –   配置周り(表示位置など)のHTML/CSSは記述不要(CMSで吸収)
    –   マウス操作のレイアウトエディタ(wysiwyg)
    –   All in one 環境 Apache(php)+ClearSilver
• Ajax,plain-text,バイナリをサポート                     66
アプリケーション&デバイス
                                                                                            /wiki
                                            /news
                               /news


              Cockatoo-web                                  RequestParser
                                                            DeviceSelector
 LayoutDB                                                                                             LayoutDB

                                device          device                                device
                                (default)       (android)                              (default)      SessionDB
SessionDB

              Cockatoo-gateway



             Cockatoo-action                                        Cockatoo-action




ContentsDB                      Application                                           Application     ContentsDB
                                ( wiki )                    zookeeper                 ( yslowview )



  Cockatooには複数の独立したアプリケーションが同居できる
  アプリケーションには複数の
    デバイス(同一URLでのコンテンツ出し分け)を設定できる
  これらの振り分け処理はRequestParser,DeviceSelectorで定義
                                                                                                                   67
Webページ




ページは独立した複数処理
に分割出来る




               68
Page / Layout / Components

Layout   1:n   Components




                                       69
一般的な3層アーキテクチャ

Internet
 Internet

                Request



       WEB
       WEB

               Call APIs



       API
       API

             Retrieve data

  DB
                             70
Cockatoo概要

           Internet
            Internet

                                  Request                 SessionDB
LayoutDB     Gat page layout

                                                          MongoDB
                   WEB
                   WEB                                    ReplSet
MongoDB
ReplSet       Get components
                                 Call APIs                Memcache

                    API
                    API

                               Retrieve data

             ContentsDB                        MongoDB
                                                ReplSet               71
Cockatoo概要

           Internet
            Internet

                                  Request                 SessionDB
LayoutDB     Gat page layout
             MongoDBはREADには強く
                                                          MongoDB
              WEBアクセスに十分耐える
                  WEB
                  WEB                                     ReplSet
MongoDB       性能がある。
ReplSet      Get components
             しかしWRITEそれ程でも無いCall APIs                     Memcache
              セッションなどは
                  API
              Memcachedの方が無難
                   API

                               Retrieve data

             ContentsDB                        MongoDB
                                                ReplSet               72
Cockatoo概要

            Internet
             Internet

                                   Request                 SessionDB
LayoutDB      Gat page layout

                                                           MongoDB
                    WEB
                    WEB                                    ReplSet
MongoDB
ReplSet        Get components
                                  Call APIs                Memcache

                     API
                     API
Zookeeper
                                Retrieve data

              ContentsDB                        MongoDB
                                                 ReplSet               73
Cockatoo概要

            Internet
             Internet

                                   Request                 SessionDB
LayoutDB      Gat page layout

                                                           MongoDB
                    WEB
                    WEB                                    ReplSet
MongoDB
ReplSet        Get components
                                  Call APIs                Memcache

                     API
                     API
Zookeeper                                                  Solr
                                Retrieve data

              ContentsDB                        MongoDB
                                                 ReplSet               74
Cockatoo概要
                   Developer

                                HTML markup
LayoutDB   Set page layout          &        Deploy API
                                API settings

                 CMS                                Batch servers
MongoDB
ReplSet     Set components
                                                             Insert Data


                                     API servers
                                     API servers
              Set static contents




             ContentsDB                        MongoDB
                                                ReplSet                    75
CMS ー レイアウトエディタ
Layout editor




                                  76
CMS - コンポーネントエディタ




                    77
CMS - ページエディタ




                78
Cockatoo構成例




              79
Cockatooクラスタ構成(サービス環境)
                                Load Balancer
                                                 HTTP
     WEB cloud
      WEB cloud
    Web server
      Web server
          Web server
           ClearSilver            apache
                ClearSilver           apache
                    ClearSilver           apache                              LayoutDB(replset)
         cockatoo-web
            cockatoo-web
               cockatoo-web
              φMQ                                                               Mongo server
                  φMQ                                   page info                 Mongo server
                     φMQ                                                            Mongo server
               φMQ                   php
                  φMQ                      php                                   MongoDB
                                                                                  MongoDB
                     φMQ                          php
      cockatoo-gateway
         cockatoo-gateway                                                           MongoDB
            cockatoo-gateway
             φMQ
                    φMQ
                       φMQ
                                                           session data

                                           API info

      API cloudAPI call (RPC)                                                         SessionDB
       API cloud
     API server
       API server                                                           Memcached server
           API server                                                         Memcached server
                 φMQ                  php                                       Memcached server
                   φMQ                      php
                     φMQ                          php
         cockatoo-action
           cockatoo-action                              session data           Memcache
                                                                                Memcache
              cockatoo-action                                                     Memcache
                   business logics

                        query
                                              regist

  ContentsDB(replset)                                                        zookeeper cluster
                Mongo server                                   Zookeeper server
                  Mongo server                                   Zookeeper server
                    Mongo server                                   Zookeeper server
                 MongoDB
                  MongoDB
                    MongoDB                                               zookeeper
                                                                                                   80
Cockatooスタンドアロン構成(開発環境)

             Local machine

                                     Blowser
                                         HTTP




                                            apache
                                                            LayoutDB
                    ClearSilver
               cockatoo-web info
                          page



              API call (function call)                     Filesystem


              cockatoo-action               session data
                  business logics
                                                           SessionDB
               query        session data


              ContentsDB
                                                           Filesystem
                            Filesystem




API呼び出しのRPC部分をショートカット(zmq,zookeeper要らない)
ストレージ処理も同様に簡素化(Mongo,memcached要らない)                                     81
クラスタ構成                                                                           開発環境
                              Load Balancer                                                      Local machine


                                               HTTP                                                                      Blowser
   WEB cloud
    WEB cloud                                                                                                                HTTP

  Web server
    Web server
        Web server
         ClearSilver
              ClearSilver
                                apache
                                    apache                                                                                                     LayoutDB
                  ClearSilver           apache                              LayoutDB(replset)           ClearSilver
                                                                                                                               apache
       cockatoo-web
          cockatoo-web
             cockatoo-web
            φMQ                                                               Mongo server         cockatoo-web info
                                                                                                              page
                φMQ                                   page info                 Mongo server
                   φMQ                                                            Mongo server
             φMQ                   php
                φMQ                      php                                   MongoDB
                                                                                MongoDB                                                       Filesystem
                   φMQ                          php                                               API call (function call)
    cockatoo-gateway
       cockatoo-gateway                                                           MongoDB
          cockatoo-gateway
           φMQ
                  φMQ
                     φMQ
                                                         session data                             cockatoo-action              session data
                                                                                                      business logics
                                         API info                                                                                             SessionDB
                API call (RPC)
    API cloud                                                                       SessionDB      query        session data
     API cloud
   API server
     API server                                                           Memcached server       ContentsDB
         API server                                                         Memcached server
               φMQ                  php                                       Memcached server
                 φMQ                      php
                   φMQ
       cockatoo-action                          php                          Memcache                                                         Filesystem
                                                      session data
         cockatoo-action
            cockatoo-action                                                   Memcache
                                                                                Memcache                        Filesystem
                 business logics
                                            Deploy
                      query                                                                                                                    Export
                                            regist

ContentsDB(replset)                                                        zookeeper cluster                 Import
                                                                                                                                              Tools
              Mongo server                                   Zookeeper server
                Mongo server                                   Zookeeper server
                  Mongo server                                   Zookeeper server
                                                                                                           Packaging
               MongoDB
                MongoDB
                  MongoDB                                               zookeeper                        Capkg
                                                                                                                                                        82
Cockatooシーケンス




                83
Cockatooシーケンス
シーケンス

  リクエスト




   事前Action




並列Action
   事後Action

   レンダリング
  レスポンス
                              84

Weitere ähnliche Inhalte

Andere mochten auch

Ejercicios 2
Ejercicios 2Ejercicios 2
Ejercicios 2
joslis12
 
Hist 141 the little ice age
Hist 141   the little ice ageHist 141   the little ice age
Hist 141 the little ice age
flip7rider
 
Copyright crash course part 4
Copyright crash course part 4Copyright crash course part 4
Copyright crash course part 4
gsalas10
 
Hist 141 panama & los angeles
Hist 141   panama & los angelesHist 141   panama & los angeles
Hist 141 panama & los angeles
flip7rider
 
Španska književnost 1 - o tekstu i knjizi
Španska književnost 1 - o tekstu i knjiziŠpanska književnost 1 - o tekstu i knjizi
Španska književnost 1 - o tekstu i knjizi
Jasmina Nikolic
 
Copyright crash course g salas
Copyright crash course g salasCopyright crash course g salas
Copyright crash course g salas
gsalas10
 
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
Masayuki Abe
 
Copyright crash course part 3
Copyright crash course part 3Copyright crash course part 3
Copyright crash course part 3
gsalas10
 
презентация элективного курса по черчению
презентация элективного курса по черчениюпрезентация элективного курса по черчению
презентация элективного курса по черчению
loksal
 
Environmental Stewardship Focus Area
Environmental  Stewardship Focus AreaEnvironmental  Stewardship Focus Area
Environmental Stewardship Focus Area
serviceresources
 

Andere mochten auch (20)

Education Focus Area
Education Focus AreaEducation Focus Area
Education Focus Area
 
The simpsons
The simpsonsThe simpsons
The simpsons
 
Kitakyushu Smart City Master Plan
Kitakyushu Smart City Master PlanKitakyushu Smart City Master Plan
Kitakyushu Smart City Master Plan
 
Ejercicios 2
Ejercicios 2Ejercicios 2
Ejercicios 2
 
Simultaneous optimization of Transfer Prices and Flows of Goods in comparison...
Simultaneous optimization of Transfer Prices and Flows of Goods in comparison...Simultaneous optimization of Transfer Prices and Flows of Goods in comparison...
Simultaneous optimization of Transfer Prices and Flows of Goods in comparison...
 
Musafir hun yaaron prelimswith answers
Musafir hun yaaron prelimswith answersMusafir hun yaaron prelimswith answers
Musafir hun yaaron prelimswith answers
 
Prohibitions of Riba in Qura'n and Ahadith
Prohibitions of Riba in Qura'n and AhadithProhibitions of Riba in Qura'n and Ahadith
Prohibitions of Riba in Qura'n and Ahadith
 
ちゃんとWeb会議
ちゃんとWeb会議ちゃんとWeb会議
ちゃんとWeb会議
 
Hist 141 the little ice age
Hist 141   the little ice ageHist 141   the little ice age
Hist 141 the little ice age
 
Copyright crash course part 4
Copyright crash course part 4Copyright crash course part 4
Copyright crash course part 4
 
Bucerias
BuceriasBucerias
Bucerias
 
Hist 141 panama & los angeles
Hist 141   panama & los angelesHist 141   panama & los angeles
Hist 141 panama & los angeles
 
Španska književnost 1 - o tekstu i knjizi
Španska književnost 1 - o tekstu i knjiziŠpanska književnost 1 - o tekstu i knjizi
Španska književnost 1 - o tekstu i knjizi
 
Copyright crash course g salas
Copyright crash course g salasCopyright crash course g salas
Copyright crash course g salas
 
Broan nutone canada green initiatives 2006 2010
Broan nutone canada green initiatives 2006 2010Broan nutone canada green initiatives 2006 2010
Broan nutone canada green initiatives 2006 2010
 
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
[okaweb × HTML5 fun] HTML5で人気のAPIを使って 未来価値を創造しよう
 
Copyright crash course part 3
Copyright crash course part 3Copyright crash course part 3
Copyright crash course part 3
 
презентация элективного курса по черчению
презентация элективного курса по черчениюпрезентация элективного курса по черчению
презентация элективного курса по черчению
 
Telesign impermium webinar deck-121312
Telesign impermium webinar deck-121312Telesign impermium webinar deck-121312
Telesign impermium webinar deck-121312
 
Environmental Stewardship Focus Area
Environmental  Stewardship Focus AreaEnvironmental  Stewardship Focus Area
Environmental Stewardship Focus Area
 

Ähnlich wie Cockatoo

at+link サービスセミナー 20111209
at+link サービスセミナー 20111209at+link サービスセミナー 20111209
at+link サービスセミナー 20111209
Hiroshi Bunya
 
KDL主催セミナー 20120215
KDL主催セミナー 20120215KDL主催セミナー 20120215
KDL主催セミナー 20120215
Hiroshi Bunya
 
WTM52 あなたの作ったWEBサイト、生きてますか?
WTM52 あなたの作ったWEBサイト、生きてますか?WTM52 あなたの作ったWEBサイト、生きてますか?
WTM52 あなたの作ったWEBサイト、生きてますか?
Masanori Oobayashi
 
Rubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーションRubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーション
Naoto Hori
 

Ähnlich wie Cockatoo (20)

Info talk #36
Info talk #36Info talk #36
Info talk #36
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
 
Couch DB in 15minutes
Couch DB in 15minutesCouch DB in 15minutes
Couch DB in 15minutes
 
Web API をデバックするときに必要なたったひとつのこと
Web API をデバックするときに必要なたったひとつのことWeb API をデバックするときに必要なたったひとつのこと
Web API をデバックするときに必要なたったひとつのこと
 
at+link サービスセミナー 20111209
at+link サービスセミナー 20111209at+link サービスセミナー 20111209
at+link サービスセミナー 20111209
 
Mvc conf session_1_osada
Mvc conf session_1_osadaMvc conf session_1_osada
Mvc conf session_1_osada
 
TokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoopTokyoWebminig カジュアルなHadoop
TokyoWebminig カジュアルなHadoop
 
Ph perがawsと出会ってdev opsを目指した話
Ph perがawsと出会ってdev opsを目指した話Ph perがawsと出会ってdev opsを目指した話
Ph perがawsと出会ってdev opsを目指した話
 
6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents6th oct2012 kobeit_webintents
6th oct2012 kobeit_webintents
 
第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編第2回Web技術勉強会 webパフォーマンス改善編
第2回Web技術勉強会 webパフォーマンス改善編
 
目指せ1秒切り!ECサイト表示高速化のワザ
目指せ1秒切り!ECサイト表示高速化のワザ目指せ1秒切り!ECサイト表示高速化のワザ
目指せ1秒切り!ECサイト表示高速化のワザ
 
KDL主催セミナー 20120215
KDL主催セミナー 20120215KDL主催セミナー 20120215
KDL主催セミナー 20120215
 
Cassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sqlCassandraとh baseの比較して入門するno sql
Cassandraとh baseの比較して入門するno sql
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
Perl Ocean
Perl OceanPerl Ocean
Perl Ocean
 
WTM52 あなたの作ったWEBサイト、生きてますか?
WTM52 あなたの作ったWEBサイト、生きてますか?WTM52 あなたの作ったWEBサイト、生きてますか?
WTM52 あなたの作ったWEBサイト、生きてますか?
 
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
 
Rubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーションRubyで作るtwitter風webアプリケーション
Rubyで作るtwitter風webアプリケーション
 
JavaScript And Keywords
JavaScript And KeywordsJavaScript And Keywords
JavaScript And Keywords
 
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版ありますElixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
 

Mehr von Hiroaki Kubota (9)

Db tech showcase2015 how to replicate between clusters
Db tech showcase2015 how to replicate between clustersDb tech showcase2015 how to replicate between clusters
Db tech showcase2015 how to replicate between clusters
 
DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?DB tech showcase: 噂のMongoDBその用途は?
DB tech showcase: 噂のMongoDBその用途は?
 
MongoDBで自然言語処理
MongoDBで自然言語処理MongoDBで自然言語処理
MongoDBで自然言語処理
 
MongoDBJP 納涼もんご祭り
MongoDBJP 納涼もんご祭りMongoDBJP 納涼もんご祭り
MongoDBJP 納涼もんご祭り
 
Why mincore() returns different value of stat ?
Why mincore() returns different value of stat ?Why mincore() returns different value of stat ?
Why mincore() returns different value of stat ?
 
Mongo ghostsync and slaveDelay (Japanease)
Mongo ghostsync and slaveDelay (Japanease)Mongo ghostsync and slaveDelay (Japanease)
Mongo ghostsync and slaveDelay (Japanease)
 
Mongo ghostsync and slaveDelay
Mongo ghostsync and slaveDelayMongo ghostsync and slaveDelay
Mongo ghostsync and slaveDelay
 
C10K on Mongo's sharding
C10K on Mongo's shardingC10K on Mongo's sharding
C10K on Mongo's sharding
 
MongoTokyo
MongoTokyoMongoTokyo
MongoTokyo
 

Kürzlich hochgeladen

Kürzlich hochgeladen (10)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

Cockatoo

  • 1. クラウド対応 WEBフレームワーク Cockatoo 楽天株式会社 開発部 アーキテクトG窪田 博昭 |2013年3月28日 1
  • 2. 目次 2
  • 3. 目次 • WEBサイト・システム構成の変遷 – MVCキャスト – PHPの世界 – クラスタ化の始まり – クラスタ化の始まり(並行処理) – APIクラスタ – 分散DB – C10K – そしてクラウドへ • PHPクラウドへ • Cockatoo – Cockatoo概要 – Cockatoo構成例 – Cockatooシーケンス 3
  • 6. MVCモデル インターネット インターネット HTTPレスポンス HTTPリクエスト サーバー Controller 表示指示 View ロジック指示 表示項目 Model 6
  • 8. PHPの世界 インターネット インターネット HTTPレスポンス HTTPリクエスト サーバー Controller 表示指示 WEB View ロジック指示 表示項目 Model DB 8
  • 9. PHPの世界 All in one 構成 • PHPに限らず大抵のWEBサイトはこの構成 • PVが少なければ問題ない • 運用が楽 PHP • 非常に効率がいい • フレームワークの選択肢も豊富。ライバルはRailsのみ 9
  • 10. PHPの世界 All in one 構成 • PHPに限らず大抵のWEBサイトはこの構成 • PVが少なければ問題ない • 運用が楽 PHP • 非常に効率がいい • フレームワークの選択肢も豊富。ライバルはRailsのみ 終焉 • PVが増えてくると簡単に限界に達する • でも1台で捌けなくなって来るとちょっと嬉しい 10
  • 11. PHPの世界 インターネット インターネット HTTPレスポンス HTTPリクエスト サーバー Controller 表示指示 WEB View ロジック指示 表示項目 Model この辺りが ボトルネック DB 11
  • 12. PHPの世界 インターネット インターネット HTTPレスポンス HTTPリクエスト サーバー Controller 表示指示 WEB View ロジック指示 表示項目 Model DBサーバ DB 12
  • 13. PHPの世界 WEB+DB 構成 • 手っ取り早く追い出せるDBを追い出した形 • DB自体が重いのでこれだけでも効果的 • 運用もそれ程変わらない • DB自体はまだまだ余裕 PHP • スタンドアロン型フレームワークで楽出来るのはここまで 13
  • 14. PHPの世界 WEB+DB 構成 • 手っ取り早く追い出せるDBを追い出した形 • DB自体が重いのでこれだけでも効果的 • 運用もそれ程変わらない • DB自体はまだまだ余裕 PHP • スタンドアロン型フレームワークで楽出来るのはここまで 終焉 • PHPのロジックがボトルネックになってくる • この先は辛く厳しい道のり・・・ 14
  • 15. PHPの世界 インターネット インターネット HTTPレスポンス HTTPリクエスト サーバー Controller 表示指示 WEB View ロジック指示 表示項目 Model ボトルネック DBサーバ DB 15
  • 17. クラスタ化の始まり インターネット インターネット DBサーバ DB 17
  • 18. クラスタ化の始まり インターネット インターネット セッション DB DBサーバ DB 18
  • 19. クラスタ化の始まり WEBクラスタ+DB 構成 • 並列化によりPHPロジックのボトルネックを克服 • 同時にWEBサーバの冗長化も達成して安定化 • だんだん運用が・・・ PHP • セッションレプリケーションを自前で書く事になる • 大体のサイトはココ迄で事足りる 19
  • 20. クラスタ化の始まり WEBクラスタ+DB 構成 • 並列化によりPHPロジックのボトルネックを克服 • 同時にWEBサーバの冗長化も達成して安定化 • だんだん運用が・・・ PHP • セッションレプリケーションを自前で書く事になる • 大体のサイトはココ迄で事足りる 終焉 • DBが悲鳴を上げ始める • キャッシュDB(memcachedなど)導入は延命治療に過ぎません 20
  • 21. クラスタ化の始まり インターネット インターネット セッション DB DBサーバ DB ボトルネック 21
  • 22. クラスタ化の始まり インターネット インターネット セッション DB キャッシュ DB DBサーバ DB ボトルネック 22
  • 26. クラスタ化の始まり(並行処理) WEBクラスタ+DB 構成 • 単一リクエストの処理速度が頭打ち・・・ • 多くの処理が必要な複雑なページではレスポンスが確保できない • ポータルTOPページや、最初は非表示でJS制御するページなど PHP • そもそもPHPはコンパイル型の言語より処理能力が低い • PHPは並行処理が難しい(ワーカスレッドで解決できない) 26
  • 27. クラスタ化の始まり(並行処理) WEBクラスタ+DB 構成 • 単一リクエストの処理速度が頭打ち・・・ • 多くの処理が必要な複雑なページではレスポンスが確保できない • ポータルTOPページや、最初は非表示でJS制御するページなど PHP • そもそもPHPはコンパイル型の言語より処理能力が低い • PHPは並行処理が難しい(ワーカスレッドで解決できない) 終焉 • レスポンスが遅いよ~~ • というかPHPはここ迄の規模をスコープしてない気がする・・・ 27
  • 28. クラスタ化の始まり(並行処理) インターネット インターネット セッション DB キャッシュ DB ボトルネック ボトルネック ボトルネック DBサーバ DB 28
  • 30. APIクラスタ インターネット インターネット セッション DB キャッシュ DB API API API DBサーバ DB 30
  • 31. APIクラスタ API API API API API API API API API API 31
  • 32. APIクラスタ WEBクラスタ+APIクラスタ+DB 構成 • ロジック部分を切り出しAPI化した形 • 処理の共通化も同時に実施でき開発効率UP • WEBサーバの冗長化、ロジック並列化&冗長化を実現 PHPでやるの? • PHPで非同期リクエストは一般的で無い(curl_multiとか?) • Javaなどでは一般的な構成(SOAP、JSONなど) • フレームワークを使っててもレンダリングエンジンしか残らない? 32
  • 33. APIクラスタ WEBクラスタ+APIクラスタ+DB 構成 • ロジック部分を切り出しAPI化した形 • 処理の共通化も同時に実施でき開発効率UP • WEBサーバの冗長化、ロジック並列化&冗長化を実現 PHPでやるの? • PHPで非同期リクエストは一般的で無い(curl_multiとか?) • Javaなどでは一般的な構成(SOAP、JSONなど) • フレームワークを使っててもレンダリングエンジンしか残らない? 終焉 • DBの限界まではイケるでしょう 33
  • 34. APIクラスタ インターネット インターネット セッション DB キャッシュ DB API API API DBサーバ DB ボトルネック 34
  • 35. 分散DB 35
  • 36. 分散DB インターネット インターネット セッション DB API API API 分散 分散 分散 分散 DB DB DB DB 36
  • 37. 分散DB WEBクラスタ+APIクラスタ+分散DB 構成 • MongoDB , Cassandra , Redis, Hibari など • 極端なサーバ数じゃなければこれで大丈夫 とことんPHP • かなり大規模なサイトの話 • KVSや分散DBのORMなど殆ど無い 37
  • 38. 分散DB WEBクラスタ+APIクラスタ+分散DB 構成 • MongoDB , Cassandra , Redis, Hibari など • 極端なサーバ数じゃなければこれで大丈夫 とことんPHP • かなり大規模なサイトの話 • KVSや分散DBのORMなど殆ど無い 終焉 • C10K問題(コネクション数の爆発) Apache(100プロセス×10サーバ)×API (100プロセス×10サーバ)= 100万コネクション 38
  • 39. 分散DB インターネット インターネット セッション DB ボトルネック API API API 分散 分散 分散 分散 DB DB DB DB 39
  • 40. C10K 40
  • 41. C10K インターネット インターネット セッション DB WEB WEB WEB Gateway API API API 分散 分散 分散 分散 DB DB DB DB 41
  • 42. C10K WEBクラスタ+Gateway+APIクラスタ+分散DB 構成 • Gateway導入によってコネクション数を削減 • GatewayはWebサーバ毎に設置しても十分効果的 • API → 分散DBでも同様(MongoDBならばShardingで解決) とことんPHP • ゲートウェイ実装 NIO & Pipelining が理想 42
  • 43. C10K WEBクラスタ+Gateway+APIクラスタ+分散DB 構成 • Gateway導入によってコネクション数を削減 • GatewayはWebサーバ毎に設置しても十分効果的 • API → 分散DBでも同様(MongoDBならばShardingで解決) とことんPHP • ゲートウェイ実装 NIO & Pipelining が理想 終焉 • 運用が破綻する     各種APIサーバの管理は大変そう • システムのある限り、また新たなC10Kがどこかに・・・ 43
  • 44. C10K インターネット インターネット セッション DB WEB WEB WEB Gateway API API API 分散 分散 分散 分散 DB DB DB DB 44
  • 46. そしてクラウドへ(イメージ) インターネット インターネット Controller WEB WEB View Model API API 分散 分散 分散 分散 DB DB DB DB 46
  • 47. そしてクラウドへ WEBクラウド+APIクラウド+分散DB 構成 • WEBクラウド、APIクラウド、の各ホストの事を考えたくない • WEBクラウド→APIクラウドの通信経路をどう解決するか? PHP • PHPでもクラウド出来るぜ!!てきな・・・ 懸念 • 分散DBはどうしよう? • 何処かのC10K • ネットワークインフラの限界はあるのでそっちはそっちで頑張る 47
  • 49. PHPクラウドへ クラウド化への課題 • WEBクラウド→APIクラウドの通信経路をどう解決するか? • WEBクラウド→APIクラウドの非同期並列リクエスト • ゲートウェイ(C10K対策) • レンダリング(テンプレートエンジン)はどうするか? • 分散DBの選定 • 運用面 49
  • 50. PHPクラウドへ クラウド化への課題 • WEBクラウド→APIクラウドの通信経路をどう解決するか? • WEBクラウド→APIクラウドの非同期並列リクエスト • ゲートウェイ(C10K対策) • レンダリング(テンプレートエンジン)はどうするか? • 分散DBの選定 • 運用面 50
  • 51. PHPクラウドへ WEBクラウド→Zookeeper→APIクラウド WEBクラウド→APIクラウドの通信経路をどう解決するか? • ZookeeperでAPIクラウドのノード管理を行う Zookeeper • プロセス監視と有効プロセス一覧の提供、通知ができる • プロセスが死亡した場合、自動的に一覧からも削除される • ネームサーバと同様の使い方が可能 /API • 数千を超えるノード監視ができる |- API1 | |- node1 • Zookeeper自身もクラスタ構成 | |- node2 | -API2 |- node3 |- node4 51
  • 52. PHPクラウドへ インターネット インターネット Controller WEB WEB Zookeeper View Model API API 分散 分散 分散 分散 DB DB DB DB 52
  • 53. PHPクラウドへ クラウド化への課題 • WEBクラウド→APIクラウドの通信経路をどう解決するか? • WEBクラウド→非同期並列リクエスト • ゲートウェイ(C10K対策) • レンダリング(テンプレートエンジン)はどうするか? • 分散DBの選定 • 運用面 53
  • 54. PHPクラウドへ WEBクラウド→並行リクエスト→APIクラウド ØMQで容易に実現できる。(バランシング込み) ØMQ (zoeromq) • 非常に高速(length-value データ構造で高効率) • 特にデバイス(Gatewayで利用)はCと同速度(extention内で完結) • N vs M 通信が簡潔に記述できる • 非同期通信(並行処理)が可能 • リコネクト、リトライ、キューイングは勿論自動 • 柔軟な通信配線が可能 • 1メッセージがマルチパート 54
  • 55. PHPクラウドへ ØMQ (zoeromq) class GatewayDaemon { public function __construct($frontDSN,$backDSNs){ $this->frontDSN = $frontDSN; $this->backDSNs = $backDSNs; $this->zmqCtx = new ZMQContext(); $this->zmqSockFront = new ZMQSocket($this->zmqCtx, ZMQ::SOCKET_XREP); $this->zmqSockBack = new ZMQSocket($this->zmqCtx, ZMQ::SOCKET_XREQ); } public function main(){ $this->zmqSockFront->bind($this->frontDSN); foreach($this->backDSNs as $backDSN ) { $this->zmqSockBack->connect($backDSN); } new ZMQDevice(ZMQ::DEVICE_QUEUE,$this->zmqSockFront,$this->zmqSockBack); } } 55
  • 56. PHPクラウドへ インターネット インターネット Controller WEB WEB φMQ Zookeeper View Model API API φMQ φMQ 分散 分散 分散 分散 DB DB DB DB 56
  • 57. PHPクラウドへ クラウド化への課題 • WEBクラウド→APIクラウドの通信経路をどう解決するか? • WEBクラウド→非同期並列リクエスト • ゲートウェイ(C10K対策) • レンダリング(テンプレートエンジン)はどうするか? • 分散DBの選定 • 運用面 57
  • 58. PHPクラウドへ ClearSilver • Viewでは余計な仕事はしたくない人向け • 高速でシンプルなレンダリングエンジン(C言語) • if / else , for , function call 辺りまでなら十分 <?cs if: S.wiki.login.name ?> <a href="/wiki/default/a/login">Logout</a> <?cs else ?> <a href="/wiki/default/a/signup">Sign up</a> <?cs /if ?> 58
  • 59. PHPクラウドへ クラウド化への課題 • WEBクラウド→APIクラウドの通信経路をどう解決するか? • WEBクラウド→非同期並列リクエスト • ゲートウェイ(C10K対策) • レンダリング(テンプレートエンジン)はどうするか? • 分散DBの選定 • 運用面 59
  • 60. PHPクラウドへ MongoDB • C++で開発された高速DB (NoSQL) • 大量処理に特化 • トランザクション不可 • リレーション不可 • Map/Reduce • Sharding (パーテショニング) • ドキュメントベース • 1000台規模を組む事ができ、勿論C10Kも対応(MongoOS) • Readが速い!=WEB向き 60
  • 61. PHPクラウドへ クラウド化への課題 • WEBクラウド→APIクラウドの通信経路をどう解決するか? • WEBクラウド→非同期並列リクエスト • ゲートウェイ(C10K対策) • レンダリング(テンプレートエンジン)はどうするか? • 分散DBの選定 • 運用面 61
  • 62. PHPクラウドへ Capistrano • Ruby製のデプロイツール • Railsではお馴染み • ターゲットサーバにはSSHしか求めない(特別な準備が必要ない) • シェルベース処理ならなんでも来い Capistranoサーバ オペレーション(on ssh) サーバ サーバ サーバ サーバ 62
  • 63. そしてクラウドへ クラウド化への課題 • WEBクラウド→APIクラウドの通信経路をどう解決するか? • WEBクラウド→非同期並列リクエスト • ゲートウェイ(C10K対策) • レンダリング(テンプレートエンジン)はどうするか? • 分散DBの選定 • 運用面 63
  • 66. Cockatoo 特徴 • PHP製WEBフレームワーク • シングルポイントを排除 – どのサーバ(1台)が落ちても即時運用は発生しない • 並行処理でリクエストを高速化 • WEB→APIの呼び出しはRPCインターフェスで隠蔽 • レイアウト(ページの構成)情報を外部ストレージ化(MongoDB) • 開発効率重視 – CMSを搭載(WebUI) – 配置周り(表示位置など)のHTML/CSSは記述不要(CMSで吸収) – マウス操作のレイアウトエディタ(wysiwyg) – All in one 環境 Apache(php)+ClearSilver • Ajax,plain-text,バイナリをサポート 66
  • 67. アプリケーション&デバイス /wiki /news /news Cockatoo-web RequestParser DeviceSelector LayoutDB LayoutDB device device device (default) (android) (default) SessionDB SessionDB Cockatoo-gateway Cockatoo-action Cockatoo-action ContentsDB Application Application ContentsDB ( wiki ) zookeeper ( yslowview ) Cockatooには複数の独立したアプリケーションが同居できる アプリケーションには複数の   デバイス(同一URLでのコンテンツ出し分け)を設定できる これらの振り分け処理はRequestParser,DeviceSelectorで定義 67
  • 69. Page / Layout / Components Layout 1:n Components 69
  • 70. 一般的な3層アーキテクチャ Internet Internet Request WEB WEB Call APIs API API Retrieve data DB 70
  • 71. Cockatoo概要 Internet Internet Request SessionDB LayoutDB Gat page layout MongoDB WEB WEB ReplSet MongoDB ReplSet Get components Call APIs Memcache API API Retrieve data ContentsDB MongoDB ReplSet 71
  • 72. Cockatoo概要 Internet Internet Request SessionDB LayoutDB Gat page layout MongoDBはREADには強く MongoDB WEBアクセスに十分耐える WEB WEB ReplSet MongoDB 性能がある。 ReplSet Get components しかしWRITEそれ程でも無いCall APIs Memcache セッションなどは API Memcachedの方が無難 API Retrieve data ContentsDB MongoDB ReplSet 72
  • 73. Cockatoo概要 Internet Internet Request SessionDB LayoutDB Gat page layout MongoDB WEB WEB ReplSet MongoDB ReplSet Get components Call APIs Memcache API API Zookeeper Retrieve data ContentsDB MongoDB ReplSet 73
  • 74. Cockatoo概要 Internet Internet Request SessionDB LayoutDB Gat page layout MongoDB WEB WEB ReplSet MongoDB ReplSet Get components Call APIs Memcache API API Zookeeper Solr Retrieve data ContentsDB MongoDB ReplSet 74
  • 75. Cockatoo概要 Developer HTML markup LayoutDB Set page layout & Deploy API API settings CMS Batch servers MongoDB ReplSet Set components Insert Data API servers API servers Set static contents ContentsDB MongoDB ReplSet 75
  • 80. Cockatooクラスタ構成(サービス環境) Load Balancer HTTP WEB cloud WEB cloud Web server Web server Web server ClearSilver apache ClearSilver apache ClearSilver apache LayoutDB(replset) cockatoo-web cockatoo-web cockatoo-web φMQ Mongo server φMQ page info Mongo server φMQ Mongo server φMQ php φMQ php MongoDB MongoDB φMQ php cockatoo-gateway cockatoo-gateway MongoDB cockatoo-gateway φMQ φMQ φMQ session data API info API cloudAPI call (RPC) SessionDB API cloud API server API server Memcached server API server Memcached server φMQ php Memcached server φMQ php φMQ php cockatoo-action cockatoo-action session data Memcache Memcache cockatoo-action Memcache business logics query regist ContentsDB(replset) zookeeper cluster Mongo server Zookeeper server Mongo server Zookeeper server Mongo server Zookeeper server MongoDB MongoDB MongoDB zookeeper 80
  • 81. Cockatooスタンドアロン構成(開発環境) Local machine Blowser HTTP apache LayoutDB ClearSilver cockatoo-web info page API call (function call) Filesystem cockatoo-action session data business logics SessionDB query session data ContentsDB Filesystem Filesystem API呼び出しのRPC部分をショートカット(zmq,zookeeper要らない) ストレージ処理も同様に簡素化(Mongo,memcached要らない) 81
  • 82. クラスタ構成 開発環境 Load Balancer Local machine HTTP Blowser WEB cloud WEB cloud HTTP Web server Web server Web server ClearSilver ClearSilver apache apache LayoutDB ClearSilver apache LayoutDB(replset) ClearSilver apache cockatoo-web cockatoo-web cockatoo-web φMQ Mongo server cockatoo-web info page φMQ page info Mongo server φMQ Mongo server φMQ php φMQ php MongoDB MongoDB Filesystem φMQ php API call (function call) cockatoo-gateway cockatoo-gateway MongoDB cockatoo-gateway φMQ φMQ φMQ session data cockatoo-action session data business logics API info SessionDB API call (RPC) API cloud SessionDB query session data API cloud API server API server Memcached server ContentsDB API server Memcached server φMQ php Memcached server φMQ php φMQ cockatoo-action php Memcache Filesystem session data cockatoo-action cockatoo-action Memcache Memcache Filesystem business logics Deploy query Export regist ContentsDB(replset) zookeeper cluster Import Tools Mongo server Zookeeper server Mongo server Zookeeper server Mongo server Zookeeper server Packaging MongoDB MongoDB MongoDB zookeeper Capkg 82
  • 84. Cockatooシーケンス シーケンス リクエスト 事前Action 並列Action 事後Action レンダリング レスポンス 84

Hinweis der Redaktion

  1. 一旦、 DB の問題はここでおいて置いて、もう一つの問題に触れてみます。
  2. とはいえ 例えばこの構成なら、 Web サーバ1台のコネクション数は 10 万になります。 Linux ならば既に 6 万 5000 を超えて、破綻してますね。 ココまで行かなくても netstat を打って ESTABLISH として、それだけ出てくるという事です 万単位になる前に何とかしたい所です。
  3. Zookeeper はネームサーバのように振舞います 名前解決をしつつ、管理中のプロセスが死んだら自動的に振り分けから削除される寸法 ディレクトリライクなノード管理が出来るので、 API の種類が増えても別のディレクトリ( API2 )を掘ってノードを並べるだけです
  4. 恐らく本家のチュートリアルを見て貰うのが一番良いのですが非常にシンプルに書けます 表側と裏側のソケットを作ってデバイスに渡すだけ。 これで懸案だったゲートウェイが完成 非同期リクエストも問題なく出来るので其方も解決
  5. さて、これで目指す所と、その準備は整いました
  6. さて、これで目指す所と、その準備は整いました
  7. さて、これで目指す所と、その準備は整いました
  8. さて、これで目指す所と、その準備は整いました