$30 off During Our Annual Pro Sale. View Details »

Akka Streams とScala で実装する マルチメディア・オンラインサーバの世界 / Realtime-Server using Akka Streams and Scala

Akka Streams とScala で実装する マルチメディア・オンラインサーバの世界 / Realtime-Server using Akka Streams and Scala

サーバーサイドのストリーム処理ライブラリとして Akka Stremas を選択し、チャットサーバからオンラインゲームサーバまで実装を試みた内容についてレポートします。これからのリアルタイムデータ処理に Akka Streams と Scala がどのように寄与するかも考えます。

Yusuke Wada

July 01, 2017
Tweet

More Decks by Yusuke Wada

Other Decks in Technology

Transcript

  1. "LLB4USFBNTͱ4DBMBͰ࣮૷͢Δ
    ϚϧνϝσΟΞɾΦϯϥΠϯαʔόͷੈք
    DNEFWJP

    View Slide

  2. ࿩͢಺༰
    w ࠓ೔΍Δ͜ͱɺ࢖͏ٕज़
    w จࣈνϟοτͷ࣮૷
    w ϏσΦνϟοτͷ࣮૷
    w ΦϯϥΠϯήʔϜαʔόͷ࣮૷
    w "LLBͱ4DBMB࢖ͬͯͲ͏͔ͩͬͨ
    w ·ͱΊ
    NJO
    NJO
    NJO
    NJO
    NJO
    NJO

    View Slide

  3. ࣗݾ঺հ
    w ࿨ా༞հ
    w ೥݄೔
    w ۀ຿4DBMB1MBZ
    w 5XJUUFS!XBEEZ@V
    w झຯ૲໺ٿ

    View Slide


  4. ࠓ೔͸
    Akka Streams Λ࢖ͬͯ
    ϦΞϧλΠϜαʔόΛ࡞ͬͯΈ·͢ʂ

    View Slide

  5. "LLBΛ࢖͏
    "LLB
    ฒྻॲཧͷͨΊͷϥΠϒϥϦ +BWB4DBMB
    ɻ

    $IBU8PSLαʔόͷνϟοτϝοηʔδ3FBE8SJUF"1*
    Ͱ׆༻͞Ε͍ͯΔɻ
    "LLB4USFBNT
    ແݶʹൃੜ͢ΔσʔλΛѻ͏ͨΊͷϥΠϒϥϦɻϓϩμΫτ
    ͩͱओʹϩάͷৼΓ෼͚΍όονॲཧͰར༻͞Ε͍ͯΔɻ

    View Slide

  6. ͳͥ"LLB ٕज़తͳ໘ന͞
    ۀ຿Ͱ"LLB੡ͷϫʔΧʔΛ࡞Δػձ͕͋ͬͨ
    w "LLB"DUPS୯ҐͷॲཧઃܭͰߴϝϯςφϯεੑ
    w 4DBMBͷύλʔϯϚονϯάͱͷߴ਌࿨ੑ
    w "LLBͷϙςϯγϟϧ͸·ͩ·ͩ͋Δ
    Akka ͜ͱ͸͡Ί - Developers IO
    http://dev.classmethod.jp/server-side/akka-worker/

    View Slide

  7. ͳͥ"LLB ϦΞϧλΠϜlᅂ޷z
    ͍Ζ͍ΖͳσόΠε͕Πϯλʔωοτʹͭͳ͕Δ࣌୅
    தܧ໾͕ཁΔɻ8FC"1*͸ࠓޙ΋ܗͦ͜ม͑ΕͲඞཁͱ͞ΕΔ͸
    ͣɻαʔόαΠυΞϓϦͷ࢓ࣄ͸૿͑ଓ͚Δɻ
    10454UPSF(&5͔Β4USFBN΁
    ͋ΔΫϥΠΞϯτ͕ɺίϯςϯπΛऔಘ͠Α͏ͱࢥͬͨΒɺʮ୭͔
    ͕ߋ৽ͯ͠อଘͨ͠σʔλΛͱΓʹ͍͘ʯͱ͍͏खॱʹͳΔɻͦ͏
    Ͱ͸ͳ͘ɺʮ୭͕ݟΔ͔͸Θ͔Βͳ͍͚ͲͱΓ͋͑ͣྲྀ͢ɻྲྀΕͯ
    ͖ͨσʔλ͸ղऍͰ͖Δਓ͕͔͠Δ΂͖खஈͰίϯςπͱͯ͠දࣔ
    ͢Δʯํ͕ࣜओྲྀʹͳ͍ͬͯ͘ʜ͔΋͠Εͳ͍ɻ

    View Slide

  8. ͳͥ"LLB ೔ຊޠͷࢿྉ͕গͳ͍
    ͱ͖ͬͭʹ͍͘
    http://doc.akka.io/docs/akka/current/scala/guide/introduction.html http://freecontent.manning.com/akka-in-action-why-use-clustering/

    View Slide

  9. φΠεͳϥΠϒϥϦͳͷͰʜ
    গ͠Ͱ΋਌͠ΈΛ࣋ͬͯཉ͍͠

    View Slide

  10. ΍Δ͜ͱɺ΍Βͳ͍͜ͱ
    ΍Δ͜ͱ
    "LLB4USFBNTΛ࢖ͬͯྫ͑͹ͲΜͳ΋ͷ͕࡞ΕΔ͔ʁ

    ͦͷͱ͖ͲΜͳײ͡ͷιʔείʔυʹͳΔͷ͔ʁ

    ࣮ߦ͢ΔͱͲ͏ͳΔ͔ʁ
    ΍Βͳ͍͜ͱ
    "LLBΛ࢖͏͜ͱʹΑΔ଱ো֐ੑɺεέʔϥϏϦςΟɺ͓Α
    ͼ࣮૷ͨ͠ΞϓϦέʔγϣϯͷύϑΥʔϚϯεݕূ͸ɺ࣮ࢪ
    ͠·ͤΜɻ

    View Slide

  11. ٕज़બ୒ͷީิΛ૿΍͍ͯͨͩ͘͜͠ͱ͕ΰʔϧ
    αʔόʔαΠυΞϓϦέʔγϣϯͷٕज़બ୒͸ແݶ
    αʔόʔαΠυΞϓϦέʔγϣϯͳͷʹαʔόʔϨε͕બ୒ࢶʹڍ
    ͕Δ࣌୅ʢଞηογϣϯࢀরʣɻ
    ΠϯϑϥϨΠϠͷίʔσΟϯάɺϞχλϦϯάɺώʔϦϯάखஈ͕
    ॆ࣮͠ɺ΋ͱ΋ͱϛυϧ΢ΣΞ͕୲͍ͬͯͨ໾ׂ෼Խͳ͍͠αʔϏ
    εԽɻ
    ͱ͸͍͑ɺ"LLBؚΊͯ͋͘·ͰखஈɻαʔόʔαΠυΞϓϦέʔ
    γϣϯͷ࣮ݱํ๏ͱͯ͠ʮ͜͏͍͏ͷ΋͋ΔΜͩʯΛ࣋ͪؼͬͯཉ
    ͍͠ͱࢥ͍ͬͯ·͢ɻ

    View Slide

  12. "LLB4USFBNTͰαʔόʔαΠυΞϓϦέʔγϣϯ
    จࣈνϟοτͷ࣮૷

    View Slide

  13. ਐΊํ
    ͲΜͳ΋ͷΛ࡞͔ͬͨ
    ػೳΛ੔ཧ͢Δ
    ࢖ٕͬͨज़ʹ͍ͭͯઆ໌͢Δ
    ιʔείʔυΛಡΉ

    View Slide

  14. ͲΜͳ΋ͷΛ࡞͔ͬͨ
    "OHVMBS3Y+48FC4PDLFUͰνϟοτΞϓϦΛ࡞Δ
    IUUQEFWDMBTTNFUIPEKQDMJFOUTJEFBOHVMBSSYKTXFCTPDLFUDIBU

    View Slide

  15. ػೳΛ੔ཧ͢Δ
    αʔό1VCMJTI4VCTDSJCFνϟωϧ
    ΫϥΠΞϯτϑΥʔϜೖྗͱ1VCMJTI
    ΫϥΠΞϯτ4VCTDSJCFͱը໘ඳը

    View Slide

  16. ࢖ٕͬͨज़ʹ͍ͭͯઆ໌͢Δ
    "OHVMBS
    ը໘ͷඳըͱ"LLB4USFBNT΍ΓͱΓͰར༻ɻ
    3Y+4
    8FC4PDLFUͰ઀ଓͨ͠"LLB4USFBNTͷσʔλΛϦΞΫςΟϒʹॲཧ͢Δɻ
    "LLB4USFBNT
    νϟοτϝοηʔδͷू໿ͱϒϩʔυΩϟετͷͨΊʹར༻ɻ

    1VCMJTI4VCTDSJCFνϟωϧɻ
    8FC4PDLFU
    ௨৴ϓϩτίϧͰ)551ΑΓ΋ϦΞϧλΠϜੑ͕ߴ͍ͪ͜ΒΛ࠾༻ɻ

    View Slide

  17. "OHVMBS
    8FCΞϓϦΛߏங͢ΔͨΊͷϑϨʔϜϫʔΫ
    5FNQMBUF
    )5.-จॻΛ֦ுͯ͠ɺ"OHVMBSಛ༗ͷهड़Λߦ
    ͏͜ͱʹΑΓ%0.ߏ଄ͷ܁Γฦ͠΍ɺΫϦοΫΠ
    ϕϯτʹ൓Ԡͯ͠σʔλΛߋ৽͢Δ͜ͱ͕Մೳɻ
    σʔλͷରͱͳΔ$PNQPOFOU͕࣮ߦ͢Δɻ
    $PNQPOFOU
    5FNQMBUFͱηοτɻϏϡʔͰར༻͢ΔσʔλΛ
    ༻ҙͨ͠ΓɺٯʹϏϡʔͰൃੜͨ͠ΠϕϯτΛݕ
    ஌ͯ͠ޙड़ͷ4FSWJDF΁ॲཧΛҕৡ͢Δɻ
    4FSWJDF
    "OHVMBSͰ͸%*ͷ࢓૊ΈΛಋೖ͢Δ͜ͱʹΑΓɺ
    ͋ΒΏΔίϯϙʔωϯτ͔ΒOFX͢Δ͜ͱͳ͘σʔ
    λ$63%ͳͲͷϩδοΫΛݺͼग़͢ɻ֎෦ͱͷ௨
    ৴ͳͲ΋͜͜Ͱߦ͏ɻ

    View Slide

  18. "LLB4USFBNT
    4PVSDFσʔλൃੜݯ
    4JOLσʔλग़ྗઌ
    'MPXσʔλॲཧ
    ෦඼Λ૊Έ߹ΘͤͯάϥϑΛ࡞
    Δɻ࡞ͬͨάϥϑΛ࣮ߦ͢Δɻ

    View Slide

  19. "LLB4USFBNT
    4PVSDFσʔλൃੜݯ
    4JOLσʔλग़ྗઌ
    'MPXσʔλॲཧ
    ෦඼Λ૊Έ߹Θͤͯɺ

    νϟοτγεςϜͷʮϝοηʔδόεʯΛ

    ࡞Δ͜ͱ͕Ͱ͖Ε͹0,

    View Slide

  20. ΈΜͳͰ
    ιʔείʔυϦʔσΟϯάλΠϜ
    ηογϣϯͰ࿩ͨ͠ϙΠϯτ
    w 8FC4PDLFUͷೖग़ྗʹ'MPX<+T7BMVF +T7BMVF>Λͭͳ͛
    Δ͜ͱͰ؆୯ʹαʔόΛߏஙͰ͖Δɻ
    w #SPBEDBTU)VC .FSHF)VCΛ࢖͏͜ͱͰಈతͳάϥϑΛ
    ఆٛ͢Δ͜ͱ͕Մೳɻ͜ΕΛ1VCMJTI4VCTDSJCFνϟω
    ϧʹ͢Δɻ

    View Slide

  21. "LLB4USFBNTͰαʔόʔαΠυΞϓϦέʔγϣϯ
    ϏσΦνϟοτͷ࣮૷

    View Slide

  22. ࿩͢಺༰
    ͲΜͳ΋ͷΛ࡞͔ͬͨ
    ϏσΦνϟοτͳΒͰ͸ͷཁૉ
    ΫϥΠΞϯταΠυͷιʔείʔυΛಡΉ

    View Slide

  23. ͲΜͳ΋ͷΛ࡞͔ͬͨ
    "OHVMBSͱ"LLB4USFBNTͰଟରଟͷϏσΦνϟοτ

    IUUQEFWDMBTTNFUIPEKQDMJFOUTJEFWJEFPDIBUNFEJBTPVSDFFYUFOTJPOT

    View Slide

  24. ϏσΦνϟοτͳΒͰ͸ͷཁૉ
    )5.-.FEJB4PVSDF&YUFOTJPOTར༻
    ө૾ͷऔಘͱඳըΛߦ͏"1*ɻ
    ϝοηʔδ͕จࣈྻͰ͸ͳ͘όΠφϦ
    "LLB4USFBNTͷجຊతͳߏ੒͸มΘΒͳ͍ɻ
    ϝϯόʔදͷ؅ཧ͕৽ͨʹඞཁ
    ࢀՃϢʔβݸผͰϝοηʔδόεΛ༻ҙ͢Δɻ

    View Slide

  25. )5.-.FEJB4PVSDF&YUFOTJPOT
    όΠφϦσʔλΛϒϥ΢β"1*ܦ༝Ͱૢ࡞Ͱ͖Δ

    View Slide

  26. όΠφϦΛѻ͏ϝϯόʔදͷ؅ཧ͕ඞཁʹͳΔ

    View Slide

  27. ओʹΫϥΠΞϯταΠυ
    ιʔείʔυϦʔσΟϯάλΠϜ
    ηογϣϯͰ࿩ͨ͠ϙΠϯτ
    w ϝϯόʔ͕૿͑Δͱɺ"OHVMBSͷίϯϙʔωϯτ͕উखʹWJEFP
    λάΛ࡞Δɻ
    w WJEFPλάͷσʔλιʔεͱͯ͠$PNQPOFOU͕ө૾ͷόΠφ
    ϦσʔλΛྲྀ͢ɻ
    w 8FC35$ͱ͸ผͷܗͰଟରଟͷϏσΦνϟοτΛ࡞Δ͜ͱ͕Ͱ
    ͖Δɻ

    View Slide

  28. "LLB4USFBNTͰαʔόʔαΠυΞϓϦέʔγϣϯ
    ήʔϜαʔόͷ࣮૷

    View Slide

  29. ࿩͢಺༰
    ͭͬͨ͘΋ͷ࣮ԋ
    ήʔϜαʔόͳΒͰ͸ͷཁૉ
    ιʔείʔυϦʔσΟϯάλΠϜ

    View Slide

  30. ͭͬͨ͘΋ͷΦϯϥΠϯϚϧόπήʔϜαʔό

    View Slide

  31. ήʔϜαʔόͳΒͰ͸ͷཁૉ
    ήʔϜͷঢ়ଶΛӬଓԽ
    3FEJTʹ+40/ͱͯ͠อଘ͢Δɻ
    lίϚϯυzͰήʔϜঢ়ଶΛߋ৽
    ͨͩσʔλΛྲྀ͚ͩ͢Ͱͳ͘ɺϩδοΫΛద༻͢Δɻ
    ӬଓԽͨ͠ঢ়ଶΛҰఆִؒͰૹग़
    ྲྀΕͯ͘ΔσʔλΛͦͷ··ར༻͢Δ͜Ε·Ͱͱ͸ҟͳΔɻ

    View Slide

  32. ήʔϜαʔόུ֓ਤ
    ϓϨΠϠʔ͸$PNNBOEΛૹ৴͢Δ
    ήʔϜαʔό͸ήʔϜϩδοΫΛద༻͠3FEJTΛߋ৽͢Δ
    ήʔϜαʔό͸ҰఆִؒͰ(BNF4UBUVTΛૹग़͢Δ

    View Slide

  33. "LLB4USFBNTͰ͜Μͳ͜ͱ΋Ͱ͖Δ
    ιʔείʔυϦʔσΟϯάλΠϜ
    ηογϣϯͰ࿩ͨ͠ϙΠϯτ
    w 4USFBNࣗ਎͕ೳಈతʹϝοηʔδΛൃੜͤ͞Δ 3FEJTͷঢ়
    ଶΛಡΈࠐΊͱ͍͏໋ྩ
    ɻ
    w ϝοηʔδΛड͚औͬͨΒ3FEJT͔Βঢ়ଶΛಡΈࠐΜͰྲྀ͢ɻ
    w 4USFBN಺ͷ'MPXͰύλʔϯϚονΛ༻͍Δ͜ͱͰɺϢʔ
    βʔ͔ΒͷίϚϯυͳͷ͔ɺೳಈతͳ໋ྩͳͷ͔൑ผ͕Մೳɻ

    View Slide

  34. ٞ࿦ɿϦΞϧλΠϜαʔόʹ͓͍ͯ"LLB͸Ͳ͏͔
    4USFBNTͰ1VCMJTI4VCTDSJCFߏஙՄೳ
    .FSHF)VCͱ#SPBEDBTU)VCͰ8FC4PDLFUͷೖग़ྗΛ
    ಈతʹͭͳ͙͜ͱ͕Ͱ͖ΔɻଟରଟͷϦΞϧλΠϜαʔόߏ
    ஙύλʔϯͷͻͱͭɻ
    ྲྀྔ΍σʔλൃੜස౓ͷௐ੔͕Մೳ
    ཁ݅ʹԠͯ͡ෛՙͷ੍ޚ͕Մೳɻ͜Ε͸"LLB4USFBNTඪ
    ४ػೳͱͯ͠උΘ͍ͬͯΔɻ

    View Slide

  35. ٞ࿦ɿϦΞϧλΠϜαʔόʹ͓͍ͯ4DBMB͸Ͳ͏͔
    ྲྀΕΔϝοηʔδʹܕ৘ใΛ࣋ͨͤΔ͜ͱ͕Ͱ͖Δ
    *OQVU͕ԿͰɺ0VUQVU͕Կͷ෦඼ͳͷ͔໌Β͔ɻܕ৘ใ͕
    ෆਖ਼ͳ෦඼Λ૊Έ߹ΘͤΑ͏ͱ͢ΔͱίϯύΠϧΤϥʔʹͳ
    ΔɻϥϯλΠϜΤϥʔͰ͸ͳ͍ɻ
    ύλʔϯϚονʹΑΔೖग़ྗͷ੍ޚ
    σʔλͷγϦΞϥΠζɺσγϦΞϥΠζͰ׆༂ɻෆਖ਼ͳσʔ
    λͷ৵ೖΛ๷͙ͱͱ΋ʹɺग़ྗ͢ΔσʔλͷܕΛอূ͢Δɻ

    View Slide

  36. ·ͱΊ
    "LLB4USFBNT
    ࠓճͷओ໾ɻ࣮ݱखஈ͕๛෋ͳαʔόʔαΠυΞϓϦʹ͓͍ͯϦΞϧλΠϜੑΛٻΊΔͱ
    ͖ʹͥͻߟྀʹೖΕ͍ͨͰ͢ɻ
    "OHVMBS
    ϫϯετοϓͰσʔλतड͔Βը໘ඳը·ͰΠέΔφΠεͳ8FCΞϓϦέʔγϣϯϑϨʔ
    ϜϫʔΫɻ4FSWJDFͰ8FC4PDLFUͷॲཧΛӅṭ͔ͯͭ͠$PNQPOFOUʹ%*Ͱ͖Δ఺͕
    ϞδϡʔϧੑߴͰૉ੖Β͍͠ͱࢥ͍·ͨ͠ɻ
    )5.-.FEJB4PVSDF&YUFOTJPOT
    'MBTI΍4JMWFSMJHIUͱ͍ͬͨϦονͳ֦ுΛ࢖͏͜ͱͳ͘ϝσΟΞΛϒϥ΢βͰѻ͏ͨΊ
    ͷ"1*܈ɻࠓճ͔ͳΓॿ͔Γ·ͨ͠ɻ4BGBSJͰ΋࢖͑ΔΑ͏ʹͳΕ͹εϚʔτϑΥϯΛ௨
    ͯ͠Ұؾʹීٴ͢ΔͷͰ͸ɻ

    View Slide

  37. ηογϣϯͰར༻ͨ͠ιʔείʔυ͸ͪ͜Β
    αʔόʔαΠυ"LLB4USFBNT
    EFWFMPQFSTJPNFEJBTFSWFSXFCTPDLFUBLLBTUSFBN

    IUUQTHJUIVCDPNDNXBEBZVTVLFEFWFMPQFSTJP
    USFFNBTUFSNFEJBTFSWFSXFCTPDLFUBLLBTUSFBN
    ΫϥΠΞϯταΠυ"OHVMBS
    EFWFMPQFSTJPBOHVMBSNFEJBTUSFBNBQQ

    IUUQTHJUIVCDPNDNXBEBZVTVLFEFWFMPQFSTJP
    USFFNBTUFSBOHVMBSNFEJBTUSFBNBQQ

    View Slide

  38. ࢀߟ
    w "LLBIUUQBLLBJP
    w "OHVMBSIUUQTBOHVMBSJP
    w .FEJB4PVSDF&YUFOTJPOTäIUUQTXXXXPSH53NFEJBTPVSDF
    w .FEJB4PVSDFIUUQTEFWFMPQFSNP[JMMBPSHKBEPDT8FC"1*.FEJB4PVSDF
    w 8FC4PDLFUTIUUQTXXXQMBZGSBNFXPSLDPNEPDVNFOUBUJPOY4DBMB8FC4PDLFUTXFCTPDLFUT

    View Slide