Slide 1

Slide 1 text

Finagle ࠷৽ࣄ৘ Ԭຊ ༤ଠ (@okapies)

Slide 2

Slide 2 text

શࠃ 100 ສਓͷ Finagle Ϣʔβͷ Έͳ͞Μʂ

Slide 3

Slide 3 text

Ԭຊ ༤ଠ (@okapies) Scala ؔ࿈ࢿྉͷ຋༁Λ͍͔ͭ͘΍ͬͯ·͢ “Effective Scala” (http://twitter.github.io/effectivescala/index- ja.html) “໋ྩܕͷίʔϧόοΫɺؔ਺ܕͷϓϩϛε” (https:// gist.github.com/okapies/5354929) "Cake Pattern: The Bakery from the Black Lagoon" (http:// okapies.hateblo.jp/entry/2013/07/15/232456) ”Scala Conference in Japan 2013” ελοϑ

Slide 4

Slide 4 text

Apache Kafka

Slide 5

Slide 5 text

finagle-kafka

Slide 6

Slide 6 text

Q. Finagle ͬͯ ͍· Ͳ͏ͳͬͯΔͷʁ

Slide 7

Slide 7 text

A. Θ͔ΒΜ

Slide 8

Slide 8 text

࠷৽൛: 6.7.1 Netty 4 ରԠ ৽ Client/Server API (from v6) ෼͔ͬͯΔ͜ͱ

Slide 9

Slide 9 text

Netty 4 ରԠ

Slide 10

Slide 10 text

https://blog.twitter.com/2013/netty-4-at-twitter-reduced-gc-overhead

Slide 11

Slide 11 text

Netty ίϛϡχςΟͱີʹ࿈ܞͯ͠ੑೳվળ Event Object ഇࢭɻAPI ͕ v3 ͱඇޓ׵ʹ Buffer Pool ͰϝϞϦׂ౰ΛࣗલͰ؅ཧ 㱺 GC ස౓͕ 1/5 ʹɻϝϞϦଳҬ෯ͷফඅΛ 50% ࡟ݮɻ

Slide 12

Slide 12 text

Finagle on Netty 4?

Slide 13

Slide 13 text

࠷ۙ Netty 3 ͔Βͷ decouple Λ΍ͬͨ ࢼͯ͠Έ͍ͨͳΒ DefaultClient ͱ DefaultServer ݟΕ

Slide 14

Slide 14 text

৽ Client/Server API

Slide 15

Slide 15 text

v6 ϦϦʔε͔࣌Βਫ໘ԼͰίπίπ΍ͬͯͨͬΆ͍ ·ͩਖ਼ࣜʹ͸ެ։͞Εͯͳ͍͕ɺ΋͏৮ΕΔঢ়ଶ API ͸·ͩ·ͩྲྀಈతʁ

Slide 16

Slide 16 text

// Old API val cli: Service[HttpRequest, HttpResponse] = ClientBuilder() .codec(Http()) .hosts(new InetSocketAddress(8080)) .hostConnectionLimit(1) .build() val req = new DefaultHttpRequest( HttpVersion.HTTP_1_1, HttpMethod.GET, "/") val res: Future[HttpResponse] = cli(req)

Slide 17

Slide 17 text

// New API! val cli: Service[HttpRequest, HttpResponse] = Http.newService("localhost:8080") val req = new DefaultHttpRequest( HttpVersion.HTTP_1_1, HttpMethod.GET, "/") val res: Future[HttpResponse] = cli(req)

Slide 18

Slide 18 text

ϩʔυόϥϯε΍ίωΫγϣϯϓʔϧΛ࣮૷ࡁ Codec ͷࢦఆ͸͜ͷ΁Μ

Slide 19

Slide 19 text

Client ʹ mix-in ͢Δ Richʢ͜Θ͘ͳ͍ʣAPI Λఏڙ

Slide 20

Slide 20 text

http://twitter.github.io/finagle/guide/

Slide 21

Slide 21 text

Thanks!