Actor Model in Reason
by
Yuki YAMADA
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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.