Inside of MOGOK
description
Transcript of Inside of MOGOK
自己紹介• 株式会社インターネットイニシアティブプラットフォームサービス部プラットフォーム開発課阿部 博
• なぜkanazawa.rbに?
• 出身がJAISTだから...楽しそうだから :-)
• 経歴とか謎だからbeerupとかで詳しく聞いて下さい
• 英文科卒?ブラック企業経験者?農業?合気道?
• 何してる人
• クラウドという物を作ったり壊したり
• IIJ GIO, MOGOK, コンテナ型DC, CloudStack, SDN
13年2月20日水曜日
目次
• What’s PaaS?
• Inside of MOGOK
• MOGOKの今後
13年2月20日水曜日
What’s PaaS?
13年2月20日水曜日
Before MOGOK
• What’s Cloud?
• IaaS
• PaaS
• SaaS
• XaaS
13年2月20日水曜日
What’s IaaS
• Amazon Web Service
• IIJ GIO
• OpenStack
• CloudStack
• ....
13年2月20日水曜日
What’s PaaS
• PaaSの特徴
• IaaSよりも運用管理が楽
• 開発に注力ができる
• お手軽なデプロイ方法
13年2月20日水曜日
PaaSの二つの面
IaaS
SaaS
PaaS
WebデザイナーWebプログラマ
インフラエンジニアミドルウェアプログラマ
PaaSの幅は伸縮する?
SaaSに近い人が気にかけたい実際PaaSの範囲
IaaSに近い人が気にかけたい実際のPaaSの範囲
13年2月20日水曜日
有名なPaaS
• Heroku
• EngineYard
• Google App Engine
• Salesforce
• Sqale(papperboy&co.)
• C4SA(Nifty)
• eXcale(TIS)
• Cloudn PaaS(Ncom)
• MOGOK(IIJ)
13年2月20日水曜日
PaaSの市場• IDCの予想
• 国内PaaS市場(2012年)
• 前年比63.4%増の263億円と予想
• 2016年の市場規模で1,070億円
• ちなみにIaaS市場は...(2012年)
• 前年比49.6%増の316億円と予想
• 2016年の市場規模で1,035億円
13年2月20日水曜日
What’s MOGOK
• IIJ GIO(IaaS)の上に構築されたPaaS
• IIJで自作したPaaS
• Ruby on RailsのPaaS
• MOGOK自体Rubyで開発されている
13年2月20日水曜日
Why Ruby on Rails only?
• Railsのニーズが高まっている
• 他社のように多種多様な言語/フレームワークに走っても良いが...
• まずは1つの言語をしっかりと
• そもそもRubyアソシエーションに加盟しているIIJはRubyを応援する立場
13年2月20日水曜日
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日水曜日
Inside of MOGOK
13年2月20日水曜日
Inside of MOGOK
13年2月20日水曜日
MOGOKシステムを考えるときのポイント
1. APIで結合されるシステム
2. 各種マスター
3. LXCを利用したユーザアプリケーション動作環境
4. ユーザアプリケーションへのリクエストルーティング
5. セキュリティ対策
6. 運用/監視
13年2月20日水曜日
APIで結合されるシステム
13年2月20日水曜日
APIで結合されるシステム(1)
• システムを作る時に取るアプローチ
• 疎結合?密結合?
• Ruby on Railsだけだと密でよし
• Webサーバ, Railsアプリ, DB
• 単純なものだと三層くらいの構成
13年2月20日水曜日
APIで結合されるシステム(2)
• 複数のシステムが連携する場合には?
• MOGOKのシステムを構成するサーバ台数は...
• 合計66台くらい(冗長化しているので機能的には半数強)
• 密なシステムとして作り込むには難しい
• なぜってスケールアウトするホストが居るから
• 各ホスト同士の情報のやり取りは?
• APIを利用する
13年2月20日水曜日
APIで結合されるシステム(3)
• MessagePack-RPCを利用する• APIの例
13年2月20日水曜日
APIで結合されるシステム(4)
• で、APIって各ホストから他のホストを直に叩くの?
• それって密じゃね?• ってかメッシュ通信おきない?
• 台数が増えると破綻するよねー
• 破綻しない仕組みが必要
13年2月20日水曜日
APIで結合されるシステム(4)
mailgw
appMaster
dbMaster
server1
server2
server3
MessagePack-RPC(メッシュ状態...orz)
13年2月20日水曜日
APIで結合されるシステム(5)
• そこでPX
• Procedure Exchange
• 要はメッセージングルータ
• APIは「prefix + method」で呼ばれる
• mailgw.sendUserMail
• appMaster.listAppServer
• PXはprefixと各ホストのIPアドレスをbindする
• MessagePack-RPCのルーティングを行う
• 各ホストはPXへとAPIを投げ込むだけでよい
13年2月20日水曜日
APIで結合されるシステム(5)
mailgw
appMaster
dbMaster
PX
server1
server2
server3
MessagePack-RPC(PXがdefault gateway状態)
mailgw.sendUserMail sendUserMail
appMaster.listAppServer listAppServer
13年2月20日水曜日
各種マスターサーバ
13年2月20日水曜日
各種マスターサーバ(1)
• MOGOKではスケールアウトするホスト群が居る
• アプリケーションサーバ
• DBサーバ
• Bundleサーバ
• logサーバ
• ユーザの数が増えればこの辺りのサーバを増やす
13年2月20日水曜日
各種マスターサーバ(2)
• 増えていったホスト群はどう管理するのか?
• マスターが調停者になってホスト郡を管理する
• ホストの増減はマスターの責任• 故障等で利用できない場合の管理も含む
13年2月20日水曜日
各種マスターサーバ(2)
master
server1 server2 server3 server4 serverN台数の増減
13年2月20日水曜日
LXCを利用したユーザアプリ動作環境
13年2月20日水曜日
LXCを利用したユーザアプリ動作環境(1)
• LXCについて
• Linux Container
• OpenVZの様なもの
• 完全仮想化ではなく一部リソースの共有
• chrootとjailなイメージ
• cgroupとnamespaceが主なテクノロジ
13年2月20日水曜日
LXCを利用したユーザアプリ動作環境(2)
• LXCを使うポイント
• ユーザのアプリを隔離する
• 他のユーザへと悪さをさせない
• 動作するサーバ自体への悪さをさせない
• bundleインストールの悪さを防ぐ
• 動作するサーバ自体への悪さをさせない
• gitサーバでアプリを保存できるので、バイナリプログラムが動作しても悪さをさせない
13年2月20日水曜日
LXCを利用したユーザアプリ動作環境(3)
• MOGOKでは以下でLXCを使っている
• アプリケーションサーバ
• bundleサーバ
• DBは?
• DBはガチガチなフィルタで守っている
13年2月20日水曜日
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日水曜日
LXCを利用したユーザアプリ動作環境(4)
• LXCってセキュリティ的に問題なかったっけ?
• あるある
• 有名どころ• /proc/sysrq-triggerに書き込みを行うとホストの強制reboot
• 他にも大量にある(ググって下さい)
13年2月20日水曜日
LXCを利用したユーザアプリ動作環境(5)
• セキュリティ問題に対応してないの?
• しています
• LSM使ってます
• Linux Security Module
• コンテナ内から悪さができないような対策を実施しています
• 詳細は...企業秘密 :-)
13年2月20日水曜日
アプリケーションへのリクエストルーティング
13年2月20日水曜日
アプリケーションへのリクエストルーティング(1)• HTTP/HTTPSリクエストってまずは何で受けているの?
• Nginxです
• Nginxから直にアプリへいくの?
• リクエストをルーティングしないと動作するアプリへ届かないのでリクエストルータが存在します
• リクエストルータ何それ?
• http://hirolovesbeer.ruby.iijgio.com/ のhirolovesbeerの所をみて、アプリケーションサーバで動作するユーザアプリへとリクエストを渡します
13年2月20日水曜日
アプリケーションへのリクエストルーティング(2)• リクエストルータ
• Nginxより受け取ったHTTP RequestのURLを解析して、正しいアプリへとリクエストを転送する
• ルーティング情報はキャッシュされる
• 新しいルーティング情報が追加・削除されるたびに情報は注入される(ユーザが新しいアプリをデプロイ/削除した時など)
• リクエストルータもAPIで制御
13年2月20日水曜日
アプリケーションへのリクエストルーティング(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日水曜日
アプリケーションへのリクエストルーティング(3)• リクエストルータは複数台いるの?
• います
• Nginxでロードバランスさせている
• Request/Response解析は負荷が上がるので処理が追いつかなくなった場合には台数を増やすアプローチ
• Nginxの負荷は大して上がらない
13年2月20日水曜日
セキュリティ対策
13年2月20日水曜日
セキュリティ対策(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日水曜日
セキュリティ対策(2)
• 昨年の12月から今まででこれくらい
• 結構Rubyフルボッコにやられている
• MOGOKはどうなの?
• 全部対策しましたよ!!
13年2月20日水曜日
セキュリティ対策(3)• MOGOKは安全なの?
• はい、安全です
• なんで言い切れるの?
• IIJのセキュリティチームにMOGOKの試験をしてもらっているから
• IIJのセキュリティチームってどうなの?
• こんな感じ
13年2月20日水曜日
セキュリティ対策(3)• 「IIJ、「マルウェア対策研究人材育成ワークショップ MWS Cup 2011」にて総合優勝」
• http://www.iij.ad.jp/news/pressrelease/2011/1024.html
13年2月20日水曜日
セキュリティ対策(4)
• そういうことで• MOGOKは既に身内にフルボッコにされたサービスです :-D
• セキュリティチームに指摘された項目は全て対処済みでサービスリリースしています
• 対処できない機能はリリースを無期限延期
13年2月20日水曜日
運用/監視
13年2月20日水曜日
運用/監視(1)( ^o^) MOGOKってセキュリティとかしっかりしているらしいぞ。
( ˘⊖˘) 。o(ちょっとまてよ?セキュリティ対策とか動いているユーザアプリにどうやって適用しているの?)
|Inside of MOGOK| ┗(☋` )┓三
( ◠! ◠ )☛ 気づいてしまったな。お前には消えてもらう。
▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわあああああああ
13年2月20日水曜日
運用/監視(2)
• 命題「ユーザアプリは止めるんじゃねぇ!!でもセキュリティ対策もしろ!!」
• \(^o^)/
• いや、終わらせる訳には行かないので...
13年2月20日水曜日
運用/監視(3)
• ユーザアプリの動的マイグレーションを行っています
• マイグレーションって
• VMの場合、VMMからVMMへの移動が可能になります
• ライブマイグレーションならメモリのコピーをマシン間で行って無停止で移動できる
• MOGOKの場合は?
13年2月20日水曜日
運用/監視(4)
• リロケートという機能を実装
1. 違うホストにユーザアプリを立ち上げる(リクエストルータにルーティング情報無し)
2. ルーティング情報を新しいアプリへと切り替える3. 古いユーザアプリを停止する
• 「1」を行う前に脆弱性対策パッケージを仕込んでおく
• ユーザアプリのパッケージは、ユーザが「mogok
build」コマンドを叩いたときに作っておく
13年2月20日水曜日
運用/監視(4)requestrouter
app server1
app1 app2 app3
appmaster
① relocateコマンドの実行
relocatecommand
app server2
app1 app2 app3
② relocate先にユーザアプリプロセスを起動
13年2月20日水曜日
運用/監視(4)requestrouter
app server1
app1 app2 app3
appmaster
relocateコマンドの実行
relocatecommand
app server2
app1 app2 app3
③ ルーティング情報の切り替え指示
13年2月20日水曜日
app server2
運用/監視(4)requestrouter
app server1
app1 app2 app3
appmaster
relocateコマンドの実行
relocatecommand
app1 app2 app3
④ ルーティング情報の切り替え
③ ルーティング情報の切り替え指示
⑤ ルーティング情報の削除
⑥ ユーザアプリの停止
13年2月20日水曜日
運用/監視(5)
• サーバの監視とかは?• MOGOK専用監視(Nagios)とIIJの監視システムの連携
• トラブルがあると24時間/365日でオペレーションセンターから入電
• まぁ、通常のIIJサービスと同等の運用です
13年2月20日水曜日
MOGOKで使われるその他のテクノロジ
• Fluentd• 流行ですね。ログ収集で使用
• bundle install• 並列動作するように実装
• MySQL• フィルタをがっちがちにして1台のサーバで200プロセスくらい動作させています
• Nagios• 監視
• Nginx• ロードバランサ/SSL終端
13年2月20日水曜日
MOGOKの今後
13年2月20日水曜日
MOGOKの今後• オープンβだけど正式版がでたら有料になるの?
• なりません。ただし広告くらいは入れるかも
• 機能は増えないの?
• 増えます。woker/delayed jobは現在作り中
• 有料メニューって何ができるの?
• 複数インスタンス動作によるユーザアプリケーションのスケールアウト
• 広告を外す
• DBの占有など
• Herokuから移りたいんだけどDBの種類違うよね?
• PostgreSQLからの移行ツール作っています :-D
13年2月20日水曜日
MOGOKの今後• エコシステム(生態系)を作りたい
• Herokuでいうプラグインみたいな? EngineYardのアドオンみたいな?
• 例えばMOGOKがまだ実装していないもの
• ユーザアプリを監視する仕組み
• 外部へメールを送信する仕組み
• 独自ドメインを利用する仕組み
• 全てIIJで実装するには時間がかかる
• どなたか一緒にシステムを作りませんか?
• IIJは外部の方が作ったシステムとMOGOKがうまく連携する仕組みを作ります
• これがエコシステム(生態系)!!
13年2月20日水曜日
まとめ
• What’s PaaS?
• Inside of MOGOK
• MOGOKの今後
13年2月20日水曜日
• ご清聴ありがとうございましたm(_ _)m
13年2月20日水曜日