SlideShare ist ein Scribd-Unternehmen logo
1 von 82
Downloaden Sie, um offline zu lesen
古橋貞之
e
MessagePack
Project
gumiStudy#7
#gumilab
#msgpack @frsyuki
http://d.hatena.ne.jp/viver/
Manager
Gateway
Server
Application
Server
Manager
Gateway
Manager
冗長構成
Server
Server
Server
Server
Server
Application
Gateway
Application
Gateway
レプリケーション
Tokyo Cabinet
Application
Gateway
Gateway
Application
Server Server Server
memcached protocol
MessagePack-RPC
・Hides cluster configuration from
applications.
memcached server on localhost
localhost:11211
Asynchronous RPC library
Tools
Written in Ruby
> automates operation tasks
> easy to implement
> easy to customize
kumoctl
kumostat
kumotop
MessagePack-RPC
Asynchronous RPC library
Cross-language RPC
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコル
> 並列性 - Parallel Pipelining
> 並列イベント駆動I/O
事例
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコル
> 並列性 - Parallel Pipelining
> 並列イベント駆動I/O
事例
背景
• 多言語でシステムを構築したい
> C++で分散KVSを実装 + Rubyで管理を自動化
> Rubyでプロトタイプ → 段階的にC++に移植
> Javaサーバ + Rubyクライアント
• スケールアウト時代に耐える通信システムが欲しい
> 多数のサーバやクライアントが並列して通信
> マルチコア環境でもスケールする並列性
理想
Interface
C++
Interface
Java
Interface
Ruby
高速で多機能で使いやすい
オープンソースのライブラリ
各言語の利点を活かして
本質的な設計に集中
通信のパイプライン化や並列化などの
高速化手法をシンプルに使える
現実1 JSON+XML+HTTP/TCP
C++
Java Ruby
遅い/面倒なライブラリ+
通信部分は自作
各言語の利点は活かせるが、
オブジェクトの交換は面倒
Interface
Interface Interface
通信を並列化するにはマルチスレッドorイベント駆動プロ
グラミングが必要。パイプライン化などの高速化手法は実
装が難しい。バグりやすい。「高負荷になると固まる」
人間が読めるので、
デバッグはしやすい
現実2 SOAPやXML-RPC
C++
Java Ruby
遅くてトラフィックが大きく
仕様が複雑な通信ライブラリ
Interface
Interface Interface
遅い。トラフィックが大きい。
並列化はユーザー任せ。
標準化はされている
Interface
Interface
現実3 同じ言語で固める
Java Ruby
後で別のシステムやモジュール
と接続したくなったときに困る
言語の短所に
付き合わされる
例:GCが遅い
Java
書きやすい言語でプロトタイピング →
効率の良い言語で本番実装 は難しい
実はそんなに速くない(並列性が低い)
スケールアウト時代の実装に使えない
言語の長所を活かせない
従来の問題
• 多言語対応自体の実装が面倒で、本質的な機能の
実装に集中できない
• オーバーヘッドの大きいプログラムができあがる
> リソースの消費量が増え、サーバの台数が増える
• 並列化や非同期化が難しく、高負荷に対応しにくい
> 自前実装はバグの元 =「高負荷になると固まる」
> ネットワーク/マルチスレッド/イベント駆動には罠が多い
従来の問題2
• 書きやすい言語でプロトタイピングしたい
→ 効率の良い言語で本番実装 を段階的に行いたい
> 例:サーバだけRubyからC++に移植
• プロトコルを後から(無停止で)更新したい
> サーバの一部を最新版に更新
> ↑繰り返して無停止で全サーバを更新
ローリングアップデート
MessagePackによる解決
• 高速で多機能で多言語対応した通信システムを提供
> 本質的な機能の実装に集中できる
> 用途に合った言語を選択できる
> プロトタイピング→別の言語で本番実装 も容易
• データサイズやCPU負荷を削減して、サーバの台
数を減らす
• 互換性を保ったままプロトコルを拡張可能にする
• 通信を並列性してマルチコア・スケールアウトに対応
解決手法
• MessagePack:効率の良いシリアライザ
> 中間の型システム+型変換APIを導入
各言語の差異を吸収する
JSONとの相互変換が可能な型システム
> 高速化手法
ゼロコピー化
効率の良いバッファリング機能を内臓
 (ストリーミングAPI)
解決手法
• MessagePack-RPC:高機能なRPC
> 並列化手法
非同期呼び出し
Parallel Pipelining
並列イベント駆動I/O
> 高速化手法
コネクションプーリング
> 使いやすいAPI:複雑な並列I/Oを隠蔽
Session
Future
MessagePackの用途
• サーバ間の通信
> 分散システムのプロトタイプの実装
> 新しいサーバプログラムの実装
管理ツールの実装
クライアントライブラリの実装
• シリアライザ単体で利用
> KVSやログに保存するレコードのシリアライズ
> JSONを置き換え
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
シリアライザ
• シリアライザの役割
> オブジェクトをバイト列に変換
> バイト列からオブジェクトを復元
• シリアライザの用途
> オブジェクトをDBやキャッシュに保存
> オブジェクトをネットワーク越しに転送
require 'msgpack' # gem install “msgpack"
raw = [1,2,3].to_msgpack #=> "x93x01x02x03"
MessagePack.unpack(raw) #=> [1,2,3]
public class Main {
public static void main(String[] args) {
byte[] raw = MessagePack.pack(new MyClass());
MyClass dst = MessagePack.unpack(raw, MyClass.class);
}
}
int main() {
msgpack::sbuffer raw; std::vector<int> src; std::vector<int> dst;
msgpack::pack(raw, src);
msgpack::unpack(raw.data(), raw.size())->convert(&dst);
}
Ruby
Java
C++
シリアライザの設計方法
• バイナリかテキストか
> 人間には読めないが速い <-> 読めるが遅い
• シリアライズ後のデータに型情報を埋め込むか
> データサイズが大きくなる <-> 小さく済む
> バイト列だけから復元可能 <-> IDLが必要
• 多言語に対応するか
MessagePackの選択
• バイナリ形式のシリアライズフォーマット
> 大きなバイト列をゼロコピーで扱う
• 型情報をシリアライズ後のデータに埋め込む
> コンパクトに埋め込むエンコーディング手法
> JSONと互換性のある型システム
整数, 真偽値, 配列, 連想配列, ...
• 多言語に対応
> MessagePackの型 と 言語の型 を相互に変換
フォーマット
JSON MessagePack
null
Integer
Array
String
Map
null c0
10 0a
[20] 91 14
“30” a2 ‘3’ ‘0’
{“40”:null} 81 a2 ‘4’ ‘0’ c0
フォーマット
JSON MessagePack
null
Integer
Array
String
Map
null c0
10 0a
[20] 91 14
“30” a2 ‘3’ ‘0’
{“40”:null} 81 a2 ‘4’ ‘0’ c0
4 bytes 1 byte
2 bytes 1 byte
4 bytes 2 bytes
4 bytes 3 bytes
11 bytes 5 bytes
Embedded type information
type body...
type + value
typevalue length
type + length
非コンテナ型 コンテナ型
よく使う(小さいデータ)は、
型情報+値/長さ を1バイトで保存
body...
Type information
0x00
0xc2
0xc3
0xca
0xcb
0xcc
0xcd
0xce
0xcf
0xdf
...
nil
false
true
float
double
uint8
uint16
uint32
uint64
int8
...
Types
0xc0
0xe0
Type information
Type information
Positive FixNum
Negative FixNum
FixMap
FixArray
FixRaw
0x00
0xc0
0x80
0x90
0xa0
0xe0
0x00
0xc2
0xc3
0xca
0xcb
0xcc
0xcd
0xce
0xcf
0xdf
...
nil
false
true
float
double
uint8
uint16
uint32
uint64
int8
...
Type information Types
JSONとの比較
{“msgpack”:“json”, “hello”:“world”}
24%削減
MessagePack
26 bytes
JSON
34 bytes
別の事例:
ある日のTwitterのpublic_timeline:
JSON 31KB => MessagePack 25KB(19%削減)
多言語対応の問題
• 言語間の差異を吸収する必要がある
> 型システムの違い
文字列とバイト列の区別がない
配列と連想配列の区別がない
クラスがない
> クラス名や変数名の命名規則が違う
MessagePackの型
• MessagePackの型 を導入
> JSON互換
整数, 浮動小数点数, Boolean, nil,
文字列, 配列, 連想配列
> MessagePackの型 を表現するクラスを導入
Java:MessagePackObject
C++:msgpack::object
> MessagePackの型 と 言語の型 を
相互に変換する機能をライブラリで実装
MessagePack
C++の型 Rubyの型
MessagePackの型
Javaの型
msgpack::object
MessagePackObject
多言語対応
高度な型変換
• テンプレート(Java版, C++版)
> デシリアライズされたオブジェクトの型を検査
> 型の変換や型チェックするコードが不要になる
• Optionalフィールド(Java版)
> クラスのデシリアライズ時に、値の省略を許し
て、デフォルト値を使う
• 高速化
> コンパイル時コード生成(C++版)
> 実行時コード生成(Java版)
Optionalフィールド
@MessagePackMessage
public static class MyClass {
public String str;
public double num;
@Optional
public int flag = 0;
}
ストリーミング
require 'msgpack'
u = MessagePack::Unpacker.new($stdin)
u.each do |obj|
puts obj.to_json
end
msgpack json protobuf avro thrift
形式
型情報
スキーマ記述
ストリーミング
RPC
シリアライザ
単体で利用
binary text binary binary binary
埋め込み 埋め込み 外部
外部
(添付) 外部
コード内に記述
Thrift互換形式の
IDLも実装中
JSON
Schema?
必須
(独自DSL)
必須
(JSON形式)
必須
(独自DSL)
対応 できるはず 非対応 非対応 非対応
msgpack-rpc json-rpc (非公開) avro thrift
可能 可能 可能 可能 面倒
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
プロトコル
JSON-RPCをベースにしたプロトコル設計
[0, msgid, method, params]
[1, msgid, error, result]
[2, method, params]
Request
Response
Notify
メッセージID
→Parallel Pipelining
並列性
クライアント サーバ パイプライン化
応答が帰ってくる前に立て続け
に複数の要求を発行することで
高速化を図る
実装例:
・HTTP/1.1 pipelining
・Thrift
・SOAP
クライアント サーバ
並列性
重いタスク
軽いタスク
実装例:
・HTTP/1.1 pipelining
・Thrift
・SOAP
重いタスクが軽いタスクを待たせる
> 並列性が低下
順番を揃える
(キュー)
クライアント サーバ
並列性
実装例:
・MessagePack-RPC
応答の順番を揃える必要が無い
早く終わったタスクはすぐに返す
> 並列性が向上
> サーバのリソース消費量を削減
時間短縮
重いタスク
軽いタスク
並列性
ベンチマークテスト
並列性
• RPCの要求と応答に メッセージID を入れ、クラ
イアント側で要求と応答を対応付ける
> サーバで処理する順番は自由
> サーバの並列化が容易
全要求を自動的に並列化する(Java, C++版)
> 重いタスクが軽いタスクを待たせない
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
イベント駆動I/O
サーバーサイド イベント駆動I/O
Dispatcher
Server
Client
Client
Loop
multi-threaded event-driven I/O
(C++, Java)
大量のクライアントと効率的に通信できる
イベント駆動I/O
Client
Session Loop Server
Client
ServerSession Loop
クライアントサイド イベント駆動I/O
イベント駆動I/O
shared
event loop
Client
Client
Server
Server
Loop
Session
Session
クライアントサイド イベント駆動I/O
並列して通信可能
イベント駆動I/O
Session Pool
Server
Server
pools these
connectionsLoop
Session
Session
connection
クライアントサイド イベント駆動I/O
Dispatcher
イベント駆動I/O
shared
event loop
Client
Server
Server
Loop
Session
Session
クライアントサイド イベント駆動I/O
Client
サーバとクライアントを同じ
イベントループ上で動作
shared
event looptimer, signal handler,
other protocol, etc...
Dispatcher
イベント駆動I/O
Client
Server
Loop
Session
クライアントサイド イベント駆動I/O
Client
サーバとクライアントを同じ
イベントループ上で動作
イベント駆動I/O
• スレッドを使わずにI/Oを並列化
> 多数のクライアントと効率よく通信できる
• クライアント側もイベント駆動
> 多数のサーバと効率よく通信できる
• 高度な分散システムを効率よく実装可能
> 例:多数のサーバ同士が通信しあう分散システム
> 例:クラスタの一括制御ツール
イベント駆動I/O
• サーバとクライアントのアーキテクチャが対称的
> 1つのイベントループに様々なイベントハンドラ
を追加のせてプログラムを構築できる
> サーバ/クライアント両方の特性を持つシステム
例:プロキシサーバ
• イベントループをプールしてコネクションをプール
> 何度もコネクションを張り直す負荷を削減
> 高負荷時でもポート番号が足りなくならない
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
Futureとセッション
• Future
> 「未来の結果」を表すオブジェクト
実際に参照されるまで結果の処理を遅延させる
> 非同期呼び出しを抽象化
> 並列イベント駆動I/Oを隠蔽
• セッション
> 「コネクション」の概念を隠蔽
> 接続・再接続・接続維持を自動化
Future
非同期処理を抽象化
require 'msgpack/rpc'
loop = MessagePack::RPC::Loop.new
c1 = MessagePack::RPC::Client.new(host, port, loop)
c2 = MessagePack::RPC::Client.new(host, port, loop)
future1 = c1.call_async(:method1, arg)
future2 = c2.call_async(:method2, arg)
future2.get
future1.get
Future
クライアント サーバ1 サーバ2
call_async(method1)
call_async(method2)
future1
future2
セッション
コネクションの隠蔽
shared
event loop
Server
Server
Loop
Session
Session
connection
セッション
コネクションの隠蔽
shared
event loop
Server
Server
Loop
Session
Session
connection
Future
Future
Future
Future
コネクションを隠蔽非同期処理を抽象化
セッション
コネクションの隠蔽
Session
Session
Future
Future
Future
Future
コネクションを隠蔽非同期処理を抽象化
セッション:
コネクションを直接制御させない
> 接続が切れたら自動的に再接続
> コネクションプーリング
Future:
非同期処理を直接記述させない
> 記述を簡略化
> バックグラウンドで処理できる
通信は自動的に並列処理
Future
非同期処理を抽象化
require 'msgpack/rpc'
loop = MessagePack::RPC::Loop.new
c1 = MessagePack::RPC::Client.new(host, port, loop)
c2 = MessagePack::RPC::Client.new(host, port, loop)
future1 = c1.call_async(:method1, arg)
future2 = c2.call_async(:method2, arg)
future2.get
future1.get
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
事例
• Sedue Search Cloud
• Amebaなう
• kumofs
• Sekai Camera
• mycached
• Ficia
> kumofs での Data::Model の使い方 http://blog.yappo.jp/yappo/archives/000710.html
• Cassandra?
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
MessagePack - 高速シリアライザ
> いつ/どこで MessagePack を使うか
> MessagePack の手法
背景
> シリアライザの設計手法と MessagePack の選択
> フォーマットと Embedded Type Information
> MessagePack の型システムと型変換
MessagePack-RPC - 多機能RPC
> プロトコルと Parallel Pipelining
> 並列イベント駆動I/O
> FutureとSessionによる隠蔽
事例
まとめ - MessagePack
• 高速なシリアライズ形式
> バイナリ形式のコンパクトなフォーマット
JSONと比べて約20%くらいデータサイズを削減
> 中間型システム + 型変換API により多言語に対応
> 型情報をデータに埋め込む; 定義ファイルが不要
> JSONと相互に変換可能
> ストリーミング機能
まとめ - MessagePack-RPC
• 多機能なRPCシステム
> クライアントサイドイベント駆動I/O;
複数のコネクションで通信を並列化
> Parallel Pipelining;
1本のコネクション上でも通信を並列化
> Futureにより複雑な並列イベント駆動I/Oを隠蔽
> Sessionによりコネクションを隠蔽
コネクションの確立・維持・再接続を自動化
まとめ - The MessagePack Project
• 世界で利用拡大中
• コミッタ募集中
• 利用事例募集中
MessagePack
• C++
> Sadayuki Furuhashi
• Ruby
> Sadayuki Furuhashi
• Java
> Muga Nishizawa
• Python
> INADA Naoki
• Haskell
> Hideyuki Tanaka
• Lua
> Nobuyuki Kubota
• Perl
> tokuhirom, gfx, ...
• Erlang
> UENISHI Kota
• Node.JS
> Peter Griess
• JavaScript
> uupaa
• PHP
> advect
• D
> repeatedly
対応言語と開発者の一部
MessagePack-RPC
• C++版 - Sadayuki Furuhashi
• Erlang版 - UENISHI Kota
• Haskell版 - Hideyuki Tanaka
• Java版 - Muga Nishizawa
• PHP版 - h0x10
• Python版 - INADA Naoki
• Ruby版 - Sadayuki Furuhashi
対応言語と開発者の一部
http://msgpack.org/ http://github.com/msgpack
Twitter: #msgpack msgpack@googlegroups

Weitere ähnliche Inhalte

Was ist angesagt?

Gangliaはじめました
GangliaはじめましたGangliaはじめました
Gangliaはじめましたyuzorock
 
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28th0x0472
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 
Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)ashigirl ZareGoto
 
〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理Akihiro Kitada
 
Pythonでパケット解析
Pythonでパケット解析Pythonでパケット解析
Pythonでパケット解析euphoricwavism
 
Thunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズThunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズMakoto Kato
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP betterKazuho Oku
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケットTakaaki Hoyo
 
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camelssogabe
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発slankdev
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説Shoken Fujisaki
 
MBSD_Cybersecurity_Challenges_2017_最終審査会_発表スライド
MBSD_Cybersecurity_Challenges_2017_最終審査会_発表スライドMBSD_Cybersecurity_Challenges_2017_最終審査会_発表スライド
MBSD_Cybersecurity_Challenges_2017_最終審査会_発表スライドYoshinori Hayashi
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Norito Agetsuma
 
コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてTomofumi Hayashi
 
Hadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateHadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateTaisuke Yamada
 

Was ist angesagt? (20)

Gangliaはじめました
GangliaはじめましたGangliaはじめました
Gangliaはじめました
 
import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28import dpkt したよ #ssmjp 2014/02/28
import dpkt したよ #ssmjp 2014/02/28
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 
Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)Scapy presentation Remake(訂正)
Scapy presentation Remake(訂正)
 
HTTP/2, QUIC入門
HTTP/2, QUIC入門HTTP/2, QUIC入門
HTTP/2, QUIC入門
 
〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理〜Apache Geode 入門 gfsh によるクラスター構築・管理
〜Apache Geode 入門 gfsh によるクラスター構築・管理
 
Cpu cache arch
Cpu cache archCpu cache arch
Cpu cache arch
 
Pythonでパケット解析
Pythonでパケット解析Pythonでパケット解析
Pythonでパケット解析
 
Code jp2015 cpuの話
Code jp2015 cpuの話Code jp2015 cpuの話
Code jp2015 cpuの話
 
Thunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズThunderbird 3のご紹介と企業に求められるカスタマイズ
Thunderbird 3のご紹介と企業に求められるカスタマイズ
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP better
 
hpingで作るパケット
hpingで作るパケットhpingで作るパケット
hpingで作るパケット
 
CPUの同時実行機能
CPUの同時実行機能CPUの同時実行機能
CPUの同時実行機能
 
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camel
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
 
MongoDB Configパラメータ解説
MongoDB Configパラメータ解説MongoDB Configパラメータ解説
MongoDB Configパラメータ解説
 
MBSD_Cybersecurity_Challenges_2017_最終審査会_発表スライド
MBSD_Cybersecurity_Challenges_2017_最終審査会_発表スライドMBSD_Cybersecurity_Challenges_2017_最終審査会_発表スライド
MBSD_Cybersecurity_Challenges_2017_最終審査会_発表スライド
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
 
コンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用についてコンテナのネットワークインターフェース その実装手法とその応用について
コンテナのネットワークインターフェース その実装手法とその応用について
 
Hadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateHadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-update
 

Ähnlich wie Gumi study7 messagepack

Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
WebサーバのチューニングYu Komiya
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ Daisuke Ikeda
 
Ruby Postgres 2009
Ruby Postgres 2009Ruby Postgres 2009
Ruby Postgres 2009Akio Ishida
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
Statically detecting vulnerability under memory pressure using exhaustive search
Statically detecting vulnerability under memory pressure usingexhaustive searchStatically detecting vulnerability under memory pressure usingexhaustive search
Statically detecting vulnerability under memory pressure using exhaustive searchRuo Ando
 
Rouault imbert view_alpc_rpc_pacsec_jp
Rouault imbert view_alpc_rpc_pacsec_jpRouault imbert view_alpc_rpc_pacsec_jp
Rouault imbert view_alpc_rpc_pacsec_jpPacSecJP
 
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web serviceYAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web serviceKazuho Oku
 
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティングMTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング純生 野田
 
Osc2017 tokyo spring_soss_sig
Osc2017 tokyo spring_soss_sigOsc2017 tokyo spring_soss_sig
Osc2017 tokyo spring_soss_sigKazuki Omo
 
Scis2015 ruo ando_2015-01-20-01
Scis2015 ruo ando_2015-01-20-01Scis2015 ruo ando_2015-01-20-01
Scis2015 ruo ando_2015-01-20-01Ruo Ando
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理Takuya ASADA
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangTakeru INOUE
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdTaisuke Yamada
 
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asioPub/Sub model, msm, and asio
Pub/Sub model, msm, and asioTakatoshi Kondo
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門Daiyu Hatakeyama
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめMikiya Okuno
 

Ähnlich wie Gumi study7 messagepack (20)

Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
Webサーバのチューニング
WebサーバのチューニングWebサーバのチューニング
Webサーバのチューニング
 
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~ 社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
 
Ruby Postgres 2009
Ruby Postgres 2009Ruby Postgres 2009
Ruby Postgres 2009
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
Statically detecting vulnerability under memory pressure using exhaustive search
Statically detecting vulnerability under memory pressure usingexhaustive searchStatically detecting vulnerability under memory pressure usingexhaustive search
Statically detecting vulnerability under memory pressure using exhaustive search
 
Rouault imbert view_alpc_rpc_pacsec_jp
Rouault imbert view_alpc_rpc_pacsec_jpRouault imbert view_alpc_rpc_pacsec_jp
Rouault imbert view_alpc_rpc_pacsec_jp
 
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web serviceYAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
YAPC::Asia 2008 Tokyo - Pathtraq - building a computation-centric web service
 
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティングMTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
MTのダイナミック処理(PHP)を高速化する@サーバーサイドスクリプティング
 
Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備Apache Axis2におけるXML署名検証不備
Apache Axis2におけるXML署名検証不備
 
Osc2017 tokyo spring_soss_sig
Osc2017 tokyo spring_soss_sigOsc2017 tokyo spring_soss_sig
Osc2017 tokyo spring_soss_sig
 
Scis2015 ruo ando_2015-01-20-01
Scis2015 ruo ando_2015-01-20-01Scis2015 ruo ando_2015-01-20-01
Scis2015 ruo ando_2015-01-20-01
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
Kai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / ErlangKai = (Dynamo + memcache API) / Erlang
Kai = (Dynamo + memcache API) / Erlang
 
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpdmod_auth_ticket - Bringing Single-Sign-On to lighttpd
mod_auth_ticket - Bringing Single-Sign-On to lighttpd
 
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asioPub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
 
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門SQL Server 使いのための Azure Synapse Analytics - Spark 入門
SQL Server 使いのための Azure Synapse Analytics - Spark 入門
 
Apache geode at-s1p
Apache geode at-s1pApache geode at-s1p
Apache geode at-s1p
 
Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
 

Mehr von Sadayuki Furuhashi

Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019
Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019
Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019Sadayuki Furuhashi
 
Automating Workflows for Analytics Pipelines
Automating Workflows for Analytics PipelinesAutomating Workflows for Analytics Pipelines
Automating Workflows for Analytics PipelinesSadayuki Furuhashi
 
Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理Sadayuki Furuhashi
 
Fluentd at Bay Area Kubernetes Meetup
Fluentd at Bay Area Kubernetes MeetupFluentd at Bay Area Kubernetes Meetup
Fluentd at Bay Area Kubernetes MeetupSadayuki Furuhashi
 
DigdagはなぜYAMLなのか?
DigdagはなぜYAMLなのか?DigdagはなぜYAMLなのか?
DigdagはなぜYAMLなのか?Sadayuki Furuhashi
 
Logging for Production Systems in The Container Era
Logging for Production Systems in The Container EraLogging for Production Systems in The Container Era
Logging for Production Systems in The Container EraSadayuki Furuhashi
 
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11Sadayuki Furuhashi
 
Fighting Against Chaotically Separated Values with Embulk
Fighting Against Chaotically Separated Values with EmbulkFighting Against Chaotically Separated Values with Embulk
Fighting Against Chaotically Separated Values with EmbulkSadayuki Furuhashi
 
Embulk - 進化するバルクデータローダ
Embulk - 進化するバルクデータローダEmbulk - 進化するバルクデータローダ
Embulk - 進化するバルクデータローダSadayuki Furuhashi
 
Plugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGemsPlugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGemsSadayuki Furuhashi
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderSadayuki Furuhashi
 
Understanding Presto - Presto meetup @ Tokyo #1
Understanding Presto - Presto meetup @ Tokyo #1Understanding Presto - Presto meetup @ Tokyo #1
Understanding Presto - Presto meetup @ Tokyo #1Sadayuki Furuhashi
 
Presto - Hadoop Conference Japan 2014
Presto - Hadoop Conference Japan 2014Presto - Hadoop Conference Japan 2014
Presto - Hadoop Conference Japan 2014Sadayuki Furuhashi
 
Fluentd - Set Up Once, Collect More
Fluentd - Set Up Once, Collect MoreFluentd - Set Up Once, Collect More
Fluentd - Set Up Once, Collect MoreSadayuki Furuhashi
 
Prestogres, ODBC & JDBC connectivity for Presto
Prestogres, ODBC & JDBC connectivity for PrestoPrestogres, ODBC & JDBC connectivity for Presto
Prestogres, ODBC & JDBC connectivity for PrestoSadayuki Furuhashi
 

Mehr von Sadayuki Furuhashi (20)

Scripting Embulk Plugins
Scripting Embulk PluginsScripting Embulk Plugins
Scripting Embulk Plugins
 
Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019
Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019
Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019
 
Making KVS 10x Scalable
Making KVS 10x ScalableMaking KVS 10x Scalable
Making KVS 10x Scalable
 
Automating Workflows for Analytics Pipelines
Automating Workflows for Analytics PipelinesAutomating Workflows for Analytics Pipelines
Automating Workflows for Analytics Pipelines
 
Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理Digdagによる大規模データ処理の自動化とエラー処理
Digdagによる大規模データ処理の自動化とエラー処理
 
Fluentd at Bay Area Kubernetes Meetup
Fluentd at Bay Area Kubernetes MeetupFluentd at Bay Area Kubernetes Meetup
Fluentd at Bay Area Kubernetes Meetup
 
DigdagはなぜYAMLなのか?
DigdagはなぜYAMLなのか?DigdagはなぜYAMLなのか?
DigdagはなぜYAMLなのか?
 
Logging for Production Systems in The Container Era
Logging for Production Systems in The Container EraLogging for Production Systems in The Container Era
Logging for Production Systems in The Container Era
 
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
分散ワークフローエンジン『Digdag』の実装 at Tokyo RubyKaigi #11
 
Fighting Against Chaotically Separated Values with Embulk
Fighting Against Chaotically Separated Values with EmbulkFighting Against Chaotically Separated Values with Embulk
Fighting Against Chaotically Separated Values with Embulk
 
Embulk - 進化するバルクデータローダ
Embulk - 進化するバルクデータローダEmbulk - 進化するバルクデータローダ
Embulk - 進化するバルクデータローダ
 
Plugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGemsPlugin-based software design with Ruby and RubyGems
Plugin-based software design with Ruby and RubyGems
 
Embuk internals
Embuk internalsEmbuk internals
Embuk internals
 
Embulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loaderEmbulk, an open-source plugin-based parallel bulk data loader
Embulk, an open-source plugin-based parallel bulk data loader
 
Understanding Presto - Presto meetup @ Tokyo #1
Understanding Presto - Presto meetup @ Tokyo #1Understanding Presto - Presto meetup @ Tokyo #1
Understanding Presto - Presto meetup @ Tokyo #1
 
Prestogres internals
Prestogres internalsPrestogres internals
Prestogres internals
 
Presto+MySQLで分散SQL
Presto+MySQLで分散SQLPresto+MySQLで分散SQL
Presto+MySQLで分散SQL
 
Presto - Hadoop Conference Japan 2014
Presto - Hadoop Conference Japan 2014Presto - Hadoop Conference Japan 2014
Presto - Hadoop Conference Japan 2014
 
Fluentd - Set Up Once, Collect More
Fluentd - Set Up Once, Collect MoreFluentd - Set Up Once, Collect More
Fluentd - Set Up Once, Collect More
 
Prestogres, ODBC & JDBC connectivity for Presto
Prestogres, ODBC & JDBC connectivity for PrestoPrestogres, ODBC & JDBC connectivity for Presto
Prestogres, ODBC & JDBC connectivity for Presto
 

Gumi study7 messagepack