SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
Thriftを用いた分散型
Nyancat
@huydx
作ったもの
背景
• みんなNyancatが好き
• 分散システム作りたい
• Thrift勉強してみたい
分散Nyancat作ればいい!
+
複数のマシンで動くNyancat
プログラムの設計
• 分散モデルの選択
• P2P型 → フレームの同期がむずい
• Master-Slave型 にした
• プロトコルの実装の選択
• 単にソケット通信でもいいですが、データのシリア
ライズなどが面倒くさい
• せっかくなのでThriftを用いてプロトコルを実装する
設計
nyan server
nyan client
id1 id2 id3 id4
ping(id1)
frame 1を動かし
てください!
Thriftについて
• 「スケーラブルな言語間サービス開発」のためにFacebookにて
開発されたRPCフレームワークである。
• C++、C#、Java、Perl、Python、PHP、Erlang、Rubyなどの言
語間にて効率的かつシームレスに動作するサービスを開発するこ
とを可能とする。
• Facebook, Twitter, Quora, Tumblrなどで使われている
• 簡単にいうと:
• サービス間で共通言語を実現するためのもの
Thriftを利用する流れ
• Thriftファイルでプロトコル定義
• プロトコルファイルからコード生成する
• 生成されたもののなかにサンプルサーバ実装がある
• クライアントのロジックを実装する
• サーバとクラインとは基本的にTCP/IP+定義されたプロトコルで話す
• 基本的は一方的な通信しかた(サーバがListenで、クライアントから送
信する、polling型)
• サーバからクライアントにプッシュしたいなら(bidirectional通信)
自分で実装する必要がある
Nyanプロトコル
namespace cpp nyan
typedef i32 MyInteger
const i32 INT32CONSTANT = 9853
struct SyncPacket {
1: i32 server = 0,
2: i32 frame = 0
}
service NyanSync {
SyncPacket sync(),
}
• Nyancatをフルスクリーンできないのバグまだあ
るが
• まあ1日作れるものは許せる!(勝手な思い)
次は
• P2P型、障害に耐性もつ分散Nyancat
• 真ん中のクライアントが突然死んでもそれを無
視して死んだクライアントの次のクライアント
に移動する
• ソースコードも公開しました
• https://github.com/huydx/NyanNyan
• 星募集しています∼∼∼

Contenu connexe

Similaire à Thriftを用いた分散型のNyancatを作ってきた

ソフトウェア開発が好きだ
ソフトウェア開発が好きだソフトウェア開発が好きだ
ソフトウェア開発が好きだKoichi Ota
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup samplemganeko
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppクロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppKatsuya Shimizu
 
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較Ryota Suzuki
 
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲームhideyuki ikeda
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Serfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwwwSerfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwwwMasahito Zembutsu
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用Shinya Okano
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作terurou
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Kazuto Kusama
 
仮想端末管理ソフトウェア
仮想端末管理ソフトウェア仮想端末管理ソフトウェア
仮想端末管理ソフトウェアKatsutoshi Nagaoka
 
Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Tadahiro Ishisaka
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべKaoru NAKAMURA
 

Similaire à Thriftを用いた分散型のNyancatを作ってきた (20)

ソフトウェア開発が好きだ
ソフトウェア開発が好きだソフトウェア開発が好きだ
ソフトウェア開発が好きだ
 
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sampleWebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocppクロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
クロスプラットフォーム開発雑感 #pronamaclrhsapporocpp
 
【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較【2017年】ディープラーニングのフレームワーク比較
【2017年】ディープラーニングのフレームワーク比較
 
Tizen & Crosswalk
Tizen & CrosswalkTizen & Crosswalk
Tizen & Crosswalk
 
.NET vNext
.NET vNext.NET vNext
.NET vNext
 
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
20120407 ASP.NET+C#で開発する大規模ソーシャルゲーム
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Serfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwwwSerfが面白いと俺の中で話題にwwwwww
Serfが面白いと俺の中で話題にwwwwww
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作Yet Another DLR for Silverlightの試作
Yet Another DLR for Silverlightの試作
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
Tizenについて
TizenについてTizenについて
Tizenについて
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
 
仮想端末管理ソフトウェア
仮想端末管理ソフトウェア仮想端末管理ソフトウェア
仮想端末管理ソフトウェア
 
Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Ossで作成するチーム開発環境
Ossで作成するチーム開発環境
 
ALMツールたべくらべ
ALMツールたべくらべALMツールたべくらべ
ALMツールたべくらべ
 

Plus de Huy Do

Distributed Tracing, from internal SAAS insights
Distributed Tracing, from internal SAAS insightsDistributed Tracing, from internal SAAS insights
Distributed Tracing, from internal SAAS insightsHuy Do
 
Write on memory TSDB database (gocon tokyo autumn 2018)
Write on memory TSDB database (gocon tokyo autumn 2018)Write on memory TSDB database (gocon tokyo autumn 2018)
Write on memory TSDB database (gocon tokyo autumn 2018)Huy Do
 
Some note about GC algorithm
Some note about GC algorithmSome note about GC algorithm
Some note about GC algorithmHuy Do
 
Engineering Efficiency in LINE
Engineering Efficiency in LINEEngineering Efficiency in LINE
Engineering Efficiency in LINEHuy Do
 
GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)Huy Do
 
Story Writing Byte Serializer in Golang
Story Writing Byte Serializer in GolangStory Writing Byte Serializer in Golang
Story Writing Byte Serializer in GolangHuy Do
 
Akka と Typeの話
Akka と Typeの話Akka と Typeの話
Akka と Typeの話Huy Do
 
DI in ruby
DI in rubyDI in ruby
DI in rubyHuy Do
 
NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]Huy Do
 
実践Akka
実践Akka実践Akka
実践AkkaHuy Do
 
CA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについてCA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについてHuy Do
 
Making CLI app in ruby
Making CLI app in rubyMaking CLI app in ruby
Making CLI app in rubyHuy Do
 
CacheとRailsの簡単まとめ
CacheとRailsの簡単まとめCacheとRailsの簡単まとめ
CacheとRailsの簡単まとめHuy Do
 
[Htmlday]present
[Htmlday]present[Htmlday]present
[Htmlday]presentHuy Do
 

Plus de Huy Do (14)

Distributed Tracing, from internal SAAS insights
Distributed Tracing, from internal SAAS insightsDistributed Tracing, from internal SAAS insights
Distributed Tracing, from internal SAAS insights
 
Write on memory TSDB database (gocon tokyo autumn 2018)
Write on memory TSDB database (gocon tokyo autumn 2018)Write on memory TSDB database (gocon tokyo autumn 2018)
Write on memory TSDB database (gocon tokyo autumn 2018)
 
Some note about GC algorithm
Some note about GC algorithmSome note about GC algorithm
Some note about GC algorithm
 
Engineering Efficiency in LINE
Engineering Efficiency in LINEEngineering Efficiency in LINE
Engineering Efficiency in LINE
 
GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)GOCON Autumn (Story of our own Monitoring Agent in golang)
GOCON Autumn (Story of our own Monitoring Agent in golang)
 
Story Writing Byte Serializer in Golang
Story Writing Byte Serializer in GolangStory Writing Byte Serializer in Golang
Story Writing Byte Serializer in Golang
 
Akka と Typeの話
Akka と Typeの話Akka と Typeの話
Akka と Typeの話
 
DI in ruby
DI in rubyDI in ruby
DI in ruby
 
NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]
 
実践Akka
実践Akka実践Akka
実践Akka
 
CA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについてCA15卒勉強会 メタプログラミングについて
CA15卒勉強会 メタプログラミングについて
 
Making CLI app in ruby
Making CLI app in rubyMaking CLI app in ruby
Making CLI app in ruby
 
CacheとRailsの簡単まとめ
CacheとRailsの簡単まとめCacheとRailsの簡単まとめ
CacheとRailsの簡単まとめ
 
[Htmlday]present
[Htmlday]present[Htmlday]present
[Htmlday]present
 

Thriftを用いた分散型のNyancatを作ってきた