Slide 1

Slide 1 text

Akka StreamsͷॖୀॲཧΛ༻͍ͨ ଱ো֐ੑͷ࣮ݱ ʙ ޿ࠂͷϦΞϧλΠϜΦʔΫγϣϯͷࣄྫ ʙ

Slide 2

Slide 2 text

ࣗݾ঺հ @ikuo (Ikuo Matsumura) 2008~ ૊ࠐܥͷ෼ࢄγϛϡϨʔγϣϯͷઃܭ։ൃͳͲ; C++, MATLAB IBM Research - Tokyo 2011~ ϨγϐӫཆՁͷࣗಈܭࢉͷઃܭ։ൃͳͲ; Ruby/Rails, Treetop Cookpad, Inc. 2014~ SSP/RTBΦʔΫγϣϯͷઃܭ։ൃͳͲ; Scala/Akka CyberAgent, Inc. CA ProFit-X team

Slide 3

Slide 3 text

޿ࠂͷϦΞϧλΠϜΦʔΫγϣϯ (RTB) ߴ͍Մ༻ੑཁ݅ɿࢭΊΒΕͳ͍ ˍ ଴ͬͯ͘Εͳ͍ ෆ࣮֬ͳ؀ڥɿ֎෦ͷଟ਺ͷೖࡳݩ(DSP)ʹৗ࣌઀ଓ ೖࡳ͕શͯἧΘͳ͍͜ͱ͸ڐ༰Ͱ͖Δ

Slide 4

Slide 4 text

ଟ਺ͷ֎෦઀ଓͷো֐͔ΒγεςϜΛकΓ͍ͨ * Photo by FEMA/Joselyne Augus5no; A home in Gilchrist, Texas, designed to resist flood waters survived Hurricane Ike in 2008.

Slide 5

Slide 5 text

֎෦઀ଓͷো֐ͱΞϓϩʔν ʮͪ͜Βʯͷҟৗɿ઀ଓͷ಺෦ঢ়ଶͷҟৗ ྫɿHTTP ΫϥΠΞϯτͷActorͷঢ়ଶҟৗ → SupervisorʹΑΔҟৗݕ஌ͱActorͷ࠶ىಈ ʮ͋ͪΒʯͷҟৗɿϨΠςϯγѱԽɾແԠ౴Խ ྫɿ઀ଓઌͷܭࢉࢿݯ΍ଳҬͷṧഭ → ॖୀ (fallback)ɿॏཁͰͳ͍ϝοηʔδΛࣺͯͯ ɹɹϝϞϦރׇ (OutOfMemoryError) Λ๷͙

Slide 6

Slide 6 text

ରࡦ1: BoundedMailboxΛ࢖͏ bounded-mailbox { mailbox-type = "akka.dispatch.NonBlockingBoundedMailbox" } ✅ ᷓΕͨΒϝοηʔδࣺͯΔͷͰϝϞϦރׇ๷͛Δ

Slide 7

Slide 7 text

❌ Ձ஋ͷߴ͍ϝοηʔδ͕ࣺͯΒΕΔ ؒʹ߹͏ݟࠐΈͷখ͍͞ೖࡳཁٻ͕࢒ͬͯ͠·͏

Slide 8

Slide 8 text

ରࡦ2: ༏ઌ౓͖ͭͷBoundedMailboxΛ࢖͏ bounded-mailbox { mailbox-type = "akka.dispatch.BoundedStablePriorityMailbox" mailbox-push-timeout-time = 0s } ✅ ᷓΕͨΒϝοηʔδࣺͯΔͷͰϝϞϦރׇ๷͛Δ ✅ Ձ஋ͷߴ͍ϝοηʔδΛ࢒ͤΔ

Slide 9

Slide 9 text

❌ ద༻࿙ΕͷActor͕͋ΔͱϝϞϦރׇ๷͛ͳ͍ UnboundedͳϝʔϧϘοΫεͷActor͕͋Γɺ͕ͦ͜ ཯଎ʹͳΔͱϝʔϧϘοΫε͕ᷓΕΔ

Slide 10

Slide 10 text

ରࡦ3: Akka StreamsΛ࢖͏ ϝοηʔδ͸ִนϊʔυ (bulkhead) Λհͯ͠௨৴ϊʔυ (subscriber) ʹBroadcastɻ ௨৴ϊʔυ͸֎෦ཁٻ׬ྃ·ͰϝοηʔδΛ্ྲྀʹཁٻ͠ͳ͍ɻ

Slide 11

Slide 11 text

ִนϊʔυ (bulkhead) val bulkhead = Flow .apply[MyMessage] .buffer( bulkheadBufferSize, OverflowStrategy.dropHead ) όοϑΝͷ࠷େαΠζΛ௒͑Δͱɺݹ͍ϝοηʔδ ΛࣺͯΔ ( dropHead )

Slide 12

Slide 12 text

௨৴ϊʔυ (subscriber) val subscriberA = Sink(ActorSubscriber[MyMessage](actorA)) class ProxyA extends Actor with ActorSubscriber { def receive = { case OnNext(msg: MyMessage) => hostConnector .ask(httpReq(msg)) .map(...) .onComplete(request(1)) ... ֎෦ཁٻͷ׬ྃΛ଴͔ͬͯΒ࣍ͷϝοηʔδΛ্ྲྀ (bulkhead) ʹཁٻ͢ΔͷͰɺ֎෦ཁٻͷաఔͷͲ͕͜ ཯଎ʹͳͬͯ΋ϝʔϧϘοΫε͕ᷓΕͳ͍

Slide 13

Slide 13 text

Akka StreamsΛ࢖͏ ✅ ᷓΕͨΒϝοηʔδࣺͯΔͷͰϝϞϦރׇ๷͛Δ ✅ Ձ஋ͷߴ͍ϝοηʔδΛ࢒ͤΔ ✅ ཯଎ཁҼ͕Ҡಈͯ͠΋࣮֬ʹॖୀͰ͖Δ

Slide 14

Slide 14 text

CA ProFit-X • 2015೥3݄ʹϦϦʔε • ౰ॳ͔ΒAkka StreamsʹΑΔ ॖୀॲཧΛ૊ࠐΈ • ݱࡏ͸ඵؒ໿1ສ݅ͷϦΞϧλ ΠϜΦʔΫγϣϯΛ҆ఆͯ͠ ॲཧ

Slide 15

Slide 15 text

·ͱΊ Akka StreamsΛ֎෦઀ଓͷॖୀͷͨΊʹ࢖͏͜ͱ Ͱɺʮ଴ͬͯ͘Εͳ͍ʯ؀ڥͰ֎෦઀ଓͷো֐ʢੑ ೳྼԽ ) ͔ΒγεςϜΛकΔྫΛ঺հ͠·ͨ͠ɻ ॲཧ଎౓ͱ͸ผͷ ଱ো֐ੑ ͷଆ໘ͰAkka StreamsΛ ׆༻͢Δྫͷ1ͭͱͯ͠ɺࢀߟʹͳΕ͹޾͍Ͱ͢ɻ