MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月

  • 3,321 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,321
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
9

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. http://www.flickr.com/photos/free-stock/6837290750/
  • 2. 自己紹介 染田貴志 (SOMEDA Takashi) http://d.hatena.ne.jp/tksmd 株式会社ヌーラボ所属 Backlog の開発・インフラ・サポート Cacoo のインフラ FxUG 京都スタッフ JAWS UG 京都支部長 関西 Java エンジニアの会 常連 kanjava vol.8
  • 3. 1年ぶり4度目の登板 http://d.hatena.ne.jp/tksmd/20100929 https://cacoo.com/diagrams/zIPOGa9u3sP8NHHf http://d.hatena.ne.jp/tksmd/20110720 kanjava vol.8
  • 4. MessagePack RPCご存知の方 kanjava vol.8
  • 5. この本読んだ方 http://www.amazon.co.jp/Java並行処理プログラミング-―その「基盤」と「最新API」を究める―-Brian-Goetz/dp/4797337206 kanjava vol.8
  • 6. 今日 ”お話しない” こと 非同期処理について 並行処理について kanjava vol.8
  • 7. Agenda 背景 MessagePack RPC とは 使ってみた / 拡張してみた まとめ http://www.flickr.com/photos/rickerbh/449823989/ kanjava vol.8
  • 8. 背景 http://www.flickr.com/photos/nicmcphee/2558167768/
  • 9. 実現したい事 Git リポジトリ の情報を アプリ側で表示 kanjava vol.8
  • 10. 課題 Git リポジトリとアプリサーバは別にしたい 実行速度はなるべく速くしたい 言語非依存でやり取りしたい kanjava vol.8
  • 11. アーキテクチャ kanjava vol.8
  • 12. MessagePack RPC とは http://www.flickr.com/photos/83633410@N07/7658034524/in/photostream/
  • 13. RPC (Remote Procedure Call) メソッド呼び出し 処理結果 kanjava vol.8
  • 14. ちっちゃくて、速い JSON http://wiki.msgpack.org/display/MSGPACK/Design+of+Serialization http://www.rubyinside.com/messagepack-binary-object-serialization-3150.html kanjava vol.8
  • 15. ドラクエX でも! http://gigazine.net/news/20120824-dragonquest-backstage-cedec2012/ kanjava vol.8
  • 16. 非同期 RPC http://wiki.msgpack.org/display/MSGPACK/Design+of+RPC kanjava vol.8
  • 17. パイプライン http://wiki.msgpack.org/display/MSGPACK/Design+of+RPC kanjava vol.8
  • 18. 実装が沢山 http://msgpack.org/ kanjava vol.8
  • 19. 使ってみる / 拡張してみた http://www.flickr.com/photos/83633410@N07/7658268052/in/photostream/
  • 20. 使ってみる https://github.com/tksmd/kanjava08-sample kanjava vol.8
  • 21. 基本的な役割はこれだけ クライアント 処理の実装 サーバ kanjava vol.8
  • 22. 非同期呼び出しpackage kanjava.msgpack.async;import org.msgpack.rpc.Future;public interface RPCAsyncHandler { // heavy が呼ばれる public Future<String> heavyAsync(); // light が呼ばれる public Future<String> lightAsync();} kanjava vol.8
  • 23. 実装とインターフェースは違ってok @Test public void インターフェースと実装は違っていてもよい() throws Exception{ EventLoop loop = EventLoop.start(); Server server = new Server(loop); server.serve(new TestHandler()); server.listen(8969); Client client = new Client("127.0.0.1", 8969, loop); TestInterface handler = client.proxy(TestInterface.class); String actual = handler.method(); assertThat(actual, is("ok")); } kanjava vol.8
  • 24. ハンドラの public メソッドには注意 @Test public void publicメソッドには注意してね() throws Exception { EventLoop loop = EventLoop.start(); Server server = new Server(loop); try { server.serve(new ExecptionHandler()); } catch (MessageTypeException e) { assertTrue("setDelegate を RPC メソッドとして登録しようとする", true); } finally { server.close(); loop.shutdown(); } } kanjava vol.8
  • 25. 拡張してみた 画像ファイルなど byte[] をそのまま送信すると 色々大変 kanjava vol.8
  • 26. Netty 的な話 kanjava vol.8
  • 27. 泥臭い ここで横取り kanjava vol.8
  • 28. Chunk 書き込み final InputStream is = handler.getStream(); channel.write(CustomMessage.startMessage(msgid, key)); ChannelFuture writeFuture = channel.write(new ChunkedStream(is)); writeFuture.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { future.getChannel().write(CustomMessage.endMessage(msgid,key)); is.close(); } }); kanjava vol.8
  • 29. まとめ http://www.flickr.com/photos/nauright/2662160957/
  • 30. 非同期処理は難しい?! 非同期処理を意識する所はほとんどない 手軽に複数サーバでの 分散処理が記述できる kanjava vol.8
  • 31. 今後の課題など 他言語からのアクセス パフォーマンス的なところ 冗長化的なところ kanjava vol.8
  • 32. 気になる https://twitter.com/frsyuki/status/239951922478596096 kanjava vol.8
  • 33. まもなく! kanjava vol.8
  • 34. Thanks!! ありがとうございました ご質問あればどうぞ! kanjava vol.8