ATND アテンド β PRODUCED BY RECRUIT

ログイン or 無料登録

第3回MessagePackハッカソン(春)

の内容などを決める

日時 :
2011/04/03 (日) 14:00 ~ 17:00
定員 :
20人
会場 :
株式会社 プリファードインフラストラクチャー(東京都文京区本郷 2-40-1 本郷東急ビル 4F)
URL :
http://msgpack.org/
主催者 :
ハッシュタグ :
#msghack3

※参加登録はEventbriteで行ってください

このATNDは告知用ページとして使っています。

参加登録:http://msghack3.eventbrite.com/

内容

  1. 仕様や設計などの相談
  2. Hacking!!

日時

4月3日(日) 14:00〜

場所

株式会社 プリファードインフラストラクチャー会議室

ありがとうございます!

タイムテーブル
処理シーケンス

議題

スライド

MessagePack-RPCのバージョンと名前空間の仕様議論

名前空間:複数のモジュールで構成されるサーバアプリケーションで、RPCのポート番号は1つだけにしたいときに、RPCのメソッド名が重なってしまうことがあるので、名前空間を分けたい。

互換性も維持したい(例:名前空間が省略していたら、この名前空間が指定されていることにする)。

参考: RPCのバージョン – Togetter

  • プロトコルどうする
  • APIの設計&プロトタイピング

:frsyuki、nobu_kさんぜひ

MessagePack-RPCのエラー処理の実装

Java版には実装できそう。

MessagePack-RPC Java版のエラー処理の実装など – Togetter

組み込みエラーの継承関係の案 – gist

  • プロトコル
  • APIの設計&実装

:frsyuki、mugaさんぜひ

Scala対応

TemplateBuilder周りに修正が必要そう?

JavaBean対応(privateフィールドのシリアライズ)

takezoux2/msgpack at github

:takezoux2さん、frsyuki、mugaさんぜひ

JRuby対応

無案。

日付/時刻型のシリアライズ方法のガイドライン

「文字列はUTF-8」のように、ガイドラインを決めておくと相互運用性が向上する。

  • 案1:1970-01-01 00:00:00 UTC からの経過秒を整数で保存
  • 案2:1970-01-01 00:00:00 UTC からの経過ミリ秒を整数で保存
  • 案3:1970-01-01 00:00:00 UTC からの経過マイクロ秒を整数で保存
  • 案4:1970-01-01 00:00:00 UTC からの経過秒(精度は秒またはミリ秒またはマイクロ秒)を浮動小数で保存
  • 案5:1970-01-01 00:00:00 UTC からの (経過秒, マイクロ秒) を整数2要素の配列で保存
  • Java版でDateクラスの組み込みTemplateを実装?

:takezoux2さん、frsyuki、mugaさんぜひ

big decimal型のシリアライズ方法

  • Java版でBigDecimalクラスの組み込みTemplateを実装?

:mugaさん

Java版のTemplateのプリコンパイラの実装

Androidではクラスを動的にロードできない制約があるので、JavassistTemplateBuilderが使えない。
そこで、事前に.classを生成しておけると嬉しい。

  • 実装方法
    • コマンド?
    • コンパイラプラグイン?
    • アノテーションプロセッサ?

:mugaさん

IDLの仕様

Thriftの謎とIDLの型システム – Togetter

MessagePack IDL 言語仕様案 – gist

IDLの実装方法

プロトタイプ実装

frsyuki/msgpack-idl.git – github

  • 実装済み
    • 構文解析
    • 抽象構文木の構築
  • 未実装
    • Genericsの評価器
    • 継承関係の評価器
    • 型の検査器
    • コード生成器
    • コード生成器のプラグイン機構
  • 詳細
    • 実装言語:Ruby
    • パーサライブラリ:"parslet":http://kschiess.github.com/parslet/
  • 所感:frsyuki
    • 面倒なところはクリアした! 事態収束への道筋は見えた。
    • Thrift互換性は一端捨ててみた。互換性を取るなら、Thrift IDL→MessagePack IDL ASTへの変換器を実装する方針
    • 今の実装では、テキスト→謎のツリー→AST→IR→言語コード の4パス処理。ちょっと遅い。

圧縮

  • A案:MessagePackに入れる
  • B案:RPCのプロトコルに入れる
  • C案:RPCのトランスポートに入れる

MessagePackで圧縮をサポートして節電する! – Togetter

このページのような内容を常にまとめておくページが欲しい

githubのリポジトリ(コミットログ)とも連携したいところ。

  • Wikiの中にページを作成する案
  • 新たにJIRAを入れてチケットベースにする案
    • frsyuki:JIRAを使ってみているところ

:frsyuki、kzkさん

JIRAとConfluence

試験的にインストールしてみました:frsyuki

  • http://jira.msgpack.org/
  • http://wiki.msgpack.org/

MessagePackカンファレンスをやりたいという話

@mikeda: みんなMessagePackがイイって言ってるなぁ。実際、どういうところに使ってるんだろ

@kana_t: msgpackの資料がすくない

みたいな話もあるので、こんな所でこんな感じで使っていて、マジで使える品質だZE☆! というアッピールができると良さそう!

話すネタとか場所とか。

型変換テンプレートがRuby版にも欲しい

本質的にシリアライザには型変換の機構が必要で、日付型や文字列/バイト列問題をスマートに解決するには型変換機構が必須になる。

と言うわけで、Ruby版にもC++版やJava版にあるような型変換テンプレートを導入したいが、今のところ設計案なし。

RPC Ruby版の課題

EventMachine対応

背景:EventMachineに対応して欲しいと言うtweetが、海外でちょくちょく発生している。
http://twitter.com/#!/tobi/status/52112027455471616

方針:Java版と同じ設計で、イベントループをプラガブルにする案。ただしEventMachineはNettyと違ってマルチスレッドに対応しておらず、あらかじめ決められたreactor threadなるスレッドでしか駆動できない制限があるため、若干の工夫を要すると思われる

エラー処理、バージョン、名前空間の設計と実装

プロトコルが決まったら、まずプロトタイプ的な実装が必要になりそう。

エラー処理のAPIは、現在のAPIではユーザー定義の例外クラスを設定できないので、SessionクラスやSessionPoolクラスなどに例外クラスを設定するメソッドを追加する必要がある。
参考(Java版) MessagePack-RPC Java版のエラー処理の実装など

バージョンのAPIは、無案。たぶんDispatcherの改修で対応可能。

名前空間のAPIは、現状のAPIではServerに一つのDispatcherしか渡せないのを、複数の key => Dispatcher ペアを渡せるようにする。(ついでにQtのsignal/slotの様な疎結合性を高めるディスパッチ方式を導入してみたい)

サーバからクライアントへのRPC

繋げてきたクライアントに対して、逆方向(サーバ→クライアント)にRPCしたいというケースが意外に多くある。

API的には、Sessionクラスにserve(Dispatcher)メソッドを実装する。あるいは、serveメソッドを別のクラスかモジュールに切り出して、SessionクラスとServerクラスが継承するかMixInする。

実装的な問題として、サーバはクライアントに対してSessionインスタンスを作って割り当てる必要がある(今は割り当てていない)。たぶん、Transportクラス(とTransportクラスとServerクラスの間のインタフェース)にも変更が必要になる(Transportクラスが接続を受け付けたときにSessionインスタンスを作成する)。

  • このコメントは全員が閲覧、すべてのログインユーザーが投稿することができます

コメントを投稿するには、ログインしてください。

掲載されるイベント情報は、利用者の皆様によりご提供いただくものであり、株式会社リクルートは本情報の正確性や内容について、一切保証するものではございません。詳しくは利用規約をご参照ください。