112
SPAのためのインフラ構築ノウハウ Vert.xとSockJSによるスケールアウトWebSocketサーバー構築 株式会社ゼノフィ Xenophy.CO.,LTD 小堤 一弘

Spa のための web サーバ構築ノウハウ

Embed Size (px)

DESCRIPTION

RIAに代わる技術、実用的SPA(Single-page Application) 第7回 エンタープライズ×HTML5ナイトセミナー presented by html5jエンタープライズ部

Citation preview

Page 1: Spa のための web サーバ構築ノウハウ

SPAのためのインフラ構築ノウハウ Vert.xとSockJSによるスケールアウトWebSocketサーバー構築

株式会社ゼノフィ Xenophy.CO.,LTD

小堤 一弘

Page 2: Spa のための web サーバ構築ノウハウ

本日のアジェンダ

自己紹介

SPAに必要なインフラとは?

WebScoketインフラとしてのVert.xとSockJS

デモ

まとめ

Page 3: Spa のための web サーバ構築ノウハウ

自己紹介

こつつみ   かずひろ

小堤 一弘 株式会社ゼノフィ 代表取締役 Sencha 公式トレーニング認定トレーナー Japan Sencha User Group 主宰 html5jエンタープライズ部 !Twitter @kotsutsumi !Facebook https://www.facebook.com/kotsutsumi

Books Ext JS Data-Driven Application Design Sencha Ext JS 4 実践開発ガイド Sencha Ext JS 4 実践開発ガイド 2 Sencha Touch 2 実践開発ガイド (監修)

Page 4: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

Page 5: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

Webサーバー

Page 6: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

Webサーバー

データーベースサーバー

Page 7: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

Webサーバー

データーベースサーバー

ファイル共有サーバー

Page 8: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

Webサーバー

データーベースサーバー

ファイル共有サーバー

ロードバランサー

Page 9: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

Webサーバー

データーベースサーバー

ファイル共有サーバー

ロードバランサー

HA構成(ロードバランサーやデータベースサーバー) etc…

Page 10: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

それって、いままでの普通のWebページ制作と一緒じゃん。

Page 11: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

そうです、SPAだからといってインフラ何変わるの?って話。

Page 12: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

やっぱり、SPAだから…

Page 13: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

非同期通信(AJAX)

Page 14: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

するよね!!

Page 15: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

でも、それって別にリクエスト受けられれば、いままでかわら(ry

Page 16: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

冗長化構成?負荷分散?

Page 17: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

そんなのインフラ屋さんにお願いして…

Page 18: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

フロントエンジニアは知らんよ、そんなの。

Page 19: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

フルスタックエンジニア?なにそれ、おいしいの?

Page 20: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

でも、フルスタックエンジニアとまでいかなくても、

全体の設計がイメージできないと

SPAアプリケーション作っていけるの?

Page 21: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

アプリケーションできあがってから、

インフラ周りで困るとか、悲しい…

Page 22: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

やっぱり、SPA設計したり構築する人は、インフラのことも気にしな

きゃダメじゃない?知ってて損はないよね!?

Page 23: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

いやだから、それって別にリクエスト受けられれば、いままでかわら(ry

Page 24: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

そうです。

Page 25: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

単純にAJAX通信するとかだけなら、あまり変わらない。

Page 26: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

HTML5といえば、WebSocketなんて使う場合、どうするの?

Page 27: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

そんなのググって、socket.ioとか見つかってパクれば、

なんとか徹夜は回避でき(ry

Page 28: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

実は、そんなわけにも行かない。

Page 29: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

WebSocket、WebRTCなどの

コミュニケーション技術に関して欠かせないもの。

Page 30: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

サーバー

Page 31: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

知らなかったら開発環境すら作れないよ?

Page 32: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

いや、だからnodeのサンプルコピってきて、

socket.io使って動かせばすぐじゃん…?

Page 33: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

と思うじゃん?

Page 34: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

node + socket.io

Page 35: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

node + socket.io

確かに、ググるとWebSocketといればsocket.ioみたいな感じで、

記事一杯転がってるよね。

Page 36: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

node + socket.io

確かに、ググるとWebSocketといればsocket.ioみたいな感じで、

記事一杯転がってるよね。

サンプルも簡単、双方向通信余裕♪

Page 37: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

と思うじゃん?

Page 38: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

その構成と同じ1台のsocket.ioサーバーで何人さばけんの?

Page 39: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

スケールできるの?

Page 40: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

できるよ!!(震え声)

Page 41: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

RedisStore使ったりしてさ、

サイバー○ージェントさんとかよく書いてるじゃん!!

Page 42: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

おまえ、それつくれんの?(上司)

Page 43: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

理論的には…(震え声)

Page 44: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

んじゃ、やって(上司)

Page 45: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

マジンコ?

Page 46: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

とならないためには、やっぱりフロントエンジニアといえども、

ネットワークインフラの事は、色々知っていて…

Page 47: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

そして、何よりも触ったことがある経験値が重要。

Page 48: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

でも、WebSocketやりたいけど、Redisの冗長化とか…監視…

nodeのインスタンスを複数立てて…

nodeのパフォーマンスどうよ…

Page 49: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

レッツ、ググる生活開始

Page 50: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

死にたい…

Page 51: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

なんかいい方法ないの?

すっきり簡単なやつ!!

Page 52: Spa のための web サーバ構築ノウハウ

SPAに必要なインフラとは?

ということで、今日は勉強することが一杯のインフラの中でも、

WebSocketを利用するための環境に着目してみます。

Page 53: Spa のための web サーバ構築ノウハウ

WebScoketインフラとしてのVert.xとSockJS

Page 54: Spa のための web サーバ構築ノウハウ

WebScoketインフラとしてのVert.xとSockJS

Virt.xってなに?

Page 55: Spa のための web サーバ構築ノウハウ

WebScoketインフラとしてのVert.xとSockJS

Virt.xってなに?

SockJS

Page 56: Spa のための web サーバ構築ノウハウ

WebScoketインフラとしてのVert.xとSockJS

Virt.xってなに?

SockJS

SockJS サーバーを作ってみる

Page 57: Spa のための web サーバ構築ノウハウ

WebScoketインフラとしてのVert.xとSockJS

Virt.xってなに?

SockJS

SockJS サーバーを作ってみる

Hazelcastを利用したVert.xサーバーのクラスタリング

Page 58: Spa のための web サーバ構築ノウハウ

Virt.xってなに?

Vert.x is a polyglot, non-blocking, event-driven application

platform that runs on the JVM.

Page 59: Spa のための web サーバ構築ノウハウ

Virt.xってなに?

Vert.x は、JVM上で動作するポリグロット、ノンブロッキング、イベン

トドリブンなアプリケーションプラットフォームです。

Page 60: Spa のための web サーバ構築ノウハウ

Virt.xってなに?

ん??よくわかんない…マニュアル的には…

Page 61: Spa のための web サーバ構築ノウハウ

ポリグロット?

Page 62: Spa のための web サーバ構築ノウハウ

ポリグロット?

アプリケーションをJavaScriptでも、RubyでもGroovyでもJavaで

もPythonでも記述することができます。

Page 63: Spa のための web サーバ構築ノウハウ

ポリグロット?

アプリケーションをJavaScriptでも、RubyでもGroovyでもJavaで

もPythonでも記述することができます。

そして、これら複数のプログラミング言語を交ぜて1つのアプリケー

ションを作ることができます。

Page 64: Spa のための web サーバ構築ノウハウ

シンプルな同時並行性モデル

Page 65: Spa のための web サーバ構築ノウハウ

シンプルな同時並行性モデル

Vert.xを使用すると、シングルスレッドとして、すべてのコードを書

くことができます。

Page 66: Spa のための web サーバ構築ノウハウ

シンプルな同時並行性モデル

Vert.xを使用すると、シングルスレッドとして、すべてのコードを書

くことができます。

マルチスレッド·プログラミングの多くの落とし穴から解放されます

Page 67: Spa のための web サーバ構築ノウハウ

シンプルな同時並行性モデル

Vert.xを使用すると、シングルスレッドとして、すべてのコードを書

くことができます。

マルチスレッド·プログラミングの多くの落とし穴から解放されます

非同期プログラミングモデルです!

Page 68: Spa のための web サーバ構築ノウハウ

シンプルな同時並行性モデル

Vert.xを使用すると、シングルスレッドとして、すべてのコードを書

くことができます。

マルチスレッド·プログラミングの多くの落とし穴から解放されます

非同期プログラミングモデルです!

イベントループというのがあって、Vert.xインスタンスがサーバー上

で利用可能なCPUコアにスレッドの数と一致するスレッド立てて稼

働することで、CPUコアを活かしきるよ!!

Page 69: Spa のための web サーバ構築ノウハウ

イベントバス

Page 70: Spa のための web サーバ構築ノウハウ

イベントバス

Vert.xは、アプリケーション·コンポーネントと簡単に通信すること

ができ、クライアントとサーバ側にまたがる分散イベントバス持って

います。

Page 71: Spa のための web サーバ構築ノウハウ

イベントバス

Vert.xは、アプリケーション·コンポーネントと簡単に通信すること

ができ、クライアントとサーバ側にまたがる分散イベントバス持って

います。

イベントバスを使って簡単に、いわゆるリアルタイムWebアプリ

ケーションを作成できるようにすることができます。

Page 72: Spa のための web サーバ構築ノウハウ

Virt.xってなに?

わかったようで、わからん…

Page 73: Spa のための web サーバ構築ノウハウ

Virt.xってなに?

このままだと、今日Vert.xの説明し始めて終わっちゃう…

Page 74: Spa のための web サーバ構築ノウハウ

Virt.xってなに?

つまりは、JavaScriptをはじめいろんな言語で構築できる

サーバーサイドの技術

Page 75: Spa のための web サーバ構築ノウハウ

Virt.xってなに?

そして、速い!!

Page 76: Spa のための web サーバ構築ノウハウ

Virt.xってなに?

nodeより速くて、なんかすごそうじゃん?

Page 77: Spa のための web サーバ構築ノウハウ

SockJS

SockJS - WebSocket emulation

Page 78: Spa のための web サーバ構築ノウハウ

SockJS

要するに、Socket.ioみたいにWebSocket使えない環境でもエミュレー

ションして、抽象レイヤーになってくれるよ!!

Page 79: Spa のための web サーバ構築ノウハウ

sockjs-client

様々なブラウザに、WebSocket

をはじめ、Streaming/Pollingで

対応している。

Page 80: Spa のための web サーバ構築ノウハウ

SockJS

すばらしいねっ!

Page 81: Spa のための web サーバ構築ノウハウ

SockJS

もちろんサーバーサイドの準備が必要な

んだけど、Vert.xは最初からSockJS

Serverを内蔵している!!

Page 82: Spa のための web サーバ構築ノウハウ

SockJS

すばらしいねっ!すぐ使える。

Page 83: Spa のための web サーバ構築ノウハウ

SockJS サーバーを作ってみる

Page 84: Spa のための web サーバ構築ノウハウ

SockJS サーバーを作ってみる

SockJS サーバーコード作成

Page 85: Spa のための web サーバ構築ノウハウ

SockJS サーバーを作ってみる

SockJS サーバーコード作成

SockJS クライアントコード作成

Page 86: Spa のための web サーバ構築ノウハウ

構成図

Vert.x サーバー (SockJSサーバー)

ブラウザ (SockJSクライアント)

ブラウザ (SockJSクライアント)

ブラウザ (SockJSクライアント)

Page 87: Spa のための web サーバ構築ノウハウ

Vert.xの設置

yumコマンドを使ってJDKをインストール # yum -y install java-1.7.0-openjdk-devel;

vert.xインストール(/rootにインストールする前提、どこでもよい) # wget "http://dl.bintray.com/vertx/downloads/vert.x-2.1M2.tar.gz" -O vert.x-2.1M2.tar.gz; # tar xvzf vert.x-2.1M2.tar.gz;

パスを通す # vi .bash_profile PATH=“$PATH”:/root/vert.x-2.1M2/bin # source .bash_profile

バージョン確認 # vertx version

Page 88: Spa のための web サーバ構築ノウハウ

SockJS サーバーコード作成

var vertx = require('vertx'); var server = vertx.createHttpServer(); var sockJSServer = vertx.createSockJSServer(server); !sockJSServer.bridge({prefix : '/eventbus'}, [{ address : 'demo.orderMgr' }], [{ address : 'demo.orderMgr' }] ); !server.listen(8080);

これだけ!

セキュリティ設定

サーバー生成

Page 89: Spa のための web サーバ構築ノウハウ

SockJS クライアントコード作成

<html> <head> </head> <body> <script src="http://cdn.sockjs.org/sockjs-0.3.4.min.js"></script> <script src='vertxbus-2.1.js'></script> !<script> ! var eb = new vertx.EventBus('http://133.242.50.31:8080/eventbus'); ! eb.onopen = function() { ! console.log('open'); ! eb.registerHandler('demo.orderMgr', function(message) { ! console.log('received a message: ' + JSON.stringify(message)); ! }); ! } ! eb.onmessage = function(e) { console.log('message', e.data); }; ! eb.onclose = function() { console.log('close'); }; !

function ebSend() { var v = document.getElementById("form1").value; eb.publish('demo.orderMgr', v); } !</script> <input id="form1" type="text" /> <input type="button" onclick="ebSend();" value="Send Message" /> </body> </html>

Page 90: Spa のための web サーバ構築ノウハウ

SockJS サーバーを作ってみる

SockJSサーバー起動 # vertx run app.js

Page 91: Spa のための web サーバ構築ノウハウ

SockJS サーバーを作ってみる

後ほどデモで動いてるところを見てもらいます。

Page 92: Spa のための web サーバ構築ノウハウ

WebScoketインフラとしてのVert.xとSockJS

これが動いたとしても…

Page 93: Spa のための web サーバ構築ノウハウ

WebScoketインフラとしてのVert.xとSockJS

さっき話してた、nodeとなんら話は変わってないじゃん。

スケールどうするのよ?とか。

Page 94: Spa のための web サーバ構築ノウハウ

WebScoketインフラとしてのVert.xとSockJS

なんかいい方法ないの?

すっきり簡単なやつ!!

Page 95: Spa のための web サーバ構築ノウハウ

WebScoketインフラとしてのVert.xとSockJS

Hazelcastがあるよ!

Page 96: Spa のための web サーバ構築ノウハウ

Hazelcastを利用したVert.xサーバーのクラスタリング

Vert.xに組み込まれているHazelcast、

クラスタリングは、XMLを設定するだけ!

という手軽さっ!

Page 97: Spa のための web サーバ構築ノウハウ

クラスタリング構成図

Vert.x サーバー (SockJSサーバー)

Vert.x サーバー (SockJSサーバー)

Vert.x サーバー (SockJSサーバー)

ローカルスイッチ

ブラウザ (SockJSクライアント)

ブラウザ (SockJSクライアント)

ブラウザ (SockJSクライアント)

Page 98: Spa のための web サーバ構築ノウハウ

/root/vert.x-2.1M2/conf/cluster.xmlを編集

<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-basic.xsd" xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <properties> <property name="hazelcast.mancenter.enabled">false</property> <property name="hazelcast.memcache.enabled">false</property> <property name="hazelcast.rest.enabled">false</property> <property name="hazelcast.wait.seconds.before.join">0</property> <property name="hazelcast.logging.type">jdk</property> </properties> <group> <name>dev</name> <password>dev-pass</password> </group> <network> <port auto-increment="true">5701</port> <join> <multicast enabled="false"> <multicast-group>224.2.2.3</multicast-group> <multicast-port>54327</multicast-port> </multicast> <tcp-ip enabled="true"> <interface>192.168.0.2</interface> <interface>192.168.0.3</interface> <interface>192.168.0.4</interface> </tcp-ip> <aws enabled=“false"> …

クラスタリングしたいサーバーを 追加すればOK

Page 99: Spa のための web サーバ構築ノウハウ

クラスタ起動

vertx run app.js -cluster

Page 100: Spa のための web サーバ構築ノウハウ

デモ

         さんのご協力で、

さくらのクラウド環境を借りて検証環境を作成しました。

表示されるIPアドレスなどは、そのうち消えます。

Page 101: Spa のための web サーバ構築ノウハウ

デモ

Vert.x サーバー1へ接続するHTML http://133.242.50.31/server1.html

Vert.x サーバー2へ接続するHTML http://133.242.50.31/server2.html

Vert.x サーバー3へ接続するHTML http://133.242.50.31/server3.html

みんなで、つないでみよう!!

つながんなかったりしたら、すまん!!

当日のデモ中のみ有効

自粛

Page 102: Spa のための web サーバ構築ノウハウ

まとめ

Page 103: Spa のための web サーバ構築ノウハウ

まとめ

SPAでWebSocketやWebRTCを利用しない限り、

今までのWebアプリケーションインフラと大差は

無い。

Page 104: Spa のための web サーバ構築ノウハウ

まとめ

SPAでWebSocketやWebRTCを利用しない限り、

今までのWebアプリケーションインフラと大差は

無い。

Webサーバーに比べて、WebSocketサーバーのス

ケールは世の中的な経験値がまだ浅い?

Page 105: Spa のための web サーバ構築ノウハウ

まとめ

Page 106: Spa のための web サーバ構築ノウハウ

まとめ

Vert.xは、Javaでサーバーサイドが記述できるた

め、エンタープライズシーンではマッチしやすい?

Page 107: Spa のための web サーバ構築ノウハウ

まとめ

Vert.xは、Javaでサーバーサイドが記述できるた

め、エンタープライズシーンではマッチしやすい?

Hazelcastによるイベントバススケールアウトは、

超簡単、無停止でスケールさせることも可能。

Page 108: Spa のための web サーバ構築ノウハウ

まとめ

Page 109: Spa のための web サーバ構築ノウハウ

まとめ

Vert.xは、SockJS Serverを内蔵しているので、

さっくり実装できてよい。

Page 110: Spa のための web サーバ構築ノウハウ

まとめ

Vert.xは、SockJS Serverを内蔵しているので、

さっくり実装できてよい。

スケールしやすいし、速いし、多言語で実装できる

し、WebSocketのインフラを自信を持って提供で

きる!!(もちろん自分で試せよ!!)

Page 111: Spa のための web サーバ構築ノウハウ

Vert.xとSockJSを、是非お試しください!!

Page 112: Spa のための web サーバ構築ノウハウ

ご清聴ありがとうございました!