Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Elixir/OTPを使った分散アプリケーション
Search
kanmo
May 12, 2017
Technology
4
2.2k
Elixir/OTPを使った分散アプリケーション
#cm_osaka クラスメソッド大阪勉強会のスライド
kanmo
May 12, 2017
Tweet
Share
More Decks by kanmo
See All by kanmo
Keep Phoenix App Productivity
kanmo
2
980
ExAws
kanmo
1
450
Real Time Web Application with Elixir and Phoenix
kanmo
1
1.3k
Elixir 次に来る大物Web言語の可能性
kanmo
8
2.7k
Other Decks in Technology
See All in Technology
Multimodal LLMs and foundation models in robotics
keio_smilab
PRO
2
690
プロダクトオーナー向け生成AI支援サービスの仮説検証事例
yosuke_matsuura
PRO
1
200
組織的なクラウド統制のはじめの一歩_20240529
yhana
0
410
異次元のCloudFormation 拡張コマンド~Rain~
watany
0
120
240524「開発生産性を、もっと誇れる組織へ」という方針を 9ヶ月前に掲げたCTOの振り返り
msykd
PRO
0
440
HeadlessなUIライブラリを利用する価値
plaidtech
PRO
10
2.9k
シビックテックによる、社会と民主主義のアップデート
halsk
2
170
二刀流で切り拓くスタートアップとしてのグロース / Growth of a Startup Pioneering with Dual Expertise
oztick139
0
140
Building Static Websites with Sculpin
opdavies
0
1.3k
JAWS-UGの楽しみ方
schwrzktz
1
300
スタートアップがAWSパートナーになって得られたこと
shonansurvivors
3
520
[JSAI24] Attention Lattice Adapter: Visual Explanation for Vision-Language Foundation Models
keio_smilab
PRO
0
130
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
69
14k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
Testing 201, or: Great Expectations
jmmastey
30
6.8k
Music & Morning Musume
bryan
42
5.7k
Web Components: a chance to create the future
zenorocha
306
41k
The MySQL Ecosystem @ GitHub 2015
samlambert
244
12k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
33
6.1k
Producing Creativity
orderedlist
PRO
338
39k
Rebuilding a faster, lazier Slack
samanthasiow
74
8.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
242
1.2M
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
221
21k
Embracing the Ebb and Flow
colly
80
4.2k
Transcript
&MJYJS051Λͬͨ ࢄΞϓϦέʔγϣϯ Ϋϥεϝιου େࡕษڧձ 2017/05/12
w "LJIJEF,BO !LBONP@BL w ීஈϞόΠϧΞϓϦαʔϏε෦ͱ͍͏ͱ͜ΖͰαʔ όαΠυͷ͓ࣄΛ͍ͯ͠·͢ʢ3VCZɺ/PEFͳ Ͳ ɻ͋ͱΠϯϑϥগ͠ʢ"84ʣ
ຊεϥΠυͷ༰ʹ͍ͭͯ w ຊεϥΠυʹग़ͯ͘Δ&MJYJSͷΞϓϦέʔγϣϯɺα ϯϓϧίʔυຊ൪ڥͰͷӡ༻ܦݧ͋Γ·ͤΜ
ΞδΣϯμ w &MJYJS&SMBOHͷհ w ࢄγεςϜΛߏங͢ΔͨΊʹඞཁʹͳΔػೳʹͭ ͍ͯ w ϊʔυؒͷϝοηʔδ௨৴ʢඇಉظʣ w ϓϩηεͷࢹɺ࠶ىಈઓུ
w ΫϥελϦϯάʢ'BJMPWFS5BLFPWFSʣ
&MJYJS w &SMBOH7.্Ͱಈ͘ಈతͳؔܕݴޠ w োੑɺฒߦੑɺࢄॲཧੑೳʹ༏ΕΔ &MJYJS &SMBOH7. ϥΠϒϥϦʢ051ʣ
ࢄγεςϜ w ࠷ۙͷγεςϜଟ͔Εগͳ͔ΕࢄγεςϜ w ҰͷαʔόͷॲཧೳྗͩͱݶքʢϜʔΞͷ๏ଇ ͷݶքʣ w ৫ߏ͕ཁҼͷ߹͋Δ w ࢄγεςϜΛ࡞Δ্ͰඞཁʹͳΔೳྗ
εέʔϥϏϦςΟ ϑΥʔϧττϨϥϯε
εέʔϥϏϦςΟ w ଟ͘ͷΠϕϯτΛॲཧ͢ΔͨΊʹ্ཱ͕ͪΓͷૣ͍ ϓϩηε͕ඞཁ w ϓϩηεͷΓସ͑ૣ͘Ͱ͖ΔΑ͏ʹ͢Δ w ҰͰੑೳ͕ग़ͤͳ͍ͷͰෳͷαʔόͰॲཧΛ ͢Δ w
ϓϩηεಉ࢜Ͱϝοηʔδ௨৴Λ͢Δඞཁ͕͋Δ
εέʔϥϏϦςΟͷଓ͖ w ϓϩηεΛܰ͘͢Δ w Ϋϥογϡͨ͠ϓϩηεʹӨڹΛड͚ͳ͍Α͏ʹ͢ Δ ˠڞ༗ϝϞϦΫϥογϡ͢Δͱ෮چͮ͠Β͍ͷͰ ϝοηʔδύογϯάΛ͏͜ͱʹͳͬͨ
ϑΥʔϧττϨϥϯε w োى͖Δͷͱߟ͑Δ w ͙ͷͰͳ͘ɺى͖ͨ࣌ʹ͏·͘ରॲͰ͖ΔΑ ͏ʹ͢Δ w σʔλ͕͓͔͘͠ͳͬͨΒ෮چΛఘΊͯϓϩηεΛ LJMM͢Δ w
ͦͷͨΊʹϓϩηε͕ଞͷϓϩηεΛࢹ͢ΔΤ ϥʔॲཧػߏඞཁʹͳΔ
ϑΥʔϧττϨϥϯεଓ͖ w ࢄγεςϜͰϝοηʔδૹ৴ઌ͕Ϋϥογϡ͢ Δ͜ͱߟྀ͢Δඞཁ͕͋Δ w ϦϞʔτؔݺͼग़͠Λ҆શʹߦ͏ͨΊʹɺඇಉظ ϝοηʔδύογϯάΛ͏ w ૹ৴ઌͷঢ়ଶʹӨڹ͞Εͨ͘ͳ͍
͜ΕΒΛ࣮ݱ͢Δ͜ͱ͕&SBMOH ։ൃͷతͩͬͨ
&SMBOH7. w &SMBOHϦΞϧλΠϜɺࢄɺฒߦγεςϜͷߏங ʹ༏Ε͍ͯΔݴޠɺϥϯλΠϜ w "DUPS.PEFM w োੑೳ w ෛՙࢄ
"DUPS.PEFM w ଞͷϓϩηεͱσʔλΛڞ༗͢Δ߹NFTTBHF QBTTJOH σʔλίϐʔ͞ΕΔͷͰϝϞϦڞ༗ͷ Έ͕ෆཁ w ϓϩηε୯ҐͰ($ɺϑϧ($ൃੜ͠ͳ͍
োੑ w 4IBSFE/PUIJOHͳϝϞϦϞσϧ w ͋Δϓϩηε͕Ϋϥογϡͯ͠ଞͷϓϩηεʹ Өڹ͠ͳ͍ w φΠϯφΠϯ ͷ৴པੑ
ෛՙࢄ w &SMBOH7.͕ෛՙࢄͷ໘Λݟͯ͘ΕΔ w ͷ্ͱίΞϓϩηοα͕ઢܗʹεέʔϧ ͢Δ w εέδϡʔϥͱͯ͠ίΞຖʹεϨουΛىಈ͢Δ
w ͦΕͧΕ࣮ߦΩϡʔΛ࣋ͭ w λεΫ͕ଟ͍߹ଞͷΩϡʔ ʹҠ͞ΕΔ ෛՙࢄͷଓ͖
ฒߦॲཧ w ϓϩηεʢ"DUPSʣඇৗʹ͍ܰʢϫʔυ w άϦʔϯεϨουͳͷͰ04ͷίϯςΩετεΠο νແ͠ w ωοτϫʔΫαʔόͷ߹ɺҰͭͷϦΫΤετʹҰ ͭͷܰྔϓϩηεΛׂΓͯΔɹ
ϝοηʔδ௨৴
ϓϩηεੜ # ϓϩηεΛىಈ pid = spawn(ModuleName, :loop, [])
ϝοηʔδૹ৴ send(pid, {self, “Hello Actor”})
ϝοηʔδड৴ # ϝοηʔδड৴ॲཧ defmodule Receiver do def loop do receive
do {_, msg} -> IO.puts(msg <> “!!!”) end loop end end
-PDBUJPO5SBOTQBSFODZ w ಉҰϊʔυ্Ͱͷϝοηʔδ௨৴ͱಉ͡Α͏ʹผϊʔ υͷϓϩηεͱϝοηʔδ௨৴Λߦ͏͜ͱ͕Ͱ͖Δ w ΫϥελͷϓϩηεωοτϫʔΫʹಁաత w Ϋϥελͷϊʔυʹଓ͢ΔͱɺΫϥελͷશ ϊʔυʹࣗಈతʹଓ͢Δ
Ϋϥελͷશϊʔυʹଓ Node A Node B Node C Node D Node
A Node B Node C Node D
5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢ΔؔΛఆٛ func = fn -> Worker.start(url) end 1..10000
|> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠Λ ͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢ΔؔΛఆٛ func = fn -> Worker.start(url) end 1..10000
|> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠Λ ͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢ΔؔΛఆٛ func = fn -> Worker.start(url) end 1..10000
|> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠Λ ͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
5BTLBTZOD5BTLBXBJU # ผϓϩηεͰ࣮ࢪ͢ΔؔΛఆٛ func = fn -> Worker.start(url) end 1..10000
|> Enum.map(fn _ -> Task.async(func) end) # ఆٛͨؔ͠Λ ͢ |> Enum.map(&Task.await(&1)) # ݁ՌΛड͚औΔ w ผϓϩηεͰॲཧΛͯͦ͠ͷ݁ՌΛͪड͚Δίʔ υΛ؆୯ʹॻ͚Δ ඇಉظͷฒߦॲཧ
σϞ w ϚελʔͱεϨʔϒͰͦΕͧΕϓϩηεΛੜ w BTZODBXBJUͰॲཧɺ݁ՌΛड͚औͬͯग़ྗ master slave Node B Node
A
ϓϩηεͷࢹ ˍ࠶ىಈઓུ
-FUJU$SBTI w &SMBOHͷΤϥʔॲཧͷํ w ϓϩηεΛࢹ͓͍ͯͯ͠ɺϓϩηε͕ࢮΜͩΒ࠶ ىಈ͘͠ύϥϝʔλมߋͯ͠ϦτϥΠ w ෮چॲཧΤϥʔΛىͨ͜͠ϓϩηεͰͳ͘ɺ ࢹ͍ͯ͠Δϓϩηε͕ߦ͏
ϓϩηεࢹ w ࢄγεςϜͰϓϩηε͕ఀࢭͨ࣌͠ʹݕ͢Δ Έ͕ඞཁ w 1SPDFTTMJOLͱ1SPDFTTNPOJUPS͕༻ҙ͞Ε͍ͯΔ w MJOLϓϩηεఀࢭͱͱʹґଘؔͷ͋Δϓϩ ηεશͯఀࢭ͢Δ w
NPOJUPSϓϩηεఀࢭΛݕ͚ͩ͢Δ
051
w ࢄɺฒߦϓϩάϥϛϯάΛࢧԉ͢Δ'8ɺ։ൃ ڥ w ϦϯΫɺϞχλʔͳͲΛͬͯࣗͰฒྻΞϓϦέʔ γϣϯΛॻ͔ͳͯ͘051ϑϨʔϜϫʔΫʹ༻ҙ͞ Ε͍ͯΔ w ࢄϓϩάϥϛϯάͷͨΊͷϏϔΠϏΞ ύλʔϯ
͕༻ҙ͞Ε͍ͯΔ
4VQFSWJTPS
Supervisor Worker Worker Worker w TVQFSWJTPSɿϓϩηεΛࢹ͢Δɺϓϩηε͕ࢮΜͩ߹࠶ى ಈ͢Δ w XPSLFSɿ࣮ࡍͷॲཧΛߦ͏ϓϩηεɻޭ͢Δ͔ࣦഊ͢Δ͔Θ ͔Βͳ͍ͷͰ৴༻͠ͳ͍ˠTVQFSWJTPS͕ࢹ͢Δ
࠶ىಈઓུ w ࢹରϓϩηεʹ࠶ىಈઓུΛઃఆ͢Δ w POF@GPS@POF w POF@GPS@BMM w SFTU@GPS@POF w
TJNQMF@POF@GPS@POF
ྫ w ֎෦"1*ݺͼग़͠ϫʔΧʔͷϓʔϧΞϓϦέʔγϣϯΛ࡞Δ w ͜ͷΞϓϦέʔγϣϯΫϥΠΞϯτΞϓϦέʔγϣϯʹ ݺͼग़͞ΕΔͱɺཧ͍ͯ͠ΔϫʔΧʔͷࢀরΛ͢ w ϫʔΧʔ͕Ϋϥογϡͨ͜͠ͱΛݕͨ͠Β࠶ىಈ͢Δ w ϫʔΧʔͷىಈΛཧ͢Δ
w ϫʔΧͷॲཧͷ݁Ռঢ়ଶͱͯ͠อ࣋͢Δඞཁ͕͋Δʢ֎ ෦"1*ݺͼग़͠ͷ݁Ռʣ
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ❌
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker supervise supervise ❌
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker supervise supervise
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker supervise supervise ઃఆʹै͍ ࢠϓϩηεΛ࠶ىಈ
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ઃఆʹै͍
ࢠϓϩηεΛ࠶ىಈ
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ֎෦API
୯७ͳ4VQFSWJTJPO5SFFͷྫ Supervisor Server WorkerSupervisor Worker Worker Worker supervise supervise ֎෦API
ݺͼग़݁͠ՌΛอଘ͢Δ
ͦΕͧΕͷϓϩηεͷׂ w 8PSLFSɿޭ͢Δ͔ࣦഊ͢Δ͔Θ͔Βͳ͍ॲཧΛ ߦ͏ w 8PSLFS4VQFSWJTPSɿ8PSLFSΛࢹ w 4FSWFSɿঢ়ଶΛཧ͢Δ w 4VQFSWJTPSɿ4FSWFSͱ8PSLFS4VQFSWJTPSΛࢹ
͢Δ
ࢹઃఆ opts = [strategy: :one_for_all, max_restarts: 5, max_seconds: 5] supervise(children,
opts) w POF@GPS@BMMͳͷͰϓϩηε͕Ϋϥογϡ͢Δͱଞͷϓϩ ηεશͯ࠶ىಈ͢Δ w ඵҎʹճ࠶ىಈ͢ΔͱΞϓϦέʔγϣϯ͕ఀࢭ͢Δ
8PSLFSͷ͕૿͑ͨ߹Ͳ͏͢Δʁ w ݺͼग़͢֎෦"1*͕ෳʹͳͬͨ w ͦͷ"1*͝ͱʹଓ͢ΔϫʔΧʔͷΛཧ͍ͨ͠ w 8PSLFSΛάϧʔϓ͚͠ɺͦͷάϧʔϓ͚ͩ 8PSLFS4VQFSWJTPSΛ༻ҙ͢Δ
มߋҊ Server Worker Worker Worker Worker Worker Worker Supervisor SubSupervisor
WorkerSupervisor WorkerSupervisor
มߋҊ Server Worker Worker Worker Worker Worker Worker
มߋҊ Server Worker Worker Worker Worker Worker Worker ෳͷ"1*ݺͼग़͠Λ͢Δ શϫʔΧʔঢ়ଶΛཧ͢ΔͷͰ
ϘτϧωοΫʹͳΔ
มߋҊ Server Supervisor Worker Worker Worker Worker Worker Worker SubSupervisor
WorkerSupervisor WorkerSupervisor
มߋҊ Server Supervisor Worker Worker Worker Worker Worker Worker SubSupervisor
WorkerSupervisor WorkerSupervisor ❌
มߋҊ Server Supervisor ❌
มߋҊ Server Supervisor ❌ 4FSWFS͕410' Ϋϥογϡ͢ΔͱશͯͷϫʔΧʔ Ϋϥογϡ͢Δ
มߋҊ Server Supervisor 4FSWFS͕410' Ϋϥογϡ͢ΔͱશͯͷϫʔΧʔ Ϋϥογϡ͢Δ
w ͯ͢ͷϫʔΧʔͷϝοηʔδΛҰͭͷ4FSWFSϓϩ ηε͕ड͚औΔ͜ͱʹͳΔ w 8PSLFS4VQFSWJTPSͷ͕૿͑Δͱ4FSWFSͷϝʔϧ ϘοΫε͕ҲΕΔةݥ͕͋Δ w 4FSWFS͕410'ʹͳΔ
w ϫʔΧʔͷঢ়ଶΛཧ͢Δ4FSWFSϓϩηεϫʔ Χʔϓʔϧʢݺͼग़͠ઌͷ֎෦"1*ʣ͝ͱʹ༻ҙ͢ Δ
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor
Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer ֎෦αΠτ"ͷϫʔΧʔ
ͷঢ়ଶΛཧ͢Δ WorkerSupervisor Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer ֎෦αΠτ"ͷϫʔΧʔ
ͷঢ়ଶΛཧ͢Δ ֎෦αΠτ #ͷϫʔΧʔͷঢ়ଶΛཧ ཧ͢Δ WorkerSupervisor Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer ֎෦αΠτ
#ͷϫʔΧʔͷঢ়ଶΛཧ ཧ͢Δ WorkerSupervisor Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor
Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor
Worker Worker Worker Worker Worker Worker ❌
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor PoolServer WorkerSupervisor PoolServer WorkerSupervisor
Worker Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer WorkerSupervisor Worker
Worker Worker Worker Worker Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer Worker Worker
Worker
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer Worker Worker
Worker ผͷϓʔϧͷϫʔΧʔ ʹӨڹ͠ͳ͍
Supervisor Server SubSupervisor PoolSupervisor PoolSupervisor WorkerSupervisor PoolServer Worker Worker
Worker
มߋͨ͠ͱ͜Ζ w ঢ়ଶཧΛ͢Δ1PPM4FSWFSϓϩηε ࠓ·Ͱͷ 4FSWFS ΛϫʔΧʔϓʔϧʢ֎෦"1*ʣ͝ͱʹՃ w 4VC4VQFSWJTPS͕ϫʔΧʔϓʔϧ͝ͱʹଘࡏ͢Δ 1PPM4VQFSWJTPSΛࢹ͢Δ
'BJMPWFS5BLFPWFS
ىಈ͢ΔϊʔυΛΓସ͑Δ Node A Application Node B Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Application Node B Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Node B Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Node B Node C Application
ىಈ͢ΔϊʔυΛΓସ͑Δ Node C Application
ىಈ͢ΔϊʔυΛΓସ͑Δ Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Node C Application
ىಈ͢ΔϊʔυΛΓସ͑Δ Node A Node C Application
ىಈ͢ΔϊʔυΛΓସ͑Δ Node A Node C
ىಈ͢ΔϊʔυΛΓସ͑Δ Node A Node C Application
w 'BJMPWFSɿΫϥελͷϊʔυ͕ఀࢭͨ͠߹ʹΞ ϓϦέʔγϣϯ͕ผͷϊʔυͰىಈ͢Δ w 5BLFPWFSɿΞϓϦέʔγϣϯ͕ݱࡏىಈ͍ͯ͠Δ ϊʔυΑΓߴ͍༏ઌΛ࣋ͭϊʔυ͕͋Δ߹ɺݱ ࡏىಈ͍ͯ͠ΔϊʔυͰΞϓϦέʔγϣϯΛఀࢭ͞ ͤߴ͍༏ઌͷϊʔυͰىಈ͢͜͠ͱ
DMVTUFSͷઃఆྫ [{kernel, [{distributed, [{sample, 5000, ['
[email protected]
', {'
[email protected]
', '
[email protected]
'}]}]}, {sync_nodes_mandatory, ['
[email protected]
',
'
[email protected]
']}, {sync_nodes_timeout, 30000} ]}]. w EJTUSJCVUFEDMVTUFSΛߏ͢Δϊʔυ܈ɻ༏ઌBɺCɺDͷॱ w TZOD@OPEFT@NBOEBUPSZɿ͜͜ʹઃఆͨ͠શͯͷϊʔυ͕ىಈ͢Δ·ͰΞϓϦέʔ γϣϯΛϩοΫ͢Δ w TZOD@OPEFT@UJNFPVUɿ͜ͷ࣌ؒ·Ͱʹࢦఆͨ͠ϊʔυ͕ىಈ͠ͳ͚Εҟৗऴ ྃ͢Δ
σϞ w Bϊʔυ͕ఀࢭ͢ΔͱCϊʔυͰΞϓϦέʔγϣϯ ͕ىಈ͢Δʢ'BJMPWFSʣ w Bϊʔυ͕ఀࢭঢ়ଶ͔Βىಈঢ়ଶʹΔͱɺΞϓϦ έʔγϣϯ͕BϊʔυͰىಈ͢͠ʢ5BLFPWFSʣ
·ͱΊ w &MJYJSʹࢄΞϓϦέʔγϣϯʹඞཁͳػೳ͕༻ ҙ͞Ε͍ͯΔʢ051ɺ7.ʣ w ࢄΞϓϦέʔγϣϯΛ࡞Δ্Ͱͭ·͖͍ͮ͢ϙ Πϯτ͕͢Ͱʹ051ʹϥΠϒϥϦͱͯ͠༻ҙ͞Εͯ ͍ͯɺ։ൃऀΛࢧԉͯ͘͠ΕΔ