Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
4.1.3 ThriftとProtocol Buffers
Search
koyamaso
April 22, 2021
0
48
4.1.3 ThriftとProtocol Buffers
「データ指向アプリケーションデザイン」輪講資料
koyamaso
April 22, 2021
Tweet
Share
More Decks by koyamaso
See All by koyamaso
9.4.3 耐障害性を持つ合意
koyamaso
0
27
5.4 リーダーレスレプリケーション
koyamaso
1
190
spack.yamlを書こう
koyamaso
0
87
Raft 文献調査
koyamaso
0
180
主専攻実験S-3 メタヒューリスティクスと巡回セールスマン問題 最終発表
koyamaso
0
400
Featured
See All Featured
What does AI have to do with Human Rights?
axbom
PRO
1
2k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
How GitHub (no longer) Works
holman
316
140k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.1k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
130
Everyday Curiosity
cassininazir
0
160
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
87
sira's awesome portfolio website redesign presentation
elsirapls
0
190
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.9k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Transcript
データ指向 アプリケーションデザイン 4.1.3 ThriftとProtocol Buffers
Apache Thrift https://thrift.apache.org/ 「スケーラブルな言語間サービス開発」のためにFacebookにて開発された 遠隔手続き呼び出し (RPC) フレームワーク .thriftファイルにRPCを定義し、それをもとにやり取りする 対応言語: C++,
Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages. 今回はサーバをNodejs,クライアントをRustにしてping pongしてみる
.thrift ファイルを書き、コードを生成 コード生成(Rust) コード生成(Nodejs)
Thriftのネットワークスタック - Protocol 例: Binary,Compact, JSON - Transport 例: Buffered,
Framed
実装 protocolとtransportを揃える
Protocol: Binary, Transport: Buffered
Protocol: Binary, Transport: Framed
Protocol: Compact, Transport: Framed
82 21 02 04 70 69 6e 67 18 04
70 69 6e 67 00 4文字 Compact Protocolでエンコードされたものを読む 第一引数”ping”“\0” 終端を表す 4文字 rpc名”ping” 0 0 0 1 1 0 0 0 フィールドタグ1 種類8(文字列)
スキーマの進化と互換性 スキーマで重要なものは - rpcの名前 - フィールドタグ番号とその型 だとわかった 前方互換性及び後方互換性を保ったままスキーマを変更したい 前方互換性 :古い製品がより新しい製品の機能やデータ形式を扱うことができること
後方互換性 :新しい製品が古い製品の機能やデータ形式を扱うことができること
フィールドタグとスキーマの進化 必須ではない(もしくは初期値が設定できる)フィールドを追加すればよい そのフィールドには新しいフィールドタグ番号を割り当てる - 古いシステムが新しいスキーマを読む場合(前方互換性) 知らないフィールドタグ番号はスキップされるので問題ない - 新しいシステムが古いスキーマを読む場合(後方互換性) 新しいフィールドは必須ではないので問題ない
データ型とスキーマの進化 Thriftのドキュメントを調べた限り 型を変更してもキャストされるとは書いていないので、 スキーマの型を変更するのはやめたほうがよさそう 新しいフィールドタグ番号を割り当てた、別のフィールドを用意したほうが良い
Appendix 以降、Protocol Buffers ( https://developers.google.com/protocol-buffers/ )の説明 gRPC ( https://grpc.io/ )
はProtocol Buffersを使うRPCフレームワーク gRPCは比較的有名なフレームワークだが、今回は紹介せず、 Protocol Buffers のみ紹介する
Protocol Buffers https://developers.google.com/protocol-buffers 構造化されたデータを シリアライズ・デシリアライズするライブラリ .protoファイルに構造化されたデータを記述する Goの場合 を実行してコードを生成する
Protocol Buffersを使ったシリアライズ 実行結果 “Taro” “
[email protected]
” 1 4 13 0 0
0 0 1 0 1 0 フィールドタグ1 種類2(文字列)