ピグライフ と node.js
DESCRIPTION
TRANSCRIPT
と
Suguru NamuraCyberAgent, Inc.Oct 29, 2011
about me
Software Engineer
ピグライフ、アメーバピグプーペガール etc.
Front-end & Back-end
Java, JavaScript, ActionScript etc..
What’s ピグライフ?
2011年6月 サービス開始
PC向けソーシャルゲーム
多人数同時接続型(同期通信)
DAU 70万-80万
ピーク時20万同時接続
ピグライフの構成
WebSocket
WebSocket
WebSocket
HTTP
Load Balancer
20 servers
320 node
108 servers
36 shards
mongos mongos mongos
TCP TCP
HTTP HTTP
HTTP
node.js
Why node.js?
非同期コードが強制される
No more Lock, Synchronized, Volatile
スレッド数の調整などが不要
modulesnode 0.4.x
express 2.x
jade
websocket-server (websocket)
mongodb
nodeunit
websocket-serverexpress
Controllers
Model (Services)
mongoDBdriver
Cluster
HTTP Client(External Services)
Application Layer
WebSocket WebSocket
TCP TCP
A B C
クラスター間同期
フェイルオーバー
Consistent Hashing
Heartbeat
Heartbeat
node + mongoDB
相性は◎
オブジェクトマッピングが必要ない
Sharding + Replica Set
複雑な find, updateクエリが簡潔に表現できるcol.find({ first: ‘value’, second: 20 });
col.update( {_id:‘test’}, {$set: { ‘testgroup.testkey’: 100 }, $inc: { counter: 1 });
両方のコミュニティが活発。ドライバの開発も活発
Pros
JSON !== BSON
int, long, bytes, date
Global Write Lock
Replica Set は 3台必要 (2台でも良いが...)
ドライバーの挙動が止まることがある
→パッチを当てて対応
Cons
更新時の切り替え
Load Balancer
Master Data Master Data
node-dev
node-inspector
kill -SIGUSR1 pid
開発に便利だったもの
ゲーム運用
管理ツール
管理用ブラウザを Chrome に限定
HTML5 + WebSocket を使って構築
JSON形式をフォームにする機能
新しい機能や仕様変更は、JSONフォーム定義を追加するだけ
recipe: {! _id: {! ! label: 'レシピコード',
! type : 'text',! class: 'required',! minlength: 4,! maxlength: 64! },! name: {! ! label: '名前',
! ! type : 'text',! ! class: 'required',! ! maxlength: 32! },! type: {! ! label: 'レシピタイプ',
! ! type: 'radio',! ! labels: ['料理','裁縫','工作','調合'],! ! values: ['cooking','sewing','craft','mix']! },! material: {! ! label: '素材登録',
! ! type: 'multiple',! ! fields: {! ! ! title: {! ! ! ! label: 'アイテムコード',
! ! ! ! type: 'text',! ! ! ! autocomplete: 'item',! ! ! ! autocompleteWith: ['name'],! ! ! ! class: 'required',! ! ! ! maxlength: 64! ! ! },! ! ! name: {! ! ! ! label: 'アイテム名',
! ! ! ! type: 'text',! ! ! ! disabled: true! ! ! },! ! ! quantity: {! ! ! ! label: '数',
最新の技術を簡単に使える
コミュニティ全体がかなり活発
スレッドセーフについて考えなくて良い
メモリ消費が小さい
node.js でやるだけで注目される
HTML5+Socket.IO でスマフォ版開発
node.js導入の感想
質疑応答