Ruby on Rails のクラウドで
 サービスを立ち上げる

    株式会社シーイーシー
はじめに
●   会社紹介と自己紹介
●   インフラから見たクラウドの特性
       –   クラウドと仮想化
       –   IaaS 、 PaaS 、 SaaS と仮想化
●   クラウドのタイプの選択
●
    Ruby on Rails の PaaS
●   弊社のサービス

2011-09-24                              Page 2
Ruby on Rails のクラウドでサービスを立ち上げる
会社紹介
●
    株式会社シーイーシー
     –   設立年月日: 1968 年 2 月 24 日
     –   資本金:  65 億 8 千 6 百万円
     –   売上高:  408 億 8 千 7 百万円(平成 23 年 1 月期)
     –   従業員数: 2,840 名(平成 23 年 4 月 1 日現在)
     –   事業内容:
          ●
              PROVEQ 事業
              ( 診断/検証・認証/品質システムサポートサービス )
          ●
              PROFESSIONAL 事業
              ( プラットフォームインテグレーション/ IT マネジメント/
                データセンターサービス )
          ●
              PROSES(Professional System Effective Solution) 事業
              ( ビジネスソリューション/環境ソリューション/ネットソリューション/
                システムインテグレーション/生産物流改革ソリューション/
                ヘルスケアソリューションサービス )
          ●
              PROGRESS 事業
              ( ソフトウェア開発/マイグレーションサービス )
2011-09-24                                                        Page 3
Ruby on Rails のクラウドでサービスを立ち上げる
私について
●   ビルメンテナンス会社の社内 SE
      –   PC 導入、社内ネットワーク構築
      –   システム開発の超上流工程
      –   ユーザー教育
●   フリーのエンジニア
      –   個人で小規模システムの開発・導入支援
●   地方のベンチャー
      –   プログラマ
      –   インフラ SE
●   シーイーシーで新規事業
2011-09-24                         Page 4
Ruby on Rails のクラウドでサービスを立ち上げる
インフラから見たクラウドの特性(1)
                     クラウドと仮想化
●   仮想化の目的
  ハードウェアと見た目のハードウェア環境を分離することで、
       –   1 台のサーバーリソースを複数の環境で利用する
            ●
                リソースの効率的な利用
       –   複数のサーバーリソースを 1 つの環境で利用する
            ●
                キャパシティの向上
            ●
                可用性の向上
       –   見た目のハードウェア環境を共通化する
            ●
                環境の複製を容易にする
     これらを達成した環境がクラウド
2011-09-24                            Page 5
Ruby on Rails のクラウドでサービスを立ち上げる
インフラから見たクラウドの特性(2)
                    仮想化のおさらい
●   プラットフォーム仮想化
       –   ホスト OS 型
            ●   VMware Server 、 QEMU 、 Virutal PC など
       –   ハイパーバイザー
            ●
                Xen 、 KVM 、 VMware ESXi 、 Hyper-V など
       –   OS レベルの仮想化
            ●
                Virtuozzo 、 OpenVZ 、 Solaris コンテナなど
●   リソースレベルの仮想化・共有(仮想化とは違うが)
       –   クラスタ、 chroot 、ミドルウェアのマルチインスタンス
            など
2011-09-24                                             Page 6
Ruby on Rails のクラウドでサービスを立ち上げる
インフラから見たクラウドの特性(3)
           IaaS 、 PaaS 、 SaaS と仮想化
●
    IaaS はハイパーバイザー
       – 環境ごとに個別の OS が起動
            ●   環境ごとに OS を選択できる。
            ●   オーバーヘッドが大きい(特に RAM やディスクアクセス)
●
    PaaS 、 SaaS はいろいろな方法の組み合わせ
      – AP 、 DB などのレイヤごとに最適な構成
            ●
                性能を得やすい
            ●   カスタマイズは困難(できないことも多い)
●
    PaaS 、 SaaS のプラットフォームが IaaS ということも
2011-09-24                                  Page 7
Ruby on Rails のクラウドでサービスを立ち上げる
インフラから見たクラウドの特性(4)
                    メリットとデメリット
                                 IaaS   PaaS   SaaS

  OS 、パッケージなどの自由度                ◎       △      ×
  性能の出しやすさ                       △       ◎      〇
  サービスとしての信頼性                    △       〇      ◎
  利用料金                           〇       △      ◎
  環境の構築                           ×      〇      -
  環境の保守                          〇       -      -
2011-09-24                                            Page 8
Ruby on Rails のクラウドでサービスを立ち上げる
クラウドのタイプの選択(1)
●   IaaS
       –OS やパッケージなどに依存するアプリケーション
          (基本的に何でも)
●
    PaaS
      – ( 軽量言語などによる ) 独自開発のアプリケーション
          (独自のサービス、カスタマイズしたアプリケーション
          など)
●
    SaaS
      – 定型的な Web サイトやアプリケーション
          (ブログ、 EC 、会計など定型の業務アプリケーション
          など)
2011-09-24                         Page 9
Ruby on Rails のクラウドでサービスを立ち上げる
クラウドのタイプの選択(2)
   自分で環境を構築したい?
   C などで高速なアプリケーションを開発したい?
   アプリケーションをカスタマイズしたい?
   特殊なライブラリを参照したい?
    → IaaS を使いましょう
   LL でサクッと作ってサクッとリリースしたい?
    → PaaS を使いましょう
   コーディングしたくない・・・
    → SaaS を使いましょう
2011-09-24                       Page 10
Ruby on Rails のクラウドでサービスを立ち上げる
Ruby on Rails の PaaS (1)
●   heroku
      – 世界最大の Ruby の PaaS
      – サードパーティーの KVS やストレージなどを柔軟に
           組み合わせられる
      – Java 、 Node.js など他の言語にも対応しはじめた
●
    MOGOK
      – IIJ が提供する Ruby の PaaS (今秋リリース予定)
      – IIJ の潤沢なネットワーク、サーバー群の中で稼働
           (国内からのアクセスがきわめて高速)

2011-09-24                              Page 11
Ruby on Rails のクラウドでサービスを立ち上げる
Ruby on Rails の PaaS (2)
●   その他
       Engine Yard
       –
        ( heroku と並ぶ Ruby on Rails の PaaS )
     – Cloud Foundry
        ( VMware が近く日本でも提供開始する PaaS )
     – Windows Azure
       など ...
●   そして、 RCloud


2011-09-24                                    Page 12
Ruby on Rails のクラウドでサービスを立ち上げる
RCloud の論理構成
                                                     ロードバランサークラスタ
                 Load Balancer 1   Load Balancer 2      CentOS 5.5
                                                         Nginx 0.8
                                                         Heartbeat



  Application 1      Application 2      Application 3      ・・・



        MySQL 1        MySQL 2               NFS 1        NFS 2

            データベースクラスタ                           ストレージクラスタ
              CentOS 5.5                           CentOS 5.5
              MySQL 5.5                             Heartbeat
               Heartbeat                          このほかに、内部用の
2011-09-24                                        SMTP 、 DNS 、 NTP など   Page 13
Ruby on Rails のクラウドでサービスを立ち上げる
RCloud で稼働しているサービス
●   ロケーションメッセージングサービス
    http://cocorat.com/
●   携帯マーケティングソリューション
    http://www.mobsym.jp/
●
    ここらっと待ち受けスタジオ
    http://cocorat.com/studio
●   伝統工芸のスペシャルサイト
    http://japancraft.jp/
●
    フォトコミュニケーションサービス「 Party Photo Clip 」
    http://photoclip.me/

●
    2008 年からこれらのサービスとともに構築
2011-09-24                                 Page 14
Ruby on Rails のクラウドでサービスを立ち上げる
サービスを開始するまでの流れ
●   環境設定の申し込み
       –   Ruby と Rails のバージョン
       –   必要な gem
       –   コンテナの個数( 10 プロセス / コンテナ)
       –   データベースのサイズ
●   ソースのアップロード
       –   Git で適宜アップロード(現在はメールで受け付け)
       –   必要に応じて環境設定情報を更新
●   デプロイ
2011-09-24                              Page 15
Ruby on Rails のクラウドでサービスを立ち上げる
Ruby と Rails 、 gem とライブラリ
●
    Ruby 、 Rails 、 rubygems のバージョン
       –   rubygems のバージョンは、 Ruby と Rails のバージョンによって
●
    Native Extension が作られる gem
       –   mysql            # ldd /opt/lib/ruby/gems/1.8/gems/mysql-2.8.1/lib/mysql_api.so
                                  libmysqlclient.so.12 => /usr/sfw/lib/libmysqlclient.so.12
           (Solaris の場合 )           … 標準の MySQL のライブラリを参照してしまっているため問題が発生する
                            # cd /opt/coolstack/mysql_32bit/lib/mysql/
       –   libxml           # ln -s libmysqlclient.so.16.0.0 libmysqlclient.so.12
                            # gem install mysql --no-rdoc --no-ri -- --with-mysql-config=/opt/coolstack/mysql_32bit/bin/mysql_config
       –   rmagick
                            # gem install libxml-ruby -v 0.7.0

                            # cd /var/tmp/ImageMagick-6.6.6-10
                            # ./configure --prefix=/opt/ImageMagick --disable-static --with-modules --without-perl --without-magick-
                            plus-plus --with-quantum-depth=8 CC=/usr/sfw/bin/gcc LDFLAGS='-L/opt/coolstack/lib -L/usr/sfw/lib
                            -R/opt/coolstack/lib -R/usr/sfw/lib' CPPFLAGS='-I/opt/coolstack/include -I/usr/sfw/include'
                            # gmake
                            # gmake install
                            # gem install rmagick --no-rdoc --no-ri

2011-09-24                                                                                                                       Page 16
Ruby on Rails のクラウドでサービスを立ち上げる
サービスごとの課題と対策(一部)
●   ここらっと
       –   ページの表示に時間がかかる
            ●   データベースのチューニング
            ●
                find_by_sql で SQL を最適化
●
    Party Photo Clip
      – 写真の通信にプロセスが占有される
            ●
                ロードバランサーによるバッファリング
            ●
                アップロード用のプロキシ
       –   スモールスタートから急拡大に備えたい
            ●   従来通りのスケールアウト可能な構成
            ●
                サーバー間で共有可能なストレージ
2011-09-24                               Page 17
Ruby on Rails のクラウドでサービスを立ち上げる
終わりに
●   まだまだ発展途上のクラウド
       –   目標は、 Ruby on Rails 環境の性能と柔軟性 No.1
       –   Web の管理画面等は準備中です


●   お問い合わせ
       –   株式会社シーイーシー
             第一ソリューションサービス事業部 ネットソリューション部
             廣田 哲也
       –   Mail: t-hirota@cec-ltd.co.jp または contact@rcloud.jp
       –   Twitter(@rcloud_jp) / Facebook ページ (RCloud) も用意しました


2011-09-24                                                       Page 18
Ruby on Rails のクラウドでサービスを立ち上げる

クラウドカンファレンスIn静岡 r cloud

  • 1.
    Ruby on Railsのクラウドで サービスを立ち上げる 株式会社シーイーシー
  • 2.
    はじめに ● 会社紹介と自己紹介 ● インフラから見たクラウドの特性 – クラウドと仮想化 – IaaS 、 PaaS 、 SaaS と仮想化 ● クラウドのタイプの選択 ● Ruby on Rails の PaaS ● 弊社のサービス 2011-09-24 Page 2 Ruby on Rails のクラウドでサービスを立ち上げる
  • 3.
    会社紹介 ● 株式会社シーイーシー – 設立年月日: 1968 年 2 月 24 日 – 資本金: 65 億 8 千 6 百万円 – 売上高: 408 億 8 千 7 百万円(平成 23 年 1 月期) – 従業員数: 2,840 名(平成 23 年 4 月 1 日現在) – 事業内容: ● PROVEQ 事業 ( 診断/検証・認証/品質システムサポートサービス ) ● PROFESSIONAL 事業 ( プラットフォームインテグレーション/ IT マネジメント/ データセンターサービス ) ● PROSES(Professional System Effective Solution) 事業 ( ビジネスソリューション/環境ソリューション/ネットソリューション/ システムインテグレーション/生産物流改革ソリューション/ ヘルスケアソリューションサービス ) ● PROGRESS 事業 ( ソフトウェア開発/マイグレーションサービス ) 2011-09-24 Page 3 Ruby on Rails のクラウドでサービスを立ち上げる
  • 4.
    私について ● ビルメンテナンス会社の社内 SE – PC 導入、社内ネットワーク構築 – システム開発の超上流工程 – ユーザー教育 ● フリーのエンジニア – 個人で小規模システムの開発・導入支援 ● 地方のベンチャー – プログラマ – インフラ SE ● シーイーシーで新規事業 2011-09-24 Page 4 Ruby on Rails のクラウドでサービスを立ち上げる
  • 5.
    インフラから見たクラウドの特性(1) クラウドと仮想化 ● 仮想化の目的   ハードウェアと見た目のハードウェア環境を分離することで、 – 1 台のサーバーリソースを複数の環境で利用する ● リソースの効率的な利用 – 複数のサーバーリソースを 1 つの環境で利用する ● キャパシティの向上 ● 可用性の向上 – 見た目のハードウェア環境を共通化する ● 環境の複製を容易にする  これらを達成した環境がクラウド 2011-09-24 Page 5 Ruby on Rails のクラウドでサービスを立ち上げる
  • 6.
    インフラから見たクラウドの特性(2) 仮想化のおさらい ● プラットフォーム仮想化 – ホスト OS 型 ● VMware Server 、 QEMU 、 Virutal PC など – ハイパーバイザー ● Xen 、 KVM 、 VMware ESXi 、 Hyper-V など – OS レベルの仮想化 ● Virtuozzo 、 OpenVZ 、 Solaris コンテナなど ● リソースレベルの仮想化・共有(仮想化とは違うが) – クラスタ、 chroot 、ミドルウェアのマルチインスタンス など 2011-09-24 Page 6 Ruby on Rails のクラウドでサービスを立ち上げる
  • 7.
    インフラから見たクラウドの特性(3) IaaS 、 PaaS 、 SaaS と仮想化 ● IaaS はハイパーバイザー – 環境ごとに個別の OS が起動 ● 環境ごとに OS を選択できる。 ● オーバーヘッドが大きい(特に RAM やディスクアクセス) ● PaaS 、 SaaS はいろいろな方法の組み合わせ – AP 、 DB などのレイヤごとに最適な構成 ● 性能を得やすい ● カスタマイズは困難(できないことも多い) ● PaaS 、 SaaS のプラットフォームが IaaS ということも 2011-09-24 Page 7 Ruby on Rails のクラウドでサービスを立ち上げる
  • 8.
    インフラから見たクラウドの特性(4) メリットとデメリット IaaS PaaS SaaS OS 、パッケージなどの自由度 ◎ △ × 性能の出しやすさ △ ◎ 〇 サービスとしての信頼性 △ 〇 ◎ 利用料金 〇 △ ◎ 環境の構築 × 〇 - 環境の保守 〇 - - 2011-09-24 Page 8 Ruby on Rails のクラウドでサービスを立ち上げる
  • 9.
    クラウドのタイプの選択(1) ● IaaS –OS やパッケージなどに依存するアプリケーション (基本的に何でも) ● PaaS – ( 軽量言語などによる ) 独自開発のアプリケーション (独自のサービス、カスタマイズしたアプリケーション など) ● SaaS – 定型的な Web サイトやアプリケーション (ブログ、 EC 、会計など定型の業務アプリケーション など) 2011-09-24 Page 9 Ruby on Rails のクラウドでサービスを立ち上げる
  • 10.
    クラウドのタイプの選択(2) 自分で環境を構築したい? C などで高速なアプリケーションを開発したい? アプリケーションをカスタマイズしたい? 特殊なライブラリを参照したい?  → IaaS を使いましょう LL でサクッと作ってサクッとリリースしたい?  → PaaS を使いましょう コーディングしたくない・・・  → SaaS を使いましょう 2011-09-24 Page 10 Ruby on Rails のクラウドでサービスを立ち上げる
  • 11.
    Ruby on Railsの PaaS (1) ● heroku – 世界最大の Ruby の PaaS – サードパーティーの KVS やストレージなどを柔軟に 組み合わせられる – Java 、 Node.js など他の言語にも対応しはじめた ● MOGOK – IIJ が提供する Ruby の PaaS (今秋リリース予定) – IIJ の潤沢なネットワーク、サーバー群の中で稼働 (国内からのアクセスがきわめて高速) 2011-09-24 Page 11 Ruby on Rails のクラウドでサービスを立ち上げる
  • 12.
    Ruby on Railsの PaaS (2) ● その他 Engine Yard – ( heroku と並ぶ Ruby on Rails の PaaS ) – Cloud Foundry ( VMware が近く日本でも提供開始する PaaS ) – Windows Azure など ... ● そして、 RCloud 2011-09-24 Page 12 Ruby on Rails のクラウドでサービスを立ち上げる
  • 13.
    RCloud の論理構成 ロードバランサークラスタ Load Balancer 1 Load Balancer 2 CentOS 5.5 Nginx 0.8 Heartbeat Application 1 Application 2 Application 3 ・・・ MySQL 1 MySQL 2 NFS 1 NFS 2 データベースクラスタ ストレージクラスタ CentOS 5.5 CentOS 5.5 MySQL 5.5 Heartbeat Heartbeat このほかに、内部用の 2011-09-24 SMTP 、 DNS 、 NTP など Page 13 Ruby on Rails のクラウドでサービスを立ち上げる
  • 14.
    RCloud で稼働しているサービス ● ロケーションメッセージングサービス http://cocorat.com/ ● 携帯マーケティングソリューション http://www.mobsym.jp/ ● ここらっと待ち受けスタジオ http://cocorat.com/studio ● 伝統工芸のスペシャルサイト http://japancraft.jp/ ● フォトコミュニケーションサービス「 Party Photo Clip 」 http://photoclip.me/ ● 2008 年からこれらのサービスとともに構築 2011-09-24 Page 14 Ruby on Rails のクラウドでサービスを立ち上げる
  • 15.
    サービスを開始するまでの流れ ● 環境設定の申し込み – Ruby と Rails のバージョン – 必要な gem – コンテナの個数( 10 プロセス / コンテナ) – データベースのサイズ ● ソースのアップロード – Git で適宜アップロード(現在はメールで受け付け) – 必要に応じて環境設定情報を更新 ● デプロイ 2011-09-24 Page 15 Ruby on Rails のクラウドでサービスを立ち上げる
  • 16.
    Ruby と Rails、 gem とライブラリ ● Ruby 、 Rails 、 rubygems のバージョン – rubygems のバージョンは、 Ruby と Rails のバージョンによって ● Native Extension が作られる gem – mysql # ldd /opt/lib/ruby/gems/1.8/gems/mysql-2.8.1/lib/mysql_api.so libmysqlclient.so.12 => /usr/sfw/lib/libmysqlclient.so.12 (Solaris の場合 ) … 標準の MySQL のライブラリを参照してしまっているため問題が発生する # cd /opt/coolstack/mysql_32bit/lib/mysql/ – libxml # ln -s libmysqlclient.so.16.0.0 libmysqlclient.so.12 # gem install mysql --no-rdoc --no-ri -- --with-mysql-config=/opt/coolstack/mysql_32bit/bin/mysql_config – rmagick # gem install libxml-ruby -v 0.7.0 # cd /var/tmp/ImageMagick-6.6.6-10 # ./configure --prefix=/opt/ImageMagick --disable-static --with-modules --without-perl --without-magick- plus-plus --with-quantum-depth=8 CC=/usr/sfw/bin/gcc LDFLAGS='-L/opt/coolstack/lib -L/usr/sfw/lib -R/opt/coolstack/lib -R/usr/sfw/lib' CPPFLAGS='-I/opt/coolstack/include -I/usr/sfw/include' # gmake # gmake install # gem install rmagick --no-rdoc --no-ri 2011-09-24 Page 16 Ruby on Rails のクラウドでサービスを立ち上げる
  • 17.
    サービスごとの課題と対策(一部) ● ここらっと – ページの表示に時間がかかる ● データベースのチューニング ● find_by_sql で SQL を最適化 ● Party Photo Clip – 写真の通信にプロセスが占有される ● ロードバランサーによるバッファリング ● アップロード用のプロキシ – スモールスタートから急拡大に備えたい ● 従来通りのスケールアウト可能な構成 ● サーバー間で共有可能なストレージ 2011-09-24 Page 17 Ruby on Rails のクラウドでサービスを立ち上げる
  • 18.
    終わりに ● まだまだ発展途上のクラウド – 目標は、 Ruby on Rails 環境の性能と柔軟性 No.1 – Web の管理画面等は準備中です ● お問い合わせ – 株式会社シーイーシー 第一ソリューションサービス事業部 ネットソリューション部 廣田 哲也 – Mail: t-hirota@cec-ltd.co.jp または contact@rcloud.jp – Twitter(@rcloud_jp) / Facebook ページ (RCloud) も用意しました 2011-09-24 Page 18 Ruby on Rails のクラウドでサービスを立ち上げる