ピグライフ と node.js

Post on 15-Jan-2015

18.234 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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導入の感想

質疑応答

top related