scalable node.js with redis store

Post on 10-May-2015

4.500 Views

Category:

Education

6 Downloads

Preview:

Click to see full reader

DESCRIPTION

Node.js大阪勉強会 #npp02

TRANSCRIPT

Scalable Node.js with Redis Store

Node.js大阪 勉強会 2014.6.14

自己紹介

• かみやん (Twitter@kamiyam)

http://nantokaworks.com

• Engineer

• たまにカメラの人

Production Environment

本番環境

Production Environment

同時接続処理に強いNode.js

Production Environment

しかしそれなりの対応が必要

Scalable Node.js

AWSCluster

Qilin

pm2Heroku

AWSCluster

Qilin

pm2Heroku

ModuleEnvironment

AWSCluster

Qilin

pm2Heroku

Environment/Module にかかわらず 複数のプロセスが立ち上がる

Multiple Process

プロセスインスタンスが 複数発生した場合の2つの課題

Session Management

Express Default Session

$ NODE_ENV=production node app.js !Warning: connection.session() MemoryStore is not designed for a production environment, as it will leak memory, and obviously only work within a single process.

Session use LoadBalancer

ログイン管理の セッションはどうなっている?

Sticky Sessions  

WebSocketは…?

WebSocket HandShake

Socket.io(と言うかWebSocket)の接続時

HTTP(S)プロトコル-> WS(S)プロトコル となり二種類のコネクションが発生する

WebSocket HandShake

複数のプロセスが存在する場合 必ず同じプロセスインスタンスに 接続できるとは限らない

結果 Socket.io handshake 失敗

DEMO

WebSocket HandShake

プロセス単体それぞれで管理を行わず プロセス間での情報共有をRedisで行う

Socket.io Event

Socket.io の プロセス間共有

Socket.io Message Sharing Scopeが問題となる

プロセスインメモリでMessageEmittingを行うため

イベントが発生する/しないという問題が発生する

プロセス単体それぞれで管理を行わず プロセス間での情報共有をRedisで行う

(2回目)

Socket.io の プロセス間共有

Redis-Server による解決

Redis

揮発性 Key-Value Store(KVS)

connect-redis

Cation

connect-redisのバージョンに注意

connect-redis >= 2.0.0 support only express >= 4.0.0.  Use connect-redis 1.4.7 for express 3x.

connect-redis

Socket.io Event Emitter

use RedisStore

Socket.io の プロセス間共有

□ Socket.io 0.x系 redis store □ Socket.io 1.x系 socket.io-redis

RedisStore

□ Socket.io 0.x系 redis store □ Socket.io 1.x系 socket.io-redis

RedisStore

Oh…

□ Socket.io 0.x系 redis store □ Socket.io 1.x系 socket.io-redis

RedisStore

Koaといい Socket.io v1.0といい また新たな過渡期に 突入するわけですね

まとめ

• Multiple Process

• Session Management

• Event-Emitter Sharing

参考• Scaling real-time apps on Cloud Foundry (using Redis) [GitHub] 

https://github.com/rajaraodv/redispubsub

• SNode.js + Socket.IO + pm2でデーモン化とクラスタリング

http://tomowatanabe.hatenablog.com/entry/2014/01/31/124740

• Node におけるスケールアーキテクチャ考察(Scale 編)

http://jxck.hatenablog.com/entry/20110618/1308378963

• Socket.IO or WebSocket を AmazonELB でバランスする検証

http://jxck.hatenablog.com/entry/20120228/1330444857

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

top related