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
1k
ExAws
kanmo
1
500
Real Time Web Application with Elixir and Phoenix
kanmo
1
1.4k
Elixir 次に来る大物Web言語の可能性
kanmo
8
2.8k
Other Decks in Technology
See All in Technology
Mocking in Rust Applications
taiki45
2
410
突撃! 隣のAmazon Bedrockユーザー 〜YouはどうしてAWSで?〜
minorun365
PRO
3
390
20240911_New_Relicダッシュボード活用例
speakerdeckfk
0
110
『GRANBLUE FANTASY Relink』キャラクターの魅力を支えるリグ・シミュレーション制作事例
cygames
0
120
OCI で始める!! Red Hat OpenShift / Get Started OpenShift on OCI
oracle4engineer
PRO
1
190
GC24 Recap: Interface Internals
task4233
0
150
言葉は感情の近似値である。その感情と言葉の誤差を最小化しよう ~コミュニケーションにおけるアナログ/デジタル変換の課題に立ち向かう~
nktamago
0
230
ロリポップ! for Gamersを支えるインフラ/lolipop for gamers infrastructure
takumakume
0
130
2024年のナビゲーション・フォーカス対応:Composeでキーボード・ナビゲーションをサポートしよう
tahia910
0
110
株式会社EventHub・エンジニア採用資料
eventhub
0
3k
Privacy Sandbox on Android / DroidKaigi 2024
7pairs
1
270
社内の学びの場・コミュニティ形成とエンジニア同士のリレーションシップ構築/devreljapan2024
nishiuma
3
290
Featured
See All Featured
How GitHub Uses GitHub to Build GitHub
holman
472
290k
Practical Orchestrator
shlominoach
185
10k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
166
48k
Unsuck your backbone
ammeep
667
57k
Building Better People: How to give real-time feedback that sticks.
wjessup
359
19k
Music & Morning Musume
bryan
46
6k
Side Projects
sachag
451
42k
It's Worth the Effort
3n
182
27k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
25
3.9k
Atom: Resistance is Futile
akmur
261
25k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2k
Done Done
chrislema
180
16k
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ʹϥΠϒϥϦͱͯ͠༻ҙ͞Εͯ ͍ͯɺ։ൃऀΛࢧԉͯ͘͠ΕΔ