Top Banner
Scala + Finagle の魅力 日本 Scala ユーザーズグループ (ScalaJP) 株式会社ユビレジ ソフトウェアエンジニア 水島 宏太
41

Scala + Finagleの魅力

May 26, 2015

Download

Technology

Kota Mizushima
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Scala + Finagleの魅力

Scala + Finagle の魅力

日本 Scala ユーザーズグループ (ScalaJP)株式会社ユビレジ ソフトウェアエンジニア水島 宏太

Page 2: Scala + Finagleの魅力

自己紹介

https://github.com/kmizu

Page 3: Scala + Finagleの魅力

こんなことしてます

Page 4: Scala + Finagleの魅力

こんなことしてます

Page 5: Scala + Finagleの魅力

こんなことしてます

Page 6: Scala + Finagleの魅力

本題

Page 7: Scala + Finagleの魅力

Scala + Finagle のちょっとしたお話Scala Days 2012 参加リポート

Page 8: Scala + Finagleの魅力

どうでもいいクイズ 1

Finagle の日本語での意味は?

Page 9: Scala + Finagleの魅力

正解は…

● だます、ペテンに掛ける● finagler は「詐欺師」

何故こんな名前を付けたのかそれを知りたい

Page 10: Scala + Finagleの魅力

どうもいいクイズ 2

Finagle の発音は?

Page 11: Scala + Finagleの魅力

正解は…

fine'iglカタカナにすると

フィネーグルに近い

Page 12: Scala + Finagleの魅力

Finagle is …Network stack for the JVM

by Twitter, Inc.

Page 13: Scala + Finagleの魅力

Finagle の特徴

● クライアント / サーバ● 非同期 RPC システムを簡単に作れる

– デフォルトで Thrift, HTTP など● Future による簡潔な非同期処理

Page 14: Scala + Finagleの魅力

Finagle ≠ RPC ライブラリ

● 以下のものとは目的が違う– Apache Thrift– Apache Arvo– Protocol Buffers

● RPC システムを作るための FW

Page 15: Scala + Finagleの魅力
Page 16: Scala + Finagleの魅力

Codec - 重要な概念 (1)

● データの Encode/Decode 方法を提供– Netty Pipeline 経由

● ユーザは CodecFactory を定義

Page 17: Scala + Finagleの魅力

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 { ... }}

Page 18: Scala + Finagleの魅力

Service - 重要な概念 (2)abstract class Service [-Req, +Rep]

extends (Req) ⇒ Future[Rep]

● Req => Future[Rep] への関数● ロジックは主に Service に書く

Page 19: Scala + Finagleの魅力

Future - 重要な概念 (3)abstract class Future[+A] extends

TryLike[A, Future] with Cancellable

● 非同期的計算を表現するクラス● java.util.concurrent.Future との違い:

– Future が合成可能

Page 20: Scala + Finagleの魅力

今回作ったサンプル

● JSON による単純なメッセージ通信● クライアント → サーバ

– Echo● サーバ → クライアント

– EchoResult

Page 21: Scala + Finagleの魅力

メッセージの定義

● Echo:{“type”: “echo”, “message”:$msg}

● EchoResult:{“type”: “echoResult”, “message”:$msg}

Page 22: Scala + Finagleの魅力

デモ

Page 23: Scala + Finagleの魅力

今回のサンプルコード:https://github.com/scalajp/finagle_echo

にて公開

Page 24: Scala + Finagleの魅力

Finagle の良いところ

● Codec, Service を定義するだけで簡単にRPC っぽいものが書ける

● Client, Server のソケット管理はFinagle(Netty) にお任せできる

● Future によるメッセージ受信処理

Page 25: Scala + Finagleの魅力

Finagle 導入のリスク

● ドキュメントが追随できてないことがある– 場合によってはソース追った方が早い

● ステートフルなプロトコルは工夫が必要– Finagle はステートレスプロトコル向き

● Netty の薄いラッパーであること– Netty の知識が必要な場合も

Page 26: Scala + Finagleの魅力

おまけ

Page 27: Scala + Finagleの魅力

Scala Days 2012のちょっとした話

Page 28: Scala + Finagleの魅力

参加者数

2010 (Lausanne) 2011 (Stanford) 2012 (Barbican)0

50

100

150

200

250

300

350

400

450

Page 29: Scala + Finagleの魅力

4/17~ 4/18 Barbican(London)

Page 30: Scala + Finagleの魅力
Page 31: Scala + Finagleの魅力

今年は発表しないからゆっくりできる

Page 32: Scala + Finagleの魅力

そう思っていたそう思っていた時期が私にも時期が私にもありましたありました

Page 33: Scala + Finagleの魅力

キーノートの次の最初のセッション

Page 34: Scala + Finagleの魅力

From: Adriaan Moors予定してたセッションの発表者が急遽キャンセルになったんだ

代わりに発表してくれないか?

Page 35: Scala + Finagleの魅力

発表まで1時間

Page 36: Scala + Finagleの魅力

( ゚д ゚ ) ポカーン

Page 37: Scala + Finagleの魅力

なんとかした

Page 38: Scala + Finagleの魅力

Page 39: Scala + Finagleの魅力

死ぬかと思った

Page 40: Scala + Finagleの魅力

続きは、 InfoQ JapanScala Days 2012 リポート記事(予定 ) にて

Page 41: Scala + Finagleの魅力

乞うご期待