SlideShare a Scribd company logo
リアルタイムサーバー
Erlang/OTP で作る PubSub サーバー
自己紹介
@yamionp
gumi ってところで R&D をしています
サーバーさわりはじめて 15 年
Python 5年
Erlang 6ヶ月
関わったもの
今日話す事
リアルタイムサーバーを自作した話
アジェンダ
なぜリアルタイムサーバーか
なぜ自作なのか
PubSubモデル
プロトコル
アジェンダ
サーバー
なぜ Erlang/OTP なのか
負荷試験
実際のゲームでの使われ方
なぜリアルタイムサーバーか
これまでのソーシャルゲーム
非同期コミュニケーション
同時に遊んでいないのに一緒に遊んでいる感覚
ニコニコ動画
技術的制約(モバイルWeb・処理能力・バッテリー)
より濃密なゲーム体験へ
より強い連携・一体感
本当の同時プレイ
ニコニコ生放送
アプリ化 / 端末性能・ネットワーク環境の向上
リクエスト/レスポンス モデル
Request
ResponseClient Server
リクエスト/レスポンス モデル
Request
ServerClient
HTTPの問題
通信はユーザー側からしか開始できない(Serverから送れない)
無いわけではない (それで十分な場合も多い)
高頻度の通信が難しい(毎秒10回通信
オーバーヘッド
レインテンシ
ServerClient
SYN
SYN+ACK
ACK
最初に Connection を確立する
TCP Connection を直接使う
TCP Connection を直接使う
Connectionがある限り自由なタイミングで通信できる
ServerClient
HTTPでもTCPは使っているが
Response を返したら Connection を破棄する
(ステートレス)
ServerClient
リアルタイム通信のメリット
(準備さえできれば) どちらからでも送り始められる
一回あたりの通信コストが小さい
秒間15回とか送っても全然OK
遅延が少ない
デメリット
負荷が高い・負荷分散しにくい
状態を持つので障害に弱い
エラーパターンが多くコードが複雑になりがち
端末のバッテリー消費が激しい (通信頻度が高い)
なぜ自作なのか
いろいろあるが・・・
Windows Server は (我々にとって) 運用コストが高い
機能過多
既存システムとの相性
ゲームでの通信に特有な仕様への対応
落としたくない。土日に寝ていられるシステムを
ちなみに
フルメッシュ
スター
ここの話をします
Pub/Subモデル
Pub/Sub(出版/購読)モデルとは
非同期メッセージングモデルの一種
Subscribe (購読) しているユーザーにメッセージを Publish (出版) する
Sub側は Topic という単位で購読する
Pub側は Topic にメッセージを送る
Pub側は Sub側を意識する必要がなく、疎結合になる
Subscribe
Broker
Topic A
Topic B
A
B
C
D
Broker
Topic A
Topic B
A
B
C
D
Broker
Topic A
Publish
Topic B
A
B
C
D
Broker
Topic A
Topic B
A
B
C
Publish
D
Room モデルとの違い
Room の作成/削除が必要ない
Roomの管理が必要ない
Sub側 が 0 の Topic にも Publish できる
Pub側が Topic を Subscribe している必要はない
導入イメージ
ELB
App
Job
MQ
Batch
log
PubSub
既存の仕組みと喧嘩しないシンプルなシステムが欲しい
プロトコル
目指したもの
数bitを切り詰めるよりシンプルであること
必要十分な拡張性
シリアライズ・パースがしやすい
概要
TCP を採用
TLV ベースのプロトコル構造
最小限の固定ヘッダと拡張部分のTLV化
4 bytes 単位
固定ヘッダ
1 bit
1
6
3
2
Type (メッセージの種類) Length (全体の長さ)
SenderTimestamp (送信者時間) ※後述
ReceiverTimesamp (受信者時間) ※後述
Payload (送信内容)
Payload も連続した TLV の形をとる
1
1
6
3
2
SectionType SectionLength
Value
つまり
1
1
6
3
2
Type Length
SenderTimestamp
ReceiverTimesamp
SectionType SectionLength
Value
SectionType SectionLength
Value
この構造によるメリット
拡張しやすい
実装が比較的容易
バリデーションが容易
RTT計測
ユーザー サーバー の回線状態を把握していたい
強制切断など
通信時に自分のタイマーと処理時間を加算した相手のタイマーを送る
固定ヘッダ
1 bit
1
6
3
2
Type (メッセージの種類) Length (全体の長さ)
SenderTimestamp (送信者時間) ※後述
ReceiverTimesamp (受信者時間) ※後述
Payload (送信内容)
Client Server
Timer Timer
1
1000
Sender Receiver
1 0 ※
※初回は相手のTimerが
わからないので0
送信までに300msかかったので
受け取った1に300を足す
Sender Receiver
1300 301
1300
321
この時点で自分のタイマーが
321なのでRTTは20ms
421
送信までに100msかかったので
受け取った1300に100を足す
Sender Receiver
421 1400
1420
この時点で自分のタイマーが
1420なのでRTTは20ms521
1520
この時点で自分のタイマーが
1520なのでRTTは20ms
Sender Receiver
521 1500
受信から送信までに200msかかったので
受け取った1300に200を足す
なぜTCPか?
NAT超え
到達保証
順序保証
輻輳制御
ゲームによってはTCPのみでも十分な場合も多い(ターン制など
UDP拡張の試験中
あくまでTCPのサブとしてのUDP
到達保証なし・順序保証なし・輻輳制御なし
品質の良くない回線などでとにかく早く送りたい場合
重要なやりとりはTCPで行う
サーバー
コンセプト
土管としての役割に徹する
ステートフル、データレス
品質重視
安定して繋がり、そこそこ速く、落ちない。
土管に徹する
コネクションを持つ=状態が多くなる
ネットワークプログラミングの大半はエラーハンドリング
持つべき状態は極力減らす
アップデートの可能性を減らす
ステートフル・データレス
状態(ステート)は持つが、データは持たない。
永続化はしない
必要なデータは外部に問い合わせ or 通知 (ex. 認証
起動したらすぐ使える状態
認証 App
PubSub
1.game start
2.IP:Port, Token, Topic
3.Token
4.Token 5.OK
6.OK
品質重視
ドキュメント
暗黙のルールを作らない
Sphinxを採用(& packetdiag)
負荷試験
性能を保証する
自動テスト
デグレさせない
End to End テスト
タイムアウト
同時処理
なぜ Erlang/OTP なのか
Erlang/OTP とは
エリクソン社製の関数型言語 (1986年生まれ)
1998年からオープンソース
動的型付け
優れた耐障害性
並行処理・分散処理に強い
軽量プロセス
起動速度・使用メモリが超軽量なプロセス
OSのプロセス・スレッドとは違う
一瞬で立ち上がり、ごくわずかなメモリしか使用しない
インスタンスを作る感覚でプロセスを作る
数万、数十万のプロセス走る
プロセス間ではメッセージ通信ができる
Let it crash
エラーが起こったプロセスは死ぬ
プロセスが死んだ事は監視している別のプロセスに対処させる
再起動や後始末をしたり、連携するほかのプロセスの処置をしたり
監視プロセスは別のマシンで動いていても問題ない
正常系と異常系の処理が分離される
Erlang採用事例紹介
League of Legends
https://engineering.riotgames.com/news/chat-service-architecture-servers
Call of Duty
https://en.wikipedia.org/wiki/Demonware
http://www.erlang-factory.com/upload/presentations/395/ErlangandFirst-
PersonShooters.pdf
WhatsApp
http://www.erlang-factory.com/upload/presentations/558/efsf2012-whatsapp-scaling.pdf
Game of War
https://erlangcentral.org/senior-erlang-engineer-machine-zone/
社内に導入実績あり
認証・課金・テキスト検証、それぞれのマイクロサービス
数年間の連続稼働実績
全アプリからのリクエストを数台で処理している
プロセスデザイン
tcp session session_udp
ErlangVM
※ system process
link link
tcp session
session_udp
※ system process
session_sup
sessions_sup
arkps_sup
session_udp_sup
ErlangVM
udp_sup
gen_udp
simple_one_for_one
one_for_all
one_for_one
one_for_one
one_for_one
停止フロー
tcp session
session_udp
※ system process
session_sup
sessions_sup
arkps_sup
session_udp_sup
ErlangVM
udp_sup
gen_udp
simple_one_for_one
one_for_all
one_for_one
one_for_one
one_for_one
session がなんらかの理由で Down
tcp session
session_udp
※ system process
session_sup
sessions_sup
arkps_sup
session_udp_sup
ErlangVM
udp_sup
gen_udp
simple_one_for_one
one_for_all
one_for_one
one_for_one
one_for_one
検知した session_sup が session_udp_sup に停止を送り
session_udp_sup がそれを受けて session_udpを停止
tcp session
session_udp
※ system process
session_sup
sessions_sup
arkps_sup
session_udp_sup
ErlangVM
udp_sup
gen_udp
simple_one_for_one
one_for_all
one_for_one
one_for_one
one_for_one
session_udp の停止を確認して session_udp_sup が停止
tcp session
session_udp
※ system process
session_sup
sessions_sup
arkps_sup
session_udp_sup
ErlangVM
udp_sup
gen_udp
simple_one_for_one
one_for_all
one_for_one
one_for_one
one_for_one
監視下のすべてのプロセスの終了を確認して session_sup が停止
tcp session
session_udp
※ system process
session_sup
sessions_sup
arkps_sup
session_udp_sup
ErlangVM
udp_sup
gen_udp
simple_one_for_one
one_for_all
one_for_one
one_for_one
one_for_one
link している tcp も停止
負荷試験
なぜ負荷試験を行うか
限界性能を知る
ボトルネックの発見
スケールすることの確認
必要容量の計算
コスト試算
Locustを使いました
Python製分散負荷試験ツール
このためにフル機能の Python クライアントを開発
接続側はどんなに頑張っても限界がくるので数で解決
スポットインスタンス安い
m4.large のスポットインスタンスが t2.medium オンデマンドより安
い
Locust Slaves
PubSub
Locust Master
m4.2xlargem4.xlarge
CPU: 8
RAM: 32GB
CPU: 4
RAM: 16GB
x8
メッセージ数計測
PubSub
x71 msg
合計 8msg
PubSub
PubSub
PubSub
user/room 8
message/user/sec 0.2
waittime[
ms] 5000
rooms 100 1000 2000 3000 3500 3750
(想定) users 800 8000 16000 24000 28000 30000
(想定)
message/sec 1280 12800 25600 38400 44800 48000
(実測)
message/sec 1270 12783 25560 38328 44787 21054
(Server)CPU [%] 66.5 360.4 404.7 560.9 635.8 444.4
(Server)RAM [%] 0.6 2.4 3.7 6.2 7.2 16.5
RTT Med [ms] 1 2 5 12 19 34
RTT Avg [ms] 14 11 12 14 27 1260
RTT Max [ms] 44 49 75 356 536 62798
End to End Med
[ms] 1 3 8 18 39 460
End to End Avg
[ms] 2 12 13 21 50 3017
End to End Max
[ms] 747 738 754 1003 1315 100979
user/room 8
message/user/sec 1
waittime[
ms] 1000
rooms 100 400 800 900 1000
(想定) users 800 3200 6400 7200 8000
(想定)
message/sec 6400 25600 51200 57600 64000
(実測)
message/sec 6360 25527 48195 53240 25154
(Server)CPU [%] 275.8 618.3 709.3 774.7 766.7
(Server)RAM [%] 0.5 1.1 2.7 3 11.2
RTT Med [ms] 1 1 5 12 5
RTT Avg [ms] 10 7 24 40 494
RTT Max [ms] 45 48 491 1100 34295
End to End Med
[ms] 2 11 36 80 310
End to End Avg
[ms] 10 13 54 120 970
End to End Max
[ms] 554 550 981 2923 44120
user/room 8
message/user/sec 15
waittime[
ms]
66.66666
6666666
7
rooms 10 50 70 80 90 100
(想定) users 80 400 560 640 720 800
(想定)
message/sec 9600 48000 67200 76800 86400 96000
(実測)
message/sec 9096 46047 58600 60764 63539 26390
(Server)CPU [%] 229.8 694.7 776.6 775.6 787.9 786.2
(Server)RAM [%] 0.4 0.5 0.6 0.7 0.7 8
RTT Med [ms] 38 2 7 10 15 24
RTT Avg [ms] 30 14 15 17 23 194
RTT Max [ms] 45 67 93 122 522 20686
End to End Med
[ms] 19 19 24 33 46 73
End to End Avg
[ms] 18 21 27 37 50 293
End to End Max
[ms] 618 631 657 718 1231 39470
UDPのスループットがTCPの1/5問題
V「5万/s はいける」
1万/s でない
fprof でプロファイリング
sendが遅い
port_command で非同期にしたら解決
gen_udp/tcp:send がボトルネックなときにやること
http://qiita.com/mururu/items/9b77e49b5b8a2815ceb6
10万/s 出ました
user/room 8
message/user/sec 0.2
waittime[
ms] 5000
rooms 100 2000 3750 6250 7500 8750
(想定) users 800 16000 30000 50000 60000 70000
(想定)
message/sec 1280 25600 48000 80000 96000 112000
(実測)
message/sec 1281 25639 48124 78742 94555 97731
(Server)CPU [%] 46.9 312.2 426.8 625 723.2 718
(Server)RAM [%] 2 6.8 9.8 14 17.3 18.7
user/room 8
message/user/sec 1
waittime[
ms] 1000
rooms 100 400 800 1000 1200 1400 1600
(想定) users 800 3200 6400 8000 9600 11200 12800
(想定)
message/sec 6400 25600 51200 64000 76800 89600 102400
(実測)
message/sec 6356 25472 51202 63890 75912 88143 99033
(Server)CPU [%] 139.4 269.1 425 500.3 625.8 699.2 765.3
(Server)RAM [%] 2 3.6 5 5 5.2 5.2 6.6
user/room 8
message/user/sec 15
waittime[
ms]
66.66666
6666666
7
rooms 10 50 70 80 90 100 110 120 130 140
(想定) users 80 400 560 640 720 800 880 960 1040 1120
(想定)
message/sec 9600 48000 67200 76800 86400 96000 105600 115200 124800 134400
(実測)
message/sec 8912 45967 64648 74035 83211 91581 99596 106775 112889 116739
(Server)CPU [%] 161.5 374.2 489.7 535.8 582.1 632.1 666.4 703.7 726.9 784.7
(Server)RAM [%] 2.1 2.3 2.3 2.3 2.3 2.2 1.8 2.6 3 3.4
実際のゲームでの使われ方
App
PubSub
Private Topic
Private Topic
matching start
list
matching
Private Topic battle starter
HW障害への対応
App
PubSub
PubSub
PubSub
1. battle info
2. 割り振り先をMySQLから取得
3. IP:Port, Token, Topic
4. 接続開始
監視サーバー
サーバー一覧
App
PubSub
PubSub
PubSub
1. Down
2. 検知
3. リスト更新
4. 切断されたので問い合わせ
5. Downを確認して割り振り先を決定・保存
6. 新割り振り先を案内
監視サーバー
バージョンアップ
今繋いでいる人
クライアントのバージョンxサーバーのバージョン
新しいサーバーをたてて、Appでの新規接続の案内先を変更
既存の接続がいなくなったら落として終了
Room Worker
Room情報をゲームロジックまで含めて面倒をみる
最初に Subscribe する
ブローカーからはクライアント扱い
App
PubSub
Battle Topic
6.battle info 2.battle start
room worker
3.room create
4.subscribe
5. ok
7. IP:Port, Token, Topic
8. subscribe
作ってみて
思ったより速度が出た
デグレさせない事の重要さ
運用を最優先の姿勢
ご清聴ありがとうございました
One More Thing
ArkPS Server
OSSとして公開予定
https://github.com/arkps/
(予定地)

More Related Content

What's hot (20)

怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
 
Oss貢献超入門
Oss貢献超入門Oss貢献超入門
Oss貢献超入門
Michihito Shigemura
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
Naoya Kishimoto
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
VirtualTech Japan Inc.
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
kumake
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue
 
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
matsu_chara
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
Yahoo!デベロッパーネットワーク
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
Akihiro Suda
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
Naoya Kishimoto
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
 
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall ) LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
LogbackからLog4j 2への移行によるアプリケーションのスループット改善 ( JJUG CCC 2021 Fall )
Hironobu Isoda
 
日本語テストメソッドについて
日本語テストメソッドについて日本語テストメソッドについて
日本語テストメソッドについて
kumake
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue
 
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
matsu_chara
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

Viewers also liked (14)

負荷試験入門公開資料 201611
負荷試験入門公開資料 201611負荷試験入門公開資料 201611
負荷試験入門公開資料 201611
樽八 仲川
 
負荷がたかいいんだから~♪(仮)
負荷がたかいいんだから~♪(仮)負荷がたかいいんだから~♪(仮)
負荷がたかいいんだから~♪(仮)
Yohei Hamada
 
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
Satoshi Yamafuji
 
サーバーのおしごと
サーバーのおしごとサーバーのおしごと
サーバーのおしごと
Yugo Shimizu
 
Imprementation of realtime_networkgame
Imprementation of realtime_networkgameImprementation of realtime_networkgame
Imprementation of realtime_networkgame
Satoshi Yamafuji
 
分割と整合性と戦う
分割と整合性と戦う分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
 
Fluentd and Embulk Game Server 4
Fluentd and Embulk Game Server 4Fluentd and Embulk Game Server 4
Fluentd and Embulk Game Server 4
N Masahiro
 
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Youichiro Miyake
 
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
johgus johgus
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
Toru Takahashi
 
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
光晶 上原
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
Manabu Koga
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
樽八 仲川
 
負荷試験入門公開資料 201611
負荷試験入門公開資料 201611負荷試験入門公開資料 201611
負荷試験入門公開資料 201611
樽八 仲川
 
負荷がたかいいんだから~♪(仮)
負荷がたかいいんだから~♪(仮)負荷がたかいいんだから~♪(仮)
負荷がたかいいんだから~♪(仮)
Yohei Hamada
 
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
MMOのサーバについて 剣と魔法のログレス ~いにしえの女神~ での実装例
Satoshi Yamafuji
 
サーバーのおしごと
サーバーのおしごとサーバーのおしごと
サーバーのおしごと
Yugo Shimizu
 
Imprementation of realtime_networkgame
Imprementation of realtime_networkgameImprementation of realtime_networkgame
Imprementation of realtime_networkgame
Satoshi Yamafuji
 
分割と整合性と戦う
分割と整合性と戦う分割と整合性と戦う
分割と整合性と戦う
Yugo Shimizu
 
Fluentd and Embulk Game Server 4
Fluentd and Embulk Game Server 4Fluentd and Embulk Game Server 4
Fluentd and Embulk Game Server 4
N Masahiro
 
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】Halo2 におけるHFSM(階層型有限状態マシン)  【ビヘイビアツリー解説】
Halo2 におけるHFSM(階層型有限状態マシン) 【ビヘイビアツリー解説】
Youichiro Miyake
 
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
johgus johgus
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
Toru Takahashi
 
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
光晶 上原
 
ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
Daisaku Mochizuki
 
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
Manabu Koga
 
失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験失敗事例で学ぶ負荷試験
失敗事例で学ぶ負荷試験
樽八 仲川
 

Similar to リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜 (20)

リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法
モノビット エンジン
 
Ad tech 20121030
Ad tech 20121030Ad tech 20121030
Ad tech 20121030
ajiyoshi
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会
モノビット エンジン
 
年の瀬!リアルタイム通信ゲームサーバ勉強会
年の瀬!リアルタイム通信ゲームサーバ勉強会年の瀬!リアルタイム通信ゲームサーバ勉強会
年の瀬!リアルタイム通信ゲームサーバ勉強会
monobit
 
「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...
「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...
「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...
IIJ
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
 
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
erakazu
 
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
Drecom Co., Ltd.
 
Aw svs trifortクラウド選びのポイント
Aw svs trifortクラウド選びのポイントAw svs trifortクラウド選びのポイント
Aw svs trifortクラウド選びのポイント
Taimei Omata
 
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
モノビット エンジン
 
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演)  #UE4DDUE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演)  #UE4DD
UE4 MultiPlayer Online Deep Dive: 実践編1 (Byking様ご講演) #UE4DD
エピック・ゲームズ・ジャパン Epic Games Japan
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in Japanese
Mikio Hirabayashi
 
P2Pって何?
P2Pって何?P2Pって何?
P2Pって何?
Junya Yamaguchi
 
ゲームの通信をつくる仕事はどうなるのだろう?
ゲームの通信をつくる仕事はどうなるのだろう?ゲームの通信をつくる仕事はどうなるのだろう?
ゲームの通信をつくる仕事はどうなるのだろう?
Kengo Nakajima
 
10分で作るクラスライブラリ
10分で作るクラスライブラリ10分で作るクラスライブラリ
10分で作るクラスライブラリ
_norin_
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
Takuya ASADA
 
We Should Know About in this SocialNetwork Era 2011_1112
We Should Know About in this SocialNetwork Era 2011_1112We Should Know About in this SocialNetwork Era 2011_1112
We Should Know About in this SocialNetwork Era 2011_1112
Masahito Zembutsu
 
リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法
モノビット エンジン
 
Ad tech 20121030
Ad tech 20121030Ad tech 20121030
Ad tech 20121030
ajiyoshi
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会
モノビット エンジン
 
年の瀬!リアルタイム通信ゲームサーバ勉強会
年の瀬!リアルタイム通信ゲームサーバ勉強会年の瀬!リアルタイム通信ゲームサーバ勉強会
年の瀬!リアルタイム通信ゲームサーバ勉強会
monobit
 
「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...
「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...
「個人でも手軽に引ける回線を使って、快適なMy Home Networkを作ったお話」「SEILちゃんを使った、お手軽・しっかりなリモートアクセス(RAS...
IIJ
 
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
MRU : Monobit Reliable UDP ~5G世代のモバイルゲームに最適な通信プロトコルを目指して~
モノビット エンジン
 
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
erakazu
 
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
Drecom Co., Ltd.
 
Aw svs trifortクラウド選びのポイント
Aw svs trifortクラウド選びのポイントAw svs trifortクラウド選びのポイント
Aw svs trifortクラウド選びのポイント
Taimei Omata
 
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
新しくなったモノビットエンジンを使って10万人規模のサーバを構築するノウハウを公開!2017年10月27日モノビットエンジン勉強会
モノビット エンジン
 
Kyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in JapaneseKyoto Tycoon Guide in Japanese
Kyoto Tycoon Guide in Japanese
Mikio Hirabayashi
 
ゲームの通信をつくる仕事はどうなるのだろう?
ゲームの通信をつくる仕事はどうなるのだろう?ゲームの通信をつくる仕事はどうなるのだろう?
ゲームの通信をつくる仕事はどうなるのだろう?
Kengo Nakajima
 
10分で作るクラスライブラリ
10分で作るクラスライブラリ10分で作るクラスライブラリ
10分で作るクラスライブラリ
_norin_
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
Takuya ASADA
 
We Should Know About in this SocialNetwork Era 2011_1112
We Should Know About in this SocialNetwork Era 2011_1112We Should Know About in this SocialNetwork Era 2011_1112
We Should Know About in this SocialNetwork Era 2011_1112
Masahito Zembutsu
 

リアルタイムサーバー 〜Erlang/OTPで作るPubSubサーバー〜