More Related Content
Similar to Scala + Finagleの魅力
Similar to Scala + Finagleの魅力 (20)
More from Kota Mizushima (20)
Scala + Finagleの魅力
- 1. Scala + Finagle の魅力
日本 Scala ユーザーズグループ (ScalaJP)
株式会社ユビレジ ソフトウェアエンジニア
水島 宏太
- 9. 正解は…
●
だます、ペテンに掛ける
●
finagler は「詐欺師」
何故こんな名前を付けたのか
それを知りたい
- 13. Finagle の特徴
●
クライアント / サーバ
●
非同期 RPC システムを簡単に作れる
– デフォルトで Thrift, HTTP など
●
Future による簡潔な非同期処理
- 14. Finagle ≠ RPC ライブラリ
●
以下のものとは目的が違う
– Apache Thrift
– Apache Arvo
– Protocol Buffers
●
RPC システムを作るための FW
- 16. Codec - 重要な概念 (1)
●
データの Encode/Decode 方法を提供
– Netty Pipeline 経由
●
ユーザは CodecFactory を定義
- 17. class JSONCodec extends CodecFactory[JsonAST.JValue,
JsonAST.JValue] {
/* type Server = ServerCodecConfig =>
Codec[JsonAST.JValue, JsonAST.JValue */
/* type Client = ClientCodecConfig =>
Codec[JsonAST.JValue, JsonAST.JValue */
def server: Server = Function.const { ... }
def client: Client = Function.const { ... }
}
- 18. Service - 重要な概念 (2)
abstract class Service [-Req, +Rep]
extends (Req) ⇒ Future[Rep]
●
Req => Future[Rep] への関数
●
ロジックは主に Service に書く
- 19. Future - 重要な概念 (3)
abstract class Future[+A] extends
TryLike[A, Future] with Cancellable
●
非同期的計算を表現するクラス
●
java.util.concurrent.Future との違い:
– Future が合成可能
- 20. 今回作ったサンプル
●
JSON による単純なメッセージ通信
●
クライアント → サーバ
– Echo
●
サーバ → クライアント
– EchoResult
- 21. メッセージの定義
●
Echo:
{“type”: “echo”, “message”:$msg}
●
EchoResult:
{“type”: “echoResult”, “message”:$msg}
- 24. Finagle の良いところ
●
Codec, Service を定義するだけで簡単に
RPC っぽいものが書ける
●
Client, Server のソケット管理は
Finagle(Netty) にお任せできる
●
Future によるメッセージ受信処理
- 25. Finagle 導入のリスク
●
ドキュメントが追随できてないことがある
– 場合によってはソース追った方が早い
●
ステートフルなプロトコルは工夫が必要
– Finagle はステートレスプロトコル向き
●
Netty の薄いラッパーであること
– Netty の知識が必要な場合も