inside of mogok

62
Inside of MOGOK [email protected] 13220日水曜日

Upload: iij

Post on 28-May-2015

2.957 views

Category:

Documents


4 download

DESCRIPTION

kanazawa.rbの勉強会で使用した資料です。IIJが提供するRuby PaaSであるMOGOKの仕組みについて解説しています。MOGOKのサービスサイトはこちら(http://mogok.jp/)です。

TRANSCRIPT

Page 2: Inside of MOGOK

自己紹介• 株式会社インターネットイニシアティブプラットフォームサービス部プラットフォーム開発課阿部 博

• なぜkanazawa.rbに?

• 出身がJAISTだから...楽しそうだから :-)

• 経歴とか謎だからbeerupとかで詳しく聞いて下さい

• 英文科卒?ブラック企業経験者?農業?合気道?

• 何してる人

• クラウドという物を作ったり壊したり

• IIJ GIO, MOGOK, コンテナ型DC, CloudStack, SDN

13年2月20日水曜日

Page 3: Inside of MOGOK

目次

• What’s PaaS?

• Inside of MOGOK

• MOGOKの今後

13年2月20日水曜日

Page 4: Inside of MOGOK

What’s PaaS?

13年2月20日水曜日

Page 5: Inside of MOGOK

What’s MOGOK

• http://mogok.jp/

13年2月20日水曜日

Page 6: Inside of MOGOK

Before MOGOK

• What’s Cloud?

• IaaS

• PaaS

• SaaS

• XaaS

13年2月20日水曜日

Page 7: Inside of MOGOK

What’s IaaS

• Amazon Web Service

• IIJ GIO

• OpenStack

• CloudStack

• ....

13年2月20日水曜日

Page 8: Inside of MOGOK

What’s PaaS

• PaaSの特徴

• IaaSよりも運用管理が楽

• 開発に注力ができる

• お手軽なデプロイ方法

13年2月20日水曜日

Page 9: Inside of MOGOK

PaaSの二つの面

IaaS

SaaS

PaaS

WebデザイナーWebプログラマ

インフラエンジニアミドルウェアプログラマ

PaaSの幅は伸縮する?

SaaSに近い人が気にかけたい実際PaaSの範囲

IaaSに近い人が気にかけたい実際のPaaSの範囲

13年2月20日水曜日

Page 10: Inside of MOGOK

有名なPaaS

• Heroku

• EngineYard

• Google App Engine

• Salesforce

• Sqale(papperboy&co.)

• C4SA(Nifty)

• eXcale(TIS)

• Cloudn PaaS(Ncom)

• MOGOK(IIJ)

13年2月20日水曜日

Page 11: Inside of MOGOK

PaaSの市場• IDCの予想

• 国内PaaS市場(2012年)

• 前年比63.4%増の263億円と予想

• 2016年の市場規模で1,070億円

• ちなみにIaaS市場は...(2012年)

• 前年比49.6%増の316億円と予想

• 2016年の市場規模で1,035億円

13年2月20日水曜日

Page 12: Inside of MOGOK

What’s MOGOK

• IIJ GIO(IaaS)の上に構築されたPaaS

• IIJで自作したPaaS

• Ruby on RailsのPaaS

• MOGOK自体Rubyで開発されている

13年2月20日水曜日

Page 13: Inside of MOGOK

Why Ruby on Rails only?

• Railsのニーズが高まっている

• 他社のように多種多様な言語/フレームワークに走っても良いが...

• まずは1つの言語をしっかりと

• そもそもRubyアソシエーションに加盟しているIIJはRubyを応援する立場

13年2月20日水曜日

Page 14: Inside of MOGOK

Sales point of MOGOK• Easy to deploy

• 4ステップくらいでデプロイ可能

• Using own cloud

• IIJ GIOはすこぶる安定している

• Connected High Speed Backbone Network

• 弊社ISPなので...

• Minimum Network delay

• 太平洋超えるとやっぱり大変よねー

13年2月20日水曜日

Page 15: Inside of MOGOK

Inside of MOGOK

13年2月20日水曜日

Page 16: Inside of MOGOK

Inside of MOGOK

13年2月20日水曜日

Page 17: Inside of MOGOK

MOGOKシステムを考えるときのポイント

1. APIで結合されるシステム

2. 各種マスター

3. LXCを利用したユーザアプリケーション動作環境

4. ユーザアプリケーションへのリクエストルーティング

5. セキュリティ対策

6. 運用/監視

13年2月20日水曜日

Page 18: Inside of MOGOK

APIで結合されるシステム

13年2月20日水曜日

Page 19: Inside of MOGOK

APIで結合されるシステム(1)

• システムを作る時に取るアプローチ

• 疎結合?密結合?

• Ruby on Railsだけだと密でよし

• Webサーバ, Railsアプリ, DB

• 単純なものだと三層くらいの構成

13年2月20日水曜日

Page 20: Inside of MOGOK

APIで結合されるシステム(2)

• 複数のシステムが連携する場合には?

• MOGOKのシステムを構成するサーバ台数は...

• 合計66台くらい(冗長化しているので機能的には半数強)

• 密なシステムとして作り込むには難しい

• なぜってスケールアウトするホストが居るから

• 各ホスト同士の情報のやり取りは?

• APIを利用する

13年2月20日水曜日

Page 21: Inside of MOGOK

APIで結合されるシステム(3)

• MessagePack-RPCを利用する• APIの例

13年2月20日水曜日

Page 22: Inside of MOGOK

APIで結合されるシステム(4)

• で、APIって各ホストから他のホストを直に叩くの?

• それって密じゃね?• ってかメッシュ通信おきない?

• 台数が増えると破綻するよねー

• 破綻しない仕組みが必要

13年2月20日水曜日

Page 23: Inside of MOGOK

APIで結合されるシステム(4)

mailgw

appMaster

dbMaster

server1

server2

server3

MessagePack-RPC(メッシュ状態...orz)

13年2月20日水曜日

Page 24: Inside of MOGOK

APIで結合されるシステム(5)

• そこでPX

• Procedure Exchange

• 要はメッセージングルータ

• APIは「prefix + method」で呼ばれる

• mailgw.sendUserMail

• appMaster.listAppServer

• PXはprefixと各ホストのIPアドレスをbindする

• MessagePack-RPCのルーティングを行う

• 各ホストはPXへとAPIを投げ込むだけでよい

13年2月20日水曜日

Page 25: Inside of MOGOK

APIで結合されるシステム(5)

mailgw

appMaster

dbMaster

PX

server1

server2

server3

MessagePack-RPC(PXがdefault gateway状態)

mailgw.sendUserMail sendUserMail

appMaster.listAppServer listAppServer

13年2月20日水曜日

Page 26: Inside of MOGOK

各種マスターサーバ

13年2月20日水曜日

Page 27: Inside of MOGOK

各種マスターサーバ(1)

• MOGOKではスケールアウトするホスト群が居る

• アプリケーションサーバ

• DBサーバ

• Bundleサーバ

• logサーバ

• ユーザの数が増えればこの辺りのサーバを増やす

13年2月20日水曜日

Page 28: Inside of MOGOK

各種マスターサーバ(2)

• 増えていったホスト群はどう管理するのか?

• マスターが調停者になってホスト郡を管理する

• ホストの増減はマスターの責任• 故障等で利用できない場合の管理も含む

13年2月20日水曜日

Page 29: Inside of MOGOK

各種マスターサーバ(2)

master

server1 server2 server3 server4 serverN台数の増減

13年2月20日水曜日

Page 30: Inside of MOGOK

LXCを利用したユーザアプリ動作環境

13年2月20日水曜日

Page 31: Inside of MOGOK

LXCを利用したユーザアプリ動作環境(1)

• LXCについて

• Linux Container

• OpenVZの様なもの

• 完全仮想化ではなく一部リソースの共有

• chrootとjailなイメージ

• cgroupとnamespaceが主なテクノロジ

13年2月20日水曜日

Page 32: Inside of MOGOK

LXCを利用したユーザアプリ動作環境(2)

• LXCを使うポイント

• ユーザのアプリを隔離する

• 他のユーザへと悪さをさせない

• 動作するサーバ自体への悪さをさせない

• bundleインストールの悪さを防ぐ

• 動作するサーバ自体への悪さをさせない

• gitサーバでアプリを保存できるので、バイナリプログラムが動作しても悪さをさせない

13年2月20日水曜日

Page 33: Inside of MOGOK

LXCを利用したユーザアプリ動作環境(3)

• MOGOKでは以下でLXCを使っている

• アプリケーションサーバ

• bundleサーバ

• DBは?

• DBはガチガチなフィルタで守っている

13年2月20日水曜日

Page 34: Inside of MOGOK

LXCを利用したユーザアプリ動作環境(3)

app serverbundle server

bundle1

bundle2

bundleN

app1 app2 app3 appN

MySQL

コンテナ コンテナ コンテナ コンテナ コンテナ コンテナ コンテナ

bundle installは個々のLXCコンテナで行われる。コンテナ間の通信は禁止。

ユーザアプリは個々のLXCコンテナで実行される。コンテナ間の通信は禁止。

DBサーバは共用だがアクセスはフィルタでガチガチに固める

X

XX X

X

13年2月20日水曜日

Page 35: Inside of MOGOK

LXCを利用したユーザアプリ動作環境(4)

• LXCってセキュリティ的に問題なかったっけ?

• あるある

• 有名どころ• /proc/sysrq-triggerに書き込みを行うとホストの強制reboot

• 他にも大量にある(ググって下さい)

13年2月20日水曜日

Page 36: Inside of MOGOK

LXCを利用したユーザアプリ動作環境(5)

• セキュリティ問題に対応してないの?

• しています

• LSM使ってます

• Linux Security Module

• コンテナ内から悪さができないような対策を実施しています

• 詳細は...企業秘密 :-)

13年2月20日水曜日

Page 37: Inside of MOGOK

アプリケーションへのリクエストルーティング

13年2月20日水曜日

Page 38: Inside of MOGOK

アプリケーションへのリクエストルーティング(1)• HTTP/HTTPSリクエストってまずは何で受けているの?

• Nginxです

• Nginxから直にアプリへいくの?

• リクエストをルーティングしないと動作するアプリへ届かないのでリクエストルータが存在します

• リクエストルータ何それ?

• http://hirolovesbeer.ruby.iijgio.com/ のhirolovesbeerの所をみて、アプリケーションサーバで動作するユーザアプリへとリクエストを渡します

13年2月20日水曜日

Page 39: Inside of MOGOK

アプリケーションへのリクエストルーティング(2)• リクエストルータ

• Nginxより受け取ったHTTP RequestのURLを解析して、正しいアプリへとリクエストを転送する

• ルーティング情報はキャッシュされる

• 新しいルーティング情報が追加・削除されるたびに情報は注入される(ユーザが新しいアプリをデプロイ/削除した時など)

• リクエストルータもAPIで制御

13年2月20日水曜日

Page 40: Inside of MOGOK

アプリケーションへのリクエストルーティング(2)

nginx

requestrouter

requestrouter

app server

app1 app2 appx appy

app server

appb apps app7 app9

http://appx.ruby.iijgio.com/ へのアクセス

nginxでのロードバランス

リクエストルータでのルーティング

ユーザアプリプロセス群

appxへのルーティング

13年2月20日水曜日

Page 41: Inside of MOGOK

アプリケーションへのリクエストルーティング(3)• リクエストルータは複数台いるの?

• います

• Nginxでロードバランスさせている

• Request/Response解析は負荷が上がるので処理が追いつかなくなった場合には台数を増やすアプローチ

• Nginxの負荷は大して上がらない

13年2月20日水曜日

Page 42: Inside of MOGOK

セキュリティ対策

13年2月20日水曜日

Page 43: Inside of MOGOK

セキュリティ対策(1)• 突然ですがあなたのPaaSは安全です

か?

• CVE-2012-5371(ruby 1.9 におけるハッシュ飽和攻撃による

DoS 脆弱性)

• CVE-2012-5134(libxml2 の脆弱性)

• CVE-2013-0155(YAML解析系の脆弱性)

• CVE-2013-0156(YAML解析系の脆弱性)

• CVE-2013-0184(Rackの脆弱性)

• CVE-2012-6109(Rackの脆弱性)

• CVE-2013-0183(Rackの脆弱性)

• CVE-2012-5612(MySQLの脆弱性)

• CVE-2013-0333(Railsの脆弱性)

• CVE-2013-0262(Rackの脆弱性)

• CVE-2013-0263(Rackの脆弱性)

13年2月20日水曜日

Page 44: Inside of MOGOK

セキュリティ対策(2)

• 昨年の12月から今まででこれくらい

• 結構Rubyフルボッコにやられている

• MOGOKはどうなの?

• 全部対策しましたよ!!

13年2月20日水曜日

Page 45: Inside of MOGOK

セキュリティ対策(3)• MOGOKは安全なの?

• はい、安全です

• なんで言い切れるの?

• IIJのセキュリティチームにMOGOKの試験をしてもらっているから

• IIJのセキュリティチームってどうなの?

• こんな感じ

13年2月20日水曜日

Page 46: Inside of MOGOK

セキュリティ対策(3)• 「IIJ、「マルウェア対策研究人材育成ワークショップ MWS Cup 2011」にて総合優勝」

• http://www.iij.ad.jp/news/pressrelease/2011/1024.html

13年2月20日水曜日

Page 47: Inside of MOGOK

セキュリティ対策(4)

• そういうことで• MOGOKは既に身内にフルボッコにされたサービスです :-D

• セキュリティチームに指摘された項目は全て対処済みでサービスリリースしています

• 対処できない機能はリリースを無期限延期

13年2月20日水曜日

Page 48: Inside of MOGOK

運用/監視

13年2月20日水曜日

Page 49: Inside of MOGOK

運用/監視(1)( ^o^) MOGOKってセキュリティとかしっかりしているらしいぞ。

( ˘⊖˘) 。o(ちょっとまてよ?セキュリティ対策とか動いているユーザアプリにどうやって適用しているの?)

|Inside of MOGOK| ┗(☋` )┓三

( ◠! ◠ )☛ 気づいてしまったな。お前には消えてもらう。

▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわあああああああ

13年2月20日水曜日

Page 50: Inside of MOGOK

運用/監視(2)

• 命題「ユーザアプリは止めるんじゃねぇ!!でもセキュリティ対策もしろ!!」

• \(^o^)/

• いや、終わらせる訳には行かないので...

13年2月20日水曜日

Page 51: Inside of MOGOK

運用/監視(3)

• ユーザアプリの動的マイグレーションを行っています

• マイグレーションって

• VMの場合、VMMからVMMへの移動が可能になります

• ライブマイグレーションならメモリのコピーをマシン間で行って無停止で移動できる

• MOGOKの場合は?

13年2月20日水曜日

Page 52: Inside of MOGOK

運用/監視(4)

• リロケートという機能を実装

1. 違うホストにユーザアプリを立ち上げる(リクエストルータにルーティング情報無し)

2. ルーティング情報を新しいアプリへと切り替える3. 古いユーザアプリを停止する

• 「1」を行う前に脆弱性対策パッケージを仕込んでおく

• ユーザアプリのパッケージは、ユーザが「mogok

build」コマンドを叩いたときに作っておく

13年2月20日水曜日

Page 53: Inside of MOGOK

運用/監視(4)requestrouter

app server1

app1 app2 app3

appmaster

① relocateコマンドの実行

relocatecommand

app server2

app1 app2 app3

② relocate先にユーザアプリプロセスを起動

13年2月20日水曜日

Page 54: Inside of MOGOK

運用/監視(4)requestrouter

app server1

app1 app2 app3

appmaster

relocateコマンドの実行

relocatecommand

app server2

app1 app2 app3

③ ルーティング情報の切り替え指示

13年2月20日水曜日

Page 55: Inside of MOGOK

app server2

運用/監視(4)requestrouter

app server1

app1 app2 app3

appmaster

relocateコマンドの実行

relocatecommand

app1 app2 app3

④ ルーティング情報の切り替え

③ ルーティング情報の切り替え指示

⑤ ルーティング情報の削除

⑥ ユーザアプリの停止

13年2月20日水曜日

Page 56: Inside of MOGOK

運用/監視(5)

• サーバの監視とかは?• MOGOK専用監視(Nagios)とIIJの監視システムの連携

• トラブルがあると24時間/365日でオペレーションセンターから入電

• まぁ、通常のIIJサービスと同等の運用です

13年2月20日水曜日

Page 57: Inside of MOGOK

MOGOKで使われるその他のテクノロジ

• Fluentd• 流行ですね。ログ収集で使用

• bundle install• 並列動作するように実装

• MySQL• フィルタをがっちがちにして1台のサーバで200プロセスくらい動作させています

• Nagios• 監視

• Nginx• ロードバランサ/SSL終端

13年2月20日水曜日

Page 58: Inside of MOGOK

MOGOKの今後

13年2月20日水曜日

Page 59: Inside of MOGOK

MOGOKの今後• オープンβだけど正式版がでたら有料になるの?

• なりません。ただし広告くらいは入れるかも

• 機能は増えないの?

• 増えます。woker/delayed jobは現在作り中

• 有料メニューって何ができるの?

• 複数インスタンス動作によるユーザアプリケーションのスケールアウト

• 広告を外す

• DBの占有など

• Herokuから移りたいんだけどDBの種類違うよね?

• PostgreSQLからの移行ツール作っています :-D

13年2月20日水曜日

Page 60: Inside of MOGOK

MOGOKの今後• エコシステム(生態系)を作りたい

• Herokuでいうプラグインみたいな? EngineYardのアドオンみたいな?

• 例えばMOGOKがまだ実装していないもの

• ユーザアプリを監視する仕組み

• 外部へメールを送信する仕組み

• 独自ドメインを利用する仕組み

• 全てIIJで実装するには時間がかかる

• どなたか一緒にシステムを作りませんか?

• IIJは外部の方が作ったシステムとMOGOKがうまく連携する仕組みを作ります

• これがエコシステム(生態系)!!

13年2月20日水曜日

Page 61: Inside of MOGOK

まとめ

• What’s PaaS?

• Inside of MOGOK

• MOGOKの今後

13年2月20日水曜日

Page 62: Inside of MOGOK

• ご清聴ありがとうございましたm(_ _)m

13年2月20日水曜日