Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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.