Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Elixir cluster

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Elixir cluster

Avatar for Yutaka Nishimura

Yutaka Nishimura

September 05, 2016
Tweet

More Decks by Yutaka Nishimura

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ w ג ϑΝϯίϛϡχέʔγϣϯζ w ٕज़։ൃ෦ w αʔόαΠυɺΠϯϑϥ w +BWB4DBMB

    w 3FETIJGU 5SFBTVSF%BUB "VSPSB 4QBSL w ࠷ۙɺ&MJYJS৮͍ͬͯ·͢ɻ
  2. &MJYJSͷಛ௃ w ϓϥοτϑΥʔϜ w 4DBMBCJMMJUZεέʔϧ͠΍͢͞ w 'BVMUUPMFSBODFରো֐ੑ w ݴޠ w

    'VODUJPOBMQSPHSBNNJOHؔ਺ܕϓϩάϥϛϯά w &YUFOTJCJMJUZBOE%4-T֦ு͠΍͢͞ͱ%4- w πʔϧʢΤίγεςϜͱର࿩؀ڥʣ
  3. ϕʔε͸ʮϊʔυʯ w ϊʔυ͸#&".7. w #&".7.͸ɺ&SMBOH&MJYJSͷ࣮ߦ؀ڥ w 04ͷ֤छػೳΛ଱ো֐ੑΛߴΊͯಠࣗʹ࠶࣮૷ͯ͠Δ7. w ΫϥελϦϯάػೳΛݴޠ7.ϨϕϧͰඪ४αϙʔτ w

    ઀ଓͰ͖Δϊʔυ w ϩʔΧϧ-"/Πϯλʔωοτ w ϊʔυؒͰͰ͖Δ͜ͱ w ϩʔΧϧϊʔυͰͰ͖Δ͜ͱʢϓϩηεىಈɺॲཧ࣮ߦͳͲʣ͸΄΅Ͱ͖Δɻ w 4FSWFS$MJFOUΑΓ΋ɺ1FFS1FFSʹ͍ۙ
  4. ಈ࡞Πϝʔδ $MVTUFS #&". /PEF!MPDBMIPTU #&". /PEF!MPDBMIPTU -"/ #&". /PEF!IPTU@UXP )PTU

    #&". OPEF!YDPN 8"/ ϓϩηε"  ϓϩηεىಈ  ॲཧ࣮ߦ  ࣮ߦ݁Ռฦૹ ̍ ̎ ̏ ϓϩάϥϜ ϓϩηε#
  5. )FMMP8PSME w MPDBMIPTUͰىಈͨ͠ϊʔυؒͰ)FMMP8PSME % iex --sname one iex(one@huracan)1> % iex

    --sname two iex(two@huracan)1> Node.connect(:'one@huracan') true iex(two@huracan)2> Node.list [:one@huracan] iex(two@huracan)3> Node.spawn_link(Node.list |> hd, fn -> IO.puts ‘Hello World, in #{Node.self}' end) #PID<8477.68.0> Hello World, in one@huracan
  6. ϊʔυͰࢼ͢ʢ̍ʣ ϊʔυ઀ଓ͢Δ % iex --sname one --cookie cookie1 iex(one@huracan)1> %

    iex --sname three --cookie cookie1 iex(three@host_b)1> Node.connect(:'one@huracan') true iex(three@host_b)2> Node.connect(:'two@huracan') true iex(three@host_b)3> Node.list [:one@huracan, :two@huracan] % iex --sname two --cookie cookie1 iex(two@huracan)1>
  7. ϊʔυͰࢼ͢ʢ̎ʣ ϓϩάϥϜΛఆٛ͢Δ % iex --sname one --cookie cookie1 iex(one@huracan)1> defmodule

    Hello do ...(one@huracan)1> def hello(name) do ...(one@huracan)1> IO.puts 'Hello #{name}, in #{Node.self}.' ...(one@huracan)1> end ...(one@huracan)1> end iex(one@huracan)2> Hello.hello(‘foo’) Hello foo, in one@huracan. % iex --sname two --cookie cookie1 iex(two@huracan)1> defmodule Hello do … লུ iex(two@huracan)1> Hello.hello(‘foo’) Hello foo, in two@huracan. % iex --sname three --cookie cookie1 iex(three@host_b)1> Hello.hello(‘foo’) ** (UndefinedFunctionError) undefined function Hello.hello/1
  8. ϊʔυͰࢼ͢ʢ̏ʣ ผϊʔυͷϓϩάϥϜΛ࣮ߦ % iex --sname three --cookie cookie1 iex(three@host_b)6> Hello.hello('bar')

    ** (UndefinedFunctionError) undefined function Hello.hello/1 (module Hello is not available) iex(three@host_b)3> Node.list [:one@huracan, :two@huracan] iex(three@host_b)4> Node.list |> Enum.map(fn(node) -> ...(three@host_b)4> Node.spawn_link(node, fn -> ...(three@host_b)4> Hello.hello('bar') end) ...(three@host_b)4> end) Hello bar, in one@huracan Hello bar, in two@huracan [#PID<8193.132.0>, #PID<9717.84.0>]