「Scala将軍達の後の祭り」での発表資料です。
http://scala-syogun-matsuri.connpass.com/event/28124/
Akka StreamsͷॖୀॲཧΛ༻͍ͨোੑͷ࣮ݱʙ ࠂͷϦΞϧλΠϜΦʔΫγϣϯͷࣄྫ ʙ
View Slide
ࣗݾհ@ikuo (Ikuo Matsumura)2008~ ࠐܥͷࢄγϛϡϨʔγϣϯͷઃܭ։ൃͳͲ; C++, MATLABIBM Research - Tokyo2011~ ϨγϐӫཆՁͷࣗಈܭࢉͷઃܭ։ൃͳͲ; Ruby/Rails, TreetopCookpad, Inc.2014~ SSP/RTBΦʔΫγϣϯͷઃܭ։ൃͳͲ; Scala/AkkaCyberAgent, Inc.CA ProFit-X team
ࠂͷϦΞϧλΠϜΦʔΫγϣϯ (RTB)ߴ͍Մ༻ੑཁ݅ɿࢭΊΒΕͳ͍ ˍ ͬͯ͘Εͳ͍ෆ࣮֬ͳڥɿ֎෦ͷଟͷೖࡳݩ(DSP)ʹৗ࣌ଓೖࡳ͕શͯἧΘͳ͍͜ͱڐ༰Ͱ͖Δ
ଟͷ֎෦ଓͷো͔ΒγεςϜΛकΓ͍ͨ* Photo by FEMA/Joselyne Augus5no; A home in Gilchrist, Texas, designed to resist floodwaters survived Hurricane Ike in 2008.
֎෦ଓͷোͱΞϓϩʔνʮͪ͜Βʯͷҟৗɿଓͷ෦ঢ়ଶͷҟৗྫɿHTTP ΫϥΠΞϯτͷActorͷঢ়ଶҟৗ→ SupervisorʹΑΔҟৗݕͱActorͷ࠶ىಈʮ͋ͪΒʯͷҟৗɿϨΠςϯγѱԽɾແԠԽྫɿଓઌͷܭࢉࢿݯଳҬͷṧഭ→ ॖୀ (fallback)ɿॏཁͰͳ͍ϝοηʔδΛࣺͯͯɹɹϝϞϦރׇ (OutOfMemoryError) Λ͙
ରࡦ1: BoundedMailboxΛ͏bounded-mailbox {mailbox-type = "akka.dispatch.NonBlockingBoundedMailbox"}✅ ᷓΕͨΒϝοηʔδࣺͯΔͷͰϝϞϦރׇ͛Δ
❌ Ձͷߴ͍ϝοηʔδ͕ࣺͯΒΕΔؒʹ߹͏ݟࠐΈͷখ͍͞ೖࡳཁٻ͕ͬͯ͠·͏
ରࡦ2: ༏ઌ͖ͭͷBoundedMailboxΛ͏bounded-mailbox {mailbox-type = "akka.dispatch.BoundedStablePriorityMailbox"mailbox-push-timeout-time = 0s}✅ ᷓΕͨΒϝοηʔδࣺͯΔͷͰϝϞϦރׇ͛Δ✅ Ձͷߴ͍ϝοηʔδΛͤΔ
❌ ద༻࿙ΕͷActor͕͋ΔͱϝϞϦރׇ͛ͳ͍UnboundedͳϝʔϧϘοΫεͷActor͕͋Γɺ͕ͦ͜ʹͳΔͱϝʔϧϘοΫε͕ᷓΕΔ
ରࡦ3: Akka StreamsΛ͏ϝοηʔδִนϊʔυ (bulkhead) Λհͯ͠௨৴ϊʔυ (subscriber) ʹBroadcastɻ௨৴ϊʔυ֎෦ཁٻྃ·ͰϝοηʔδΛ্ྲྀʹཁٻ͠ͳ͍ɻ
ִนϊʔυ (bulkhead)val bulkhead =Flow.apply[MyMessage].buffer(bulkheadBufferSize,OverflowStrategy.dropHead)όοϑΝͷ࠷େαΠζΛ͑Δͱɺݹ͍ϝοηʔδΛࣺͯΔ ( dropHead )
௨৴ϊʔυ (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) ʹཁٻ͢ΔͷͰɺ֎෦ཁٻͷաఔͷͲ͕͜ʹͳͬͯϝʔϧϘοΫε͕ᷓΕͳ͍
Akka StreamsΛ͏✅ ᷓΕͨΒϝοηʔδࣺͯΔͷͰϝϞϦރׇ͛Δ✅ Ձͷߴ͍ϝοηʔδΛͤΔ✅ ཁҼ͕Ҡಈ࣮ͯ֬͠ʹॖୀͰ͖Δ
CA ProFit-X• 20153݄ʹϦϦʔε• ॳ͔ΒAkka StreamsʹΑΔॖୀॲཧΛࠐΈ• ݱࡏඵؒ1ສ݅ͷϦΞϧλΠϜΦʔΫγϣϯΛ҆ఆͯ͠ॲཧ
·ͱΊAkka StreamsΛ֎෦ଓͷॖୀͷͨΊʹ͏͜ͱͰɺʮͬͯ͘Εͳ͍ʯڥͰ֎෦ଓͷোʢੑೳྼԽ ) ͔ΒγεςϜΛकΔྫΛհ͠·ͨ͠ɻॲཧͱผͷ োੑ ͷଆ໘ͰAkka StreamsΛ׆༻͢Δྫͷ1ͭͱͯ͠ɺࢀߟʹͳΕ͍Ͱ͢ɻ