ピグライフ と node.js

27
Suguru Namura CyberAgent, Inc. Oct 29, 2011

Upload: suguru-namura

Post on 15-Jan-2015

18.234 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: ピグライフ と node.js

Suguru NamuraCyberAgent, Inc.Oct 29, 2011

Page 2: ピグライフ と node.js

about me

Software Engineer

ピグライフ、アメーバピグプーペガール etc.

Front-end & Back-end

Java, JavaScript, ActionScript etc..

Page 3: ピグライフ と node.js

What’s ピグライフ?

2011年6月 サービス開始

PC向けソーシャルゲーム

多人数同時接続型(同期通信)

DAU 70万-80万

ピーク時20万同時接続

Page 4: ピグライフ と node.js
Page 5: ピグライフ と node.js
Page 6: ピグライフ と node.js

ピグライフの構成

Page 7: ピグライフ と node.js

WebSocket

WebSocket

WebSocket

HTTP

Page 8: ピグライフ と node.js

Load Balancer

20 servers

320 node

108 servers

36 shards

mongos mongos mongos

TCP TCP

HTTP HTTP

HTTP

Page 9: ピグライフ と node.js

node.js

Page 10: ピグライフ と node.js

Why node.js?

非同期コードが強制される

No more Lock, Synchronized, Volatile

スレッド数の調整などが不要

Page 11: ピグライフ と node.js

modulesnode 0.4.x

express 2.x

jade

websocket-server (websocket)

mongodb

nodeunit

Page 12: ピグライフ と node.js

websocket-serverexpress

Controllers

Model (Services)

mongoDBdriver

Cluster

HTTP Client(External Services)

Application Layer

Page 13: ピグライフ と node.js

WebSocket WebSocket

TCP TCP

A B C

クラスター間同期

Page 14: ピグライフ と node.js

フェイルオーバー

Consistent Hashing

Heartbeat

Heartbeat

Page 15: ピグライフ と node.js

node + mongoDB

Page 16: ピグライフ と node.js

相性は◎

オブジェクトマッピングが必要ない

Sharding + Replica Set

複雑な find, updateクエリが簡潔に表現できるcol.find({ first: ‘value’, second: 20 });

col.update( {_id:‘test’}, {$set: { ‘testgroup.testkey’: 100 }, $inc: { counter: 1 });

両方のコミュニティが活発。ドライバの開発も活発

Pros

Page 17: ピグライフ と node.js

JSON !== BSON

int, long, bytes, date

Global Write Lock

Replica Set は 3台必要 (2台でも良いが...)

ドライバーの挙動が止まることがある

→パッチを当てて対応

Cons

Page 18: ピグライフ と node.js

更新時の切り替え

Page 19: ピグライフ と node.js

Load Balancer

Master Data Master Data

Page 20: ピグライフ と node.js

node-dev

node-inspector

kill -SIGUSR1 pid

開発に便利だったもの

Page 21: ピグライフ と node.js

ゲーム運用

Page 22: ピグライフ と node.js

管理ツール

管理用ブラウザを Chrome に限定

HTML5 + WebSocket を使って構築

JSON形式をフォームにする機能

新しい機能や仕様変更は、JSONフォーム定義を追加するだけ

Page 23: ピグライフ と node.js
Page 24: ピグライフ と node.js
Page 25: ピグライフ と node.js

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: '数',

Page 26: ピグライフ と node.js

最新の技術を簡単に使える

コミュニティ全体がかなり活発

スレッドセーフについて考えなくて良い

メモリ消費が小さい

node.js でやるだけで注目される

HTML5+Socket.IO でスマフォ版開発

node.js導入の感想

Page 27: ピグライフ と node.js

質疑応答