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

Elixir/OTPを使った分散アプリケーション

86f6cc36138b8f2706c28d9598e7e36c?s=47 kanmo
May 12, 2017

 Elixir/OTPを使った分散アプリケーション

#cm_osaka クラスメソッド大阪勉強会のスライド

86f6cc36138b8f2706c28d9598e7e36c?s=128

kanmo

May 12, 2017
Tweet

More Decks by kanmo

Other Decks in Technology

Transcript

  1. &MJYJS051Λ࢖ͬͨ ෼ࢄΞϓϦέʔγϣϯ Ϋϥεϝιου େࡕษڧձ 2017/05/12

  2. w "LJIJEF,BO !LBONP@BL  w ීஈ͸ϞόΠϧΞϓϦαʔϏε෦ͱ͍͏ͱ͜ΖͰαʔ όαΠυͷ͓࢓ࣄΛ͍ͯ͠·͢ʢ3VCZɺ/PEFͳ Ͳ ɻ͋ͱΠϯϑϥগ͠ʢ"84ʣ

  3. ຊεϥΠυͷ಺༰ʹ͍ͭͯ w ຊεϥΠυʹग़ͯ͘Δ&MJYJSͷΞϓϦέʔγϣϯɺα ϯϓϧίʔυ͸ຊ൪؀ڥͰͷӡ༻ܦݧ͸͋Γ·ͤΜ

  4. ΞδΣϯμ w &MJYJS&SMBOHͷ঺հ w ෼ࢄγεςϜΛߏங͢ΔͨΊʹඞཁʹͳΔػೳʹͭ ͍ͯ w ϊʔυؒͷϝοηʔδ௨৴ʢඇಉظʣ w ϓϩηεͷ؂ࢹɺ࠶ىಈઓུ

    w ΫϥελϦϯάʢ'BJMPWFS5BLFPWFSʣ
  5. &MJYJS w &SMBOH7.্Ͱಈ͘ಈతͳؔ਺ܕݴޠ w ଱ো֐ੑɺฒߦੑɺ෼ࢄॲཧੑೳʹ༏ΕΔ &MJYJS &SMBOH7. ϥΠϒϥϦʢ051ʣ

  6. ෼ࢄγεςϜ w ࠷ۙͷγεςϜ͸ଟ͔Εগͳ͔Ε෼ࢄγεςϜ w Ұ୆ͷαʔόͷॲཧೳྗͩͱݶքʢϜʔΞͷ๏ଇ ͷݶքʣ w ૊৫ߏ଄͕ཁҼͷ৔߹΋͋Δ w ෼ࢄγεςϜΛ࡞Δ্ͰඞཁʹͳΔೳྗ

  7. εέʔϥϏϦςΟ ϑΥʔϧττϨϥϯε

  8. εέʔϥϏϦςΟ w ଟ͘ͷΠϕϯτΛॲཧ͢ΔͨΊʹ্ཱ͕ͪΓͷૣ͍ ϓϩηε͕ඞཁ w ϓϩηεͷ੾Γସ͑΋ૣ͘Ͱ͖ΔΑ͏ʹ͢Δ w Ұ୆Ͱੑೳ͕ग़ͤͳ͍ͷͰෳ਺୆ͷαʔόͰॲཧΛ ͢Δ w

    ϓϩηεಉ࢜Ͱϝοηʔδ௨৴Λ͢Δඞཁ͕͋Δ
  9. εέʔϥϏϦςΟͷଓ͖ w ϓϩηεΛܰ͘͢Δ w Ϋϥογϡͨ͠ϓϩηεʹӨڹΛड͚ͳ͍Α͏ʹ͢ Δ
 ˠڞ༗ϝϞϦ͸Ϋϥογϡ͢Δͱ෮چͮ͠Β͍ͷͰ
 ϝοηʔδύογϯάΛ࢖͏͜ͱʹͳͬͨ

  10. ϑΥʔϧττϨϥϯε w ো֐͸ى͖Δ΋ͷͱߟ͑Δ w ๷͙ͷͰ͸ͳ͘ɺى͖ͨ࣌ʹ͏·͘ରॲͰ͖ΔΑ ͏ʹ͢Δ w σʔλ͕͓͔͘͠ͳͬͨΒ෮چΛఘΊͯϓϩηεΛ LJMM͢Δ w

    ͦͷͨΊʹϓϩηε͕ଞͷϓϩηεΛ؂ࢹ͢ΔΤ ϥʔॲཧػߏ΋ඞཁʹͳΔ
  11. ϑΥʔϧττϨϥϯεଓ͖ w ෼ࢄγεςϜͰ͸ϝοηʔδૹ৴ઌ͕Ϋϥογϡ͢ Δ͜ͱ΋ߟྀ͢Δඞཁ͕͋Δ w ϦϞʔτؔ਺ݺͼग़͠Λ҆શʹߦ͏ͨΊʹɺඇಉظ ϝοηʔδύογϯάΛ࢖͏ w ૹ৴ઌͷঢ়ଶʹӨڹ͞Εͨ͘ͳ͍

  12. ͜ΕΒΛ࣮ݱ͢Δ͜ͱ͕&SBMOH ։ൃͷ໨తͩͬͨ

  13. &SMBOH7. w &SMBOH͸ϦΞϧλΠϜɺ෼ࢄɺฒߦγεςϜͷߏங ʹ༏Ε͍ͯΔݴޠɺϥϯλΠϜ w "DUPS.PEFM w ଱ো֐ੑೳ w ෛՙ෼ࢄ

  14. "DUPS.PEFM w ଞͷϓϩηεͱσʔλΛڞ༗͢Δ৔߹͸NFTTBHF QBTTJOH σʔλ͸ίϐʔ͞ΕΔͷͰϝϞϦڞ༗ͷ࢓ ૊Έ͕ෆཁ  w ϓϩηε୯ҐͰ($ɺϑϧ($ൃੜ͠ͳ͍

  15. ଱ো֐ੑ w 4IBSFE/PUIJOHͳϝϞϦϞσϧ w ͋Δϓϩηε͕Ϋϥογϡͯ͠΋ଞͷϓϩηεʹ Өڹ͠ͳ͍ w  φΠϯφΠϯ ͷ৴པੑ


  16. ෛՙ෼ࢄ w &SMBOH7.͕ෛՙ෼ࢄͷ໘౗Λݟͯ͘ΕΔ w ଎౓ͷ޲্ͱίΞϓϩηοα਺͕ઢܗʹεέʔϧ ͢Δ w εέδϡʔϥͱͯ͠ίΞຖʹεϨουΛىಈ͢Δ

  17. w ͦΕͧΕ࣮ߦΩϡʔΛ࣋ͭ w λεΫ͕ଟ͍৔߹͸ଞͷΩϡʔ ʹҠ͞ΕΔ ෛՙ෼ࢄͷଓ͖

  18. ฒߦॲཧ w ϓϩηεʢ"DUPSʣ͸ඇৗʹ͍ܰʢϫʔυ w άϦʔϯεϨουͳͷͰ04ͷίϯςΩετεΠο νແ͠ w ωοτϫʔΫαʔόͷ৔߹ɺҰͭͷϦΫΤετʹҰ ͭͷܰྔϓϩηεΛׂΓ౰ͯΔɹ

  19. ϝοηʔδ௨৴

  20. ϓϩηεੜ੒ # ϓϩηεΛىಈ pid = spawn(ModuleName, :loop, [])

  21. ϝοηʔδૹ৴ send(pid, {self, “Hello Actor”})

  22. ϝοηʔδड৴ # ϝοηʔδड৴ॲཧ
 defmodule Receiver do def loop do receive

    do {_, msg} -> IO.puts(msg <> “!!!”) end loop end end
  23. -PDBUJPO5SBOTQBSFODZ w ಉҰϊʔυ্Ͱͷϝοηʔδ௨৴ͱಉ͡Α͏ʹผϊʔ υͷϓϩηεͱϝοηʔδ௨৴Λߦ͏͜ͱ͕Ͱ͖Δ w Ϋϥελ಺ͷϓϩηε͸ωοτϫʔΫʹಁաత w Ϋϥελ಺ͷϊʔυʹ઀ଓ͢ΔͱɺΫϥελ಺ͷશ ϊʔυʹࣗಈతʹ઀ଓ͢Δ

  24. Ϋϥελͷશϊʔυʹ઀ଓ Node A Node B Node C Node D Node

    A Node B Node C Node D
  25. 5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢Δؔ਺Λఆٛ func = fn -> Worker.start(url) end 1..10000

    |> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠਺Λ ౉͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛ଴ͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
  26. 5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢Δؔ਺Λఆٛ func = fn -> Worker.start(url) end 1..10000

    |> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠਺Λ ౉͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛ଴ͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
  27. 5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢Δؔ਺Λఆٛ func = fn -> Worker.start(url) end 1..10000

    |> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠਺Λ ౉͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛ଴ͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
  28. 5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢Δؔ਺Λఆٛ func = fn -> Worker.start(url) end 1..10000

    |> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠਺Λ ౉͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛ଴ͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
  29. σϞ w ϚελʔͱεϨʔϒͰͦΕͧΕϓϩηεΛੜ੒ w BTZODBXBJUͰॲཧɺ݁ՌΛड͚औͬͯग़ྗ master slave Node B Node

    A
  30. ϓϩηεͷ؂ࢹ ˍ࠶ىಈઓུ

  31. -FUJU$SBTI w &SMBOHͷΤϥʔॲཧͷํ਑ w ϓϩηεΛ؂ࢹ͓͍ͯͯ͠ɺϓϩηε͕ࢮΜͩΒ࠶ ىಈ΋͘͠͸ύϥϝʔλมߋͯ͠ϦτϥΠ w ෮چॲཧ͸ΤϥʔΛىͨ͜͠ϓϩηεͰ͸ͳ͘ɺ؂ ࢹ͍ͯ͠Δϓϩηε͕ߦ͏

  32. ϓϩηε؂ࢹ w ෼ࢄγεςϜͰ͸ϓϩηε͕ఀࢭͨ࣌͠ʹݕ஌͢Δ ࢓૊Έ͕ඞཁ w 1SPDFTTMJOLͱ1SPDFTTNPOJUPS͕༻ҙ͞Ε͍ͯΔ w MJOL͸ϓϩηεఀࢭͱͱ΋ʹґଘؔ܎ͷ͋Δϓϩ ηεશͯఀࢭ͢Δ w

    NPOJUPS͸ϓϩηεఀࢭΛݕ஌͚ͩ͢Δ
  33. 051

  34. w ෼ࢄɺฒߦϓϩάϥϛϯάΛࢧԉ͢Δ'8ɺ։ൃ؀ ڥ w ϦϯΫɺϞχλʔͳͲΛ࢖ͬͯࣗ෼ͰฒྻΞϓϦέʔ γϣϯΛॻ͔ͳͯ͘΋051ϑϨʔϜϫʔΫʹ༻ҙ͞ Ε͍ͯΔ w ෼ࢄϓϩάϥϛϯάͷͨΊͷϏϔΠϏΞ ύλʔϯ

    ͕༻ҙ͞Ε͍ͯΔ
  35. 4VQFSWJTPS

  36. Supervisor Worker Worker Worker w TVQFSWJTPSɿϓϩηεΛ؂ࢹ͢Δɺϓϩηε͕ࢮΜͩ৔߹࠶ى ಈ͢Δ w XPSLFSɿ࣮ࡍͷॲཧΛߦ͏ϓϩηεɻ੒ޭ͢Δ͔ࣦഊ͢Δ͔Θ ͔Βͳ͍ͷͰ৴༻͠ͳ͍ˠTVQFSWJTPS͕؂ࢹ͢Δ

  37. ࠶ىಈઓུ w ؂ࢹର৅ϓϩηεʹ࠶ىಈઓུΛઃఆ͢Δ w POF@GPS@POF w POF@GPS@BMM w SFTU@GPS@POF w

    TJNQMF@POF@GPS@POF
  38. ྫ w ֎෦"1*ݺͼग़͠ϫʔΧʔͷϓʔϧΞϓϦέʔγϣϯΛ࡞Δ w ͜ͷΞϓϦέʔγϣϯ͸ΫϥΠΞϯτΞϓϦέʔγϣϯʹ ݺͼग़͞ΕΔͱɺ؅ཧ͍ͯ͠ΔϫʔΧʔͷࢀরΛ౉͢ w ϫʔΧʔ͕Ϋϥογϡͨ͜͠ͱΛݕ஌ͨ͠Β࠶ىಈ͢Δ w ϫʔΧʔͷىಈ਺Λ؅ཧ͢Δ

    w ϫʔΧͷॲཧͷ݁Ռ΋ঢ়ଶͱͯ͠อ࣋͢Δඞཁ͕͋Δʢ֎ ෦"1*ݺͼग़͠ͷ݁Ռʣ
  39. ୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise

  40. ୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ❌

  41. ୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker supervise supervise ❌

  42. ୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker supervise supervise

  43. ୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker supervise supervise ઃఆʹै͍ ࢠϓϩηεΛ࠶ىಈ

  44. ୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ઃఆʹै͍

    ࢠϓϩηεΛ࠶ىಈ
  45. ୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise

  46. ୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ֎෦API

  47. ୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ֎෦API

    ݺͼग़݁͠ՌΛอଘ͢Δ
  48. ͦΕͧΕͷϓϩηεͷ໾ׂ w 8PSLFSɿ੒ޭ͢Δ͔ࣦഊ͢Δ͔Θ͔Βͳ͍ॲཧΛ ߦ͏ w 8PSLFS4VQFSWJTPSɿ8PSLFSΛ؂ࢹ w 4FSWFSɿঢ়ଶΛ؅ཧ͢Δ w 4VQFSWJTPSɿ4FSWFSͱ8PSLFS4VQFSWJTPSΛ؂ࢹ

    ͢Δ
  49. ؂ࢹઃఆ opts = [strategy: :one_for_all, max_restarts: 5, max_seconds: 5] supervise(children,

    opts) w POF@GPS@BMMͳͷͰϓϩηε͕Ϋϥογϡ͢Δͱଞͷϓϩ ηε΋શͯ࠶ىಈ͢Δ w ඵҎ಺ʹճ࠶ىಈ͢ΔͱΞϓϦέʔγϣϯ͕ఀࢭ͢Δ
  50. 8PSLFSͷ਺͕૿͑ͨ৔߹Ͳ͏͢Δʁ w ݺͼग़͢֎෦"1*͕ෳ਺ʹͳͬͨ w ͦͷ"1*͝ͱʹ઀ଓ͢ΔϫʔΧʔͷ਺Λ؅ཧ͍ͨ͠ w 8PSLFSΛάϧʔϓ෼͚͠ɺͦͷάϧʔϓ෼͚ͩ 8PSLFS4VQFSWJTPSΛ༻ҙ͢Δ

  51. มߋҊ Server Worker Worker Worker Worker Worker Worker Supervisor SubSupervisor

    WorkerSupervisor WorkerSupervisor
  52. มߋҊ Server Worker Worker Worker Worker Worker Worker

  53. มߋҊ Server Worker Worker Worker Worker Worker Worker ෳ਺ͷ"1*ݺͼग़͠Λ͢Δ શϫʔΧʔঢ়ଶΛ؅ཧ͢ΔͷͰ

    ϘτϧωοΫʹͳΔ
  54. มߋҊ Server Supervisor Worker Worker Worker Worker Worker Worker SubSupervisor

    WorkerSupervisor WorkerSupervisor
  55. มߋҊ Server Supervisor Worker Worker Worker Worker Worker Worker SubSupervisor

    WorkerSupervisor WorkerSupervisor ❌
  56. มߋҊ Server Supervisor ❌

  57. มߋҊ Server Supervisor ❌ 4FSWFS͕410' Ϋϥογϡ͢ΔͱશͯͷϫʔΧʔ ΋Ϋϥογϡ͢Δ

  58. มߋҊ Server Supervisor 4FSWFS͕410' Ϋϥογϡ͢ΔͱશͯͷϫʔΧʔ ΋Ϋϥογϡ͢Δ

  59. ໰୊఺ w ͢΂ͯͷϫʔΧʔͷϝοηʔδΛҰͭͷ4FSWFSϓϩ ηε͕ड͚औΔ͜ͱʹͳΔ w 8PSLFS4VQFSWJTPSͷ਺͕૿͑Δͱ4FSWFSͷϝʔϧ ϘοΫε͕ҲΕΔةݥ͕͋Δ w 4FSWFS͕410'ʹͳΔ

  60. w ϫʔΧʔͷঢ়ଶΛ؅ཧ͢Δ4FSWFSϓϩηε΋ϫʔ Χʔϓʔϧʢݺͼग़͠ઌͷ֎෦"1*ʣ͝ͱʹ༻ҙ͢ Δ

  61. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor

    Worker Worker Worker Worker Worker Worker
  62. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer ֎෦αΠτ"ͷϫʔΧʔ

    ͷঢ়ଶΛ؅ཧ͢Δ WorkerSupervisor Worker Worker Worker Worker Worker Worker
  63. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer ֎෦αΠτ"ͷϫʔΧʔ

    ͷঢ়ଶΛ؅ཧ͢Δ ֎෦αΠτ #ͷϫʔΧʔͷঢ়ଶΛ؅ཧ ؅ཧ͢Δ WorkerSupervisor Worker Worker Worker Worker Worker Worker
  64. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer ֎෦αΠτ

    #ͷϫʔΧʔͷঢ়ଶΛ؅ཧ ؅ཧ͢Δ WorkerSupervisor Worker Worker Worker Worker Worker Worker
  65. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor

    Worker Worker Worker Worker Worker Worker
  66. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor

    Worker Worker Worker Worker Worker Worker ❌
  67. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor

    Worker Worker Worker Worker Worker Worker
  68. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer WorkerSupervisor Worker

    Worker Worker Worker Worker Worker
  69. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer Worker Worker

    Worker
  70. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer Worker Worker

    Worker ผͷϓʔϧͷϫʔΧʔ ʹ͸Өڹ͠ͳ͍
  71. ׬੒ Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer Worker Worker

    Worker
  72. มߋͨ͠ͱ͜Ζ w ঢ়ଶ؅ཧΛ͢Δ1PPM4FSWFSϓϩηε ࠓ·Ͱͷ 4FSWFS ΛϫʔΧʔϓʔϧʢ֎෦"1*ʣ͝ͱʹ௥Ճ w 4VC4VQFSWJTPS͕ϫʔΧʔϓʔϧ͝ͱʹଘࡏ͢Δ 1PPM4VQFSWJTPSΛ؂ࢹ͢Δ

  73. 'BJMPWFS5BLFPWFS

  74. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Node A Application Node B Node C

  75. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Application Node B Node C

  76. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Node B Node C

  77. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Node B Node C Application

  78. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Node C Application

  79. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Node C

  80. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Node C Application

  81. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Node A Node C Application

  82. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Node A Node C

  83. ىಈ͢ΔϊʔυΛ੾Γସ͑Δ Node A Node C Application

  84. w 'BJMPWFSɿΫϥελ಺ͷϊʔυ͕ఀࢭͨ͠৔߹ʹΞ ϓϦέʔγϣϯ͕ผͷϊʔυͰىಈ͢Δ w 5BLFPWFSɿΞϓϦέʔγϣϯ͕ݱࡏىಈ͍ͯ͠Δ ϊʔυΑΓߴ͍༏ઌ౓Λ࣋ͭϊʔυ͕͋Δ৔߹ɺݱ ࡏىಈ͍ͯ͠ΔϊʔυͰΞϓϦέʔγϣϯΛఀࢭ͞ ͤߴ͍༏ઌ౓ͷϊʔυͰىಈ͠௚͢͜ͱ

  85. DMVTUFSͷઃఆྫ [{kernel, [{distributed, [{sample, 5000, ['a@10.0.1.5', {'b@10.0.1.4', 'c@10.0.1.4'}]}]}, {sync_nodes_mandatory, ['b@10.0.1.4',

    'c@10.0.1.4']}, {sync_nodes_timeout, 30000} ]}]. w EJTUSJCVUFEDMVTUFSΛߏ੒͢Δϊʔυ܈ɻ༏ઌ౓͸BɺCɺDͷॱ w TZOD@OPEFT@NBOEBUPSZɿ͜͜ʹઃఆͨ͠શͯͷϊʔυ͕ىಈ͢Δ·ͰΞϓϦέʔ γϣϯΛϩοΫ͢Δ w TZOD@OPEFT@UJNFPVUɿ͜ͷ࣌ؒ·Ͱʹࢦఆͨ͠ϊʔυ͕ىಈ͠ͳ͚Ε͹ҟৗऴ ྃ͢Δ
  86. σϞ w Bϊʔυ͕ఀࢭ͢ΔͱCϊʔυͰΞϓϦέʔγϣϯ ͕ىಈ͢Δʢ'BJMPWFSʣ w Bϊʔυ͕ఀࢭঢ়ଶ͔Βىಈঢ়ଶʹ໭ΔͱɺΞϓϦ έʔγϣϯ͕BϊʔυͰىಈ͠௚͢ʢ5BLFPWFSʣ

  87. ·ͱΊ w &MJYJSʹ͸෼ࢄΞϓϦέʔγϣϯʹඞཁͳػೳ͕༻ ҙ͞Ε͍ͯΔʢ051ɺ7.ʣ w ෼ࢄΞϓϦέʔγϣϯΛ࡞Δ্Ͱͭ·͖ͮ΍͍͢ϙ Πϯτ͕͢Ͱʹ051ʹϥΠϒϥϦͱͯ͠༻ҙ͞Εͯ ͍ͯɺ։ൃऀΛࢧԉͯ͘͠ΕΔ