Scalable Node.js with Redis Store

7,446 views

Published on

Node.js大阪勉強会 #npp02

Published in: Education, Technology
0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,446
On SlideShare
0
From Embeds
0
Number of Embeds
2,777
Actions
Shares
0
Downloads
41
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

Scalable Node.js with Redis Store

  1. 1. Scalable Node.js with Redis Store Node.js大阪 勉強会 2014.6.14
  2. 2. 自己紹介 • かみやん (Twitter@kamiyam)
 http://nantokaworks.com • Engineer • たまにカメラの人
  3. 3. Production Environment
  4. 4. 本番環境
  5. 5. Production Environment 同時接続処理に強いNode.js
  6. 6. Production Environment しかしそれなりの対応が必要
  7. 7. Scalable Node.js
  8. 8. AWS Cluster Qilin pm2 Heroku
  9. 9. AWS Cluster Qilin pm2 Heroku Module Environment
  10. 10. AWS Cluster Qilin pm2 Heroku
  11. 11. Environment/Module にかかわらず 複数のプロセスが立ち上がる
  12. 12. Multiple Process
  13. 13. プロセスインスタンスが 複数発生した場合の2つの課題
  14. 14. Session Management
  15. 15. 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.
  16. 16. Session use LoadBalancer ログイン管理の セッションはどうなっている?
  17. 17. Sticky Sessions  
  18. 18. WebSocketは…?
  19. 19. WebSocket HandShake Socket.io(と言うかWebSocket)の接続時 HTTP(S)プロトコル-> WS(S)プロトコル となり二種類のコネクションが発生する
  20. 20. WebSocket HandShake 複数のプロセスが存在する場合 必ず同じプロセスインスタンスに 接続できるとは限らない
  21. 21. 結果 Socket.io handshake 失敗
  22. 22. DEMO
  23. 23. WebSocket HandShake プロセス単体それぞれで管理を行わず プロセス間での情報共有をRedisで行う
  24. 24. Socket.io Event
  25. 25. Socket.io の プロセス間共有 Socket.io Message Sharing Scopeが問題となる プロセスインメモリでMessageEmittingを行うため イベントが発生する/しないという問題が発生する
  26. 26. プロセス単体それぞれで管理を行わず プロセス間での情報共有をRedisで行う (2回目) Socket.io の プロセス間共有
  27. 27. Redis-Server による解決
  28. 28. Redis 揮発性 Key-Value Store(KVS)
  29. 29. connect-redis
  30. 30. Cation connect-redisのバージョンに注意
  31. 31. connect-redis >= 2.0.0 support only express >= 4.0.0.  Use connect-redis 1.4.7 for express 3x. connect-redis
  32. 32. Socket.io Event Emitter
  33. 33. use RedisStore
  34. 34. Socket.io の プロセス間共有
  35. 35. □ Socket.io 0.x系 redis store □ Socket.io 1.x系 socket.io-redis RedisStore
  36. 36. □ Socket.io 0.x系 redis store □ Socket.io 1.x系 socket.io-redis RedisStore Oh…
  37. 37. □ Socket.io 0.x系 redis store □ Socket.io 1.x系 socket.io-redis RedisStore Koaといい Socket.io v1.0といい また新たな過渡期に 突入するわけですね
  38. 38. まとめ • Multiple Process • Session Management • Event-Emitter Sharing
  39. 39. 参考 • 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
  40. 40. ご清聴ありがとうございました

×