Slide 1

Slide 1 text

©2018 Wantedly, Inc. Actor Model in Reason Meguro.es #16 02.Aug.2018 - Yuki Yamada

Slide 2

Slide 2 text

©2018 Wantedly, Inc. Self Introduction

Slide 3

Slide 3 text

©2018 Wantedly, Inc. Yuki Yamada @yamadayuki I’m an Engineer @ Wantedly I write JS, Golang, Ruby, Swift … etc. Now I focus on Frontend Engineering at Feed squad. Self Introduction

Slide 4

Slide 4 text

©2018 Wantedly, Inc. Actor Model

Slide 5

Slide 5 text

©2018 Wantedly, Inc. Actor Model Actor Model ΞΫλʔͱ͍͏ঢ়ଶΛอͪॲཧΛ͢ΔΦϒδΣΫτ ͦΕͧΕ͕ Mailbox ͱ͍͏ΩϡʔͱΞυϨεΛ͍࣋ͬͯΔ ΞΫλʔୡ͸ͦΕͧΕࣗ෼ͷॲཧΛߦ͍ͭͭඞཁ͕͋Ε͹ଞ ͷΞΫλʔʹϝοηʔδΛૹͬͯॲཧΛ͓ئ͍͢Δ ͦΕͧΕͷॲཧ͸ඇಉظͰ࣮ߦ͞ΕΔͨΊɺฒߦॲཧͷͨΊ ͷϩοΫ΍ಉظ͕ෆཁʹͳΔ ݴޠϨϕϧͰ͸ Erlang ϥΠϒϥϦͰ͸ Akka (JVM) ͕୅දྫ

Slide 6

Slide 6 text

©2018 Wantedly, Inc. JavaScript Ͱ΋΍ͬͯΈ͍ͨ Actor Model

Slide 7

Slide 7 text

©2018 Wantedly, Inc. Ͱ΋ී௨ͷ JavaScript Ͱ ͏·͘Ͱ͖Δؾ͕͠ͳ͍ Actor Model

Slide 8

Slide 8 text

©2018 Wantedly, Inc. 1. OCaml • Statically typed, Functional, Pattern Matching 2. Erlang • Actor Model, Functional, Pattern Matching 3. JavaScript • Fun, Insanely flexible Actor Model

Slide 9

Slide 9 text

©2018 Wantedly, Inc. ؔ਺ܕݴޠͰ Pattern Matching ͷ ԸܙΛड͚ͭͭ Actor Model ΍Γ͍ͨ Actor Model

Slide 10

Slide 10 text

©2018 Wantedly, Inc. Actor Model

Slide 11

Slide 11 text

©2018 Wantedly, Inc. Actor Model Roppongi.js #1 ͰLT͠·ͨ͠ BuckleScript ϕʔεͰܕݕࠪͰ͖Δɺ Facebook ۘ੡ͷAltJS BuckleScript ͸ OCaml ΛίϯύΠϧ ͯ͠ JavaScript ʹ͢Δ΍ͭ https://speakerdeck.com/yamadayuki/react-with-reason

Slide 12

Slide 12 text

©2018 Wantedly, Inc. Actor Model ؔ਺ܕݴޠͰ Pattern Matching ͷ ԸܙΛड͚ͭͭ Actor Model Ͱ͖ͦ͏

Slide 13

Slide 13 text

©2018 Wantedly, Inc. Actor Model in Reason

Slide 14

Slide 14 text

©2018 Wantedly, Inc. Actor Model in Reason JS Ͱ Actor Model ncthbrt/nact , ncthbrt/reason-nact “Nact is redux but for the server.” Akka ΍ Erlang ͷΞϓϩʔνΛࢀߟʹ Node.js Ͱ΋ Actor Model ͕࣮ݱͰ͖ΔΑ͏ʹ࡞ΒΕͨϥΠϒϥϦ DENQUE (https://github.com/Salakar/denque) ͱ Promise ϕʔεͰ࣮૷͞Ε͍ͯΔ Timeout ΍ Supervision ΋αϙʔτ͞Ε͍ͯΔ JavaScript ͔Β΋ Reason/BuckleScript ͔Β΋࢖͑Δ

Slide 15

Slide 15 text

©2018 Wantedly, Inc. Actor Model in Reason Getting Started ѫࡰΛฦͯ͘͠ΕΔΞΫλʔͷੜ੒ “spawnStateless” ͱ͍͏ؔ਺ͰΞΫλʔ͕ੜ੒ Ͱ͖Δ ΞΫλʔʹରͯ͠ “dispatch” ͱ͍͏ؔ਺Ͱϝο ηʔδΛૹΔ͜ͱͰɺॲཧΛ࣮ߦͤ͞Δ͜ͱ͕ Ͱ͖Δ

Slide 16

Slide 16 text

©2018 Wantedly, Inc. Actor Model in Reason spawnStateless “Stateless” ͱ suffix ͕͍͍ͭͯΔ͚ͩ͋ͬͯɺ ͜ͷؔ਺Ͱ͸ State Λ࣋ͬͨΞΫλʔΛੜ੒Ͱ ͖ͳ͍ ͦͷͨΊɺ࣮ߦͯ͠΄͍͠ॲཧ͚ͩΛ೚ͤΔ͜ ͱ͔͠Ͱ͖ͳ͍ɻ࣮ߦͨ݁͠ՌͩͬͨΓΛ࣍ʹ ࢖͍ճ͢ͱ͔͸Ͱ͖ͳ͍

Slide 17

Slide 17 text

©2018 Wantedly, Inc. Actor Model in Reason spawn ݟͨ໨ “Stateless” ͷ suffix ͕औΕ͚ͨͩ ͜ͷؔ਺Ͱ͸ State Λ࣋ͬͨΞΫλʔΛੜ੒Ͱ ͖Δ ӈͷίʔυ͸ counter ͷ࣮૷ amount Λࢦఆͯ͠૿΍͢ྔΛϝοηʔδͰૹ Δͱɺ͍·ͷঢ়ଶͷ amount ʹՃࢉ͞Εͯίϯ ιʔϧʹग़ྗ͞ΕΔɻ

Slide 18

Slide 18 text

©2018 Wantedly, Inc. Actor Model in Reason spawn ॲཧΛهड़͢Δؔ਺ͷୈ1Ҿ਺ʹ State ͕౉ͬͯ ͘ΔͷͰɺͦΕΛར༻ͯ͠ॲཧΛߦ͑Δ 12ߦ໨͸͜ͷΞΫλʔ͕ॳظԽ͞Εͨ࣌఺Ͱͷ initial state Λฦ͍ͯ͠Δ ͳͷͰ state ʹ͸ {amount: int} ͱ͍͏ํ͕౉ͬ ͯ͘Δ

Slide 19

Slide 19 text

©2018 Wantedly, Inc. Actor Model in Reason Communication ΞΫλʔಉ࢜Ͱ௨৴͢Δͱ͖ɺྫ͑͹ϝοηʔ δͷૹΓओ͕ඞཁͳ৔߹͕͋Δ ϝοηʔδΛૹΔͱ͖ʹࣗ෼ࣗ਎Λϝοηʔδ ʹՃ͑Δ͜ͱͰɺϝοηʔδΛड͚औͬͨଆͰ ΋ૹΓओΛ஌Δ͜ͱ͕Ͱ͖Δ ΞΫλʔࣗମ͸ actorRef(msgType) ͷΑ͏ͳ ܕʹͳΔͷͰɺϝοηʔδͷܕΛఆٛ͢Δ࣌ʹ ར༻͢Δ

Slide 20

Slide 20 text

©2018 Wantedly, Inc. Actor Model in Reason Communication pong ͔Β ping ʹϝοηʔδΛૹΔͱ͜Ζ 7ߦ໨Ͱ sender(ping or pong) ʹରͯ͠ ctx.self Λϝοηʔδʹ֨ೲͯ͠ૹΔΑ͏ʹͳͬ ͍ͯΔ ctx.self ͸ΞΫλʔࣗ਎ʹͳ͍ͬͯͯɺϝοηʔ δΛड͚औΔଆͰ΋ૹΓओ͕Θ͔Δ “<-<” ͱ͍͏ͷ͸ಠࣗʹఆٛ͞ΕͨΦϖϨʔλͰ dispatch ͷγϣʔτϋϯυ

Slide 21

Slide 21 text

©2018 Wantedly, Inc. Actor Model in Reason Supervision ΋͠ΞΫλʔ͕Ϋϥογϡͨ͠৔߹ɺඇಉظॲ ཧͷҰ࿈ͷྲྀΕΛࢭΊͳ͍ͨΊʹ΋෮׆ͤ͞Δ ඞཁ͕͋Δ Ϋϥογϡͨ͠ͱ͖ʹ෮׆Ͱ͖ΔΑ͏ʹ supervisor Λ༻ҙ͢Δ͜ͱͰɺࣗಈతʹΞΫ λʔΛ෮׆ͤ͞ΒΕΔ

Slide 22

Slide 22 text

©2018 Wantedly, Inc. DEMO Actor Model in Reason

Slide 23

Slide 23 text

©2018 Wantedly, Inc. 1. νϟοτͷΑ͏ͳΠϕϯτϕʔεͷαʔό 2. ඇಉظδϣϒΩϡʔγεςϜ Actor Model in Reason Actor Model ͷ࢖͍ॴ

Slide 24

Slide 24 text

©2018 Wantedly, Inc. JSͰϓϩτλΠϐϯάͰ͖Δʂ Actor Model in Reason

Slide 25

Slide 25 text

©2018 Wantedly, Inc. 1. Actor Model Λ࢖ͬͯඇಉظॲཧΛ͍͍ײ͡ʹ 2. nact ͸ Reason Ͱهड़Ͱ͖ΔͷͰܕͷԸܙ͕͋Δ 3. Reason ָ͍͠ Actor Model in Reason ·ͱΊ

Slide 26

Slide 26 text

©2018 Wantedly, Inc. Actor Model in Reason Meguro.es #16 02.Aug.2018 - Yuki Yamada Fin.