Block Rockin’ Codes

back with another one of those block rockin' codes

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


[]

 Node  Node  Node 




Node (SSP ) - Block Rockin Codes 

調
調
 SSP  Node 


おさらい


Node  Ajax/WebSocket  SSP 
 Node  RESTful JSON API 




Node 
 RESTful JSON API  Node 
 SSP 


Node の HTTP サーバ


 Node  HTTP 
 Node  Apach  Nginex 



/
使Node 





 Node  FAQ ()

「将来のバージョンで、Nodeは現在のデザインととてもよくフィットする形で子プロセスをforkする ( Web Workers APIを使って) ことができるようになる予定です。」

fork


Node WebWorker 使 fork  pgriess/node-webworker · GitHub 
Tj Cluster - extensible multi-core server management for nodejs ()


 Node 


 Node 
  • マルチコア環境の有効活用
  • 単一スレッドのイベント総量のオーバー対策
  • プロセスのフォールバック
  • ファームの実現

プロセス間通信





 node-webworker  WebSocket 使
cluster  JSON-RPC 使


 Node  WebSocket  Socket.IO  Socket.IO (Flash, Long Pooling etc)
使 WebSocket 使


miksago/node-websocket-server · GitHub

pgriess/node-websocket-client · GitHub


node-webworker 使
使 WebSocket 使


 JSON  message-pack 使
Node JS JSON  JSON 


 Node TCP 使 Ryan 
()






ロードバランサとリバースプロキシ








WebSocket 







WebSocket  SSP  WebSocket 
 Node  Node 



 WebSocket () Nginx 
Nginx Nginx 
 Nginx 
 WebSocket  Nginx  WebSocket 


Node  Cluster 



Nodejitsu  nodejitsu/node-http-proxy · GitHub WebSocket  HTTPS  http://www.nodejitsu.com/ 
nodejitsu 




静的コンテンツサーバ


RESTful JSON API  Node 


 SSP  HTML 



 Node Apache  Node  Nginx 
 Nginx  Squid if-modified-since, expire, cache-manifest 


: Squid  CARP(Cache Array Routing Protocol)
http://d.hatena.ne.jp/hideden/20091101/1257061316

セッションの共有

スケールさせた複数のサーバでセッションを共有する必要がある場合は、プロセスが確保したメモリとは別に、セッションストレージを用意するアプローチが有効です。
この場合応答速度を重視して memcache, TokyoTyrant, Redis 等といった NoSQL を用いることが多いようです。

memcached
  • 揮発性
  • expire 対応
  • 一番実績があり運用ノウハウも多く出ている。
TokyoTyrant
Redis


 Redis 
() Pub/Sub 使() 

Express  connect-redis 使 session-store 


WebSocket 共有


 WebSocket 
 Socket.io  broadcast() 
 WebSocket 




Pub/Sub 





 Pub/Sub  Subscribe 
 Redis  Pub/Sub 



(TupleSpace)



 Redis  Pub/Sub 


 Express  Socket.IO (Socket.IO v0.7) Express.IO  Express - Socket.IO 

 SSP ()



CPU 処理とファーム


 CPU  Node 



2011  JSconf  Joyent  Tom Hughes-Croucher (Node /Oreilly )




 Node 

Multi-tiered Node Architectures - JSConf 2011



 Node ()



()


 cluster 



SSP とスケール


 Node  SSP 


 SSP  node  RESTful JSON API 
 API  CRUD 


 RDB  NoSQL  RESTful API  RDB 



 NoSQL  Replication  Sharding 
  JSON 


プロセスごとのサービス

複数のプロセスを起動して、そこに永続領域に対する RESTFul JSON API を公開したサービスをたてる形でサーバを構築すると、いくつか方法が考えられます。
自分のイメージとしては以下の3つのような感じになるのかと。

1


ID

 CRUD  memcache 

 URI 









API 

DB






ID




2




 CRUD 

 Loadbalancer 

DB








 Mongo 使DB mongo 










mongos  SPoF 


3




 CRUD 

 Loadbalancer 

DB









Couch 








Eventually Consistent 

 Web 




couch  riak  RESTful  API 
 WebSocket  
2 Mongo 


まとまらないまとめ


 SSP  Node  RESTFul JSON API 
 SSP 

 WebSocket  NoSQL  Sharding / Repliaction 



SSP  JSON 





終わりに