Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Webサーバの高集積マルチテナントアーキテクチャに関する研究
MATSUMOTO Ryosuke
PRO
March 27, 2018
Research
0
460
Webサーバの高集積マルチテナントアーキテクチャに関する研究
松本の研究を通じて高集積ホスティングに関する技術と最新動向を学ぶ
ペパボ研究所 主席研究員/チーフエンジニア 松本亮介
2018年3月27日 小山さんへの高集積ホスティングに関する講義
MATSUMOTO Ryosuke
PRO
March 27, 2018
Tweet
Share
More Decks by MATSUMOTO Ryosuke
See All by MATSUMOTO Ryosuke
matsumoto_r
PRO
0
70
matsumoto_r
PRO
1
220
matsumoto_r
PRO
7
1.9k
matsumoto_r
PRO
0
420
matsumoto_r
PRO
3
3.3k
matsumoto_r
PRO
4
320
matsumoto_r
PRO
1
610
matsumoto_r
PRO
1
370
matsumoto_r
PRO
0
580
Other Decks in Research
See All in Research
jriely
0
290
hagino3000
0
380
ryoherisson
0
1.2k
ailaboocu
0
190
waptech
1
140
j20232
0
100
masakat0
0
220
yuawn
0
340
eumesy
3
1.7k
shunk031
0
830
clairity11
2
110
sei88888
4
300
Featured
See All Featured
trallard
14
720
dotmariusz
94
5.5k
sferik
610
55k
searls
204
36k
bryan
100
11k
trishagee
24
2.6k
62gerente
587
200k
brianwarren
82
4.7k
paulrobertlloyd
71
3.6k
tanoku
258
24k
addyosmani
1346
190k
michaelherold
225
8.5k
Transcript
দຊͷݚڀΛ௨ͯ͡ߴूੵϗεςΟϯάʹؔ͢Δٕज़ͱ࠷৽ಈΛֶͿ ϖύϘݚڀॴओ੮ݚڀһνʔϑΤϯδχΞদຊ྄հ ݄খࢁ͞ΜͷߴूੵϗεςΟϯάʹؔ͢Δߨٛ 8FCαʔόͷߴूੵϚϧνςφϯτ ΞʔΩςΫνϟʹؔ͢Δݚڀ
ຊൃදͷత wদຊͷݚڀΛ௨ͯ͡൚༻తͳϗεςΟϯάٕज़ΛֶͿ wؔ࿈ݚڀجૅ֓೦ɺαʔϏεͷϞσϧΛΔ wߴूੵϗεςΟϯάٕज़ͷ࠷৽ಈΛΔ
࣍ʢʣ ݚڀͷతͱҐஔ͚ͮ جຊ֓೦ͱؔ࿈ݚڀ ߴूੵ8FCϗεςΟϯάج൫ͷηΩϡϦςΟͱӡ༻ٕज़Λߟྀ ͨ͠ΞΫηε੍ޚΞʔΩςΫνϟ εϨου୯ҐͰߴʹݖݶΛߦ͏8FCαʔόͷΞΫηε੍
ޚΞʔΩςΫνϟ
࣍ʢʣ εΫϦϓτݴޠͰߴ͔ͭܰྔʹ֦ுՄೳͳ8FCαʔόͷػೳ ֦ுࢧԉΞʔΩςΫνϟ ϦΫΤετ୯ҐͰίϯϐϡʔλϦιʔεΛ͢ΔϦιʔε੍ ޚΞʔΩςΫνϟ ·ͱΊ
ୈষ ݚڀͷతͱҐஔ͚ͮ
ݚڀͷഎܠ wΫϥυ֤छ8FCαʔϏεͷීٴͱݸਓͷར༻ w8FCαʔϏεͷՁ֨Խͱ࣭ͷڝ૪ wӡ༻ٕज़ͷݚڀͱγεςϜͷ҆ఆԽ͕՝ w8FCαʔόͷߴूੵϚϧνςφϯτํࣜʹ wηΩϡϦςΟͱϗετͷऩ༰ޮ্͕ॏཁ
ݚڀͷత wߴूੵϚϧνςφϯτํࣜͷ՝Λཧɾղܾ wಛʹςφϯτͷίϯςϯπΛࣄۀऀ͕ཧͰ͖ͳ͍߹ ߴूੵϚϧνςφϯτؒͰͷݖݶͷ՝ղܾ ߴूੵϚϧνςφϯτํࣜͷػೳ֦ுͷ՝ղܾ ߴूੵϚϧνςφϯτؒͰͷϦιʔεͷ՝ղܾ
ݚڀͷҐஔ͚ͮ w8FCαʔόͷߴूੵϚϧνςφϯτํࣜʹ͓͍ͯίϯςϯ π੍͕ޚग़དྷͳ͍߹ͷෳͷ՝Λཧͯ͠ղܾ wߴूੵϚϧνςφϯτํࣜͷ8FCϗεςΟϯάʹண wମܥతʹϚϧνςφϯτํࣜͷैདྷख๏ͷ՝Λཧ wੑೳɾηΩϡϦςΟɾϦιʔε੍ޚɾӡ༻ٕज़ͷ؍Ͱղܾ w044ͱͯ͠ӡ༻ʹ͑͏Δ࣮Λߦ͍෯͘ར༻ͯ͘͠
ؔ࿈จ wത࢜จ w8FCαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟʹؔ͢Δݚڀ w IUUQTSFQPTJUPSZLVMJCLZPUPVBDKQETQBDFIBOEMF wαʔϕΠจ w8FCαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟͱӡ༻ٕज़ wIUUQTFBSDIJFJDFPSHCJOTVNNBSZQIQ JEKC@@DBUFHPSZMBOH+ZFBSBCTU
ୈষ جຊ֓೦ͱؔ࿈ݚڀ
ߴूੵϚϧνςφϯτํࣜͷ՝Λཧ جຊ֓೦ ӡ༻ٕज़ͱηΩϡϦςΟͱੑೳͷ՝ 8FCαʔόػೳ֦ுͷ՝ 8FCαʔόͷϦιʔε੍ޚͷ՝
جຊ֓೦
Ϛϧνςφϯτํࣜ
8FCαʔόͷϚϧνςφϯτํࣜ w୯ҰͷαʔόʹෳͷϢʔβڥΛߏங͢Δํࣜ wӡ༻ίετͱऩ༰ʢϋʔυΣΞʣίετΛݮՄೳ w8FCίϯςϯπΛཧՄೳͳ߹࠾༻͍͢͠ wࣄۀऀ͕ίϯςϯπΛཧͰ͖ͳ͍߹ӡ༻͕ࠔ ߴूੵԽʹ͏ϗετؒͷϦιʔεڝ߹ੑೳͷ՝
8FCίϯςϯπͷཧͱϚϧνςφϯτ w8FCίϯςϯπΛࣄۀऀ͕ཧͰ͖Δ߹ 8FCίϯςϯπ͔ΒϦιʔεݖݶͷΛఆՄೳ w8FCίϯςϯπΛࣄۀऀ͕ཧͰ͖ͳ͍߹ ͋ΒΏΔίϯςϯπ͕ಈͨ͘Ίऩ༰ઃܭɾӡ༻͕ࠔ ੬ऑͳίϯςϯπ͕͋ΔલఏͰϦιʔεɾݖݶ͕ඞཁ
8FCϗεςΟϯάαʔϏε
8FCϗεςΟϯάαʔϏεͷಛ wࣄۀऀ͓٬༷ͷ8FCίϯςϯπΛ੍ޚͰ͖ͳ͍ wϛυϧΣΞɾ04Ͱ੍ޚ͢Δඞཁ͕͋Δ wͰ͖Δ͚ͩฏʹϢʔβମݧΛఏڙ͖͢ wڞ༗ͷ߹Ϧιʔε੍ޚηΩϡϦςΟ͕ॏཁ wੑೳͱऩ༰Λ͍͔ʹόϥϯεΛͱΔ͔ॏཁ
ݸਓ͚ͷ8FCαʔϏεͷ૿ՃͱՁ֨Խ wֶੜओ්ͱ͍ͬͨݸਓ͕झຯͰ͏༻్ͷ૿Ճ wϋʔυΣΞͷϗετऩ༰ͷ࠷େԽ͕ॏཁ wηΩϡϦςΟΛ୲อͭͭ͠ੑೳͱϋʔυΣΞϦιʔ εޮΛ࠷େԽ͢ΔͨΊʹιϑτΣΞٕज़Λ׆༻ ➜ɹຊݚڀͷ໘ന͍ͱ͜Ζ
ϚϧνςφϯτํࣜͷΞʔΩςΫνϟ
ϚϧνςφϯτํࣜͷΞʔΩςΫνϟ֓ཁ ߴूੵϚϧνςφϯτํࣜ8FCαʔόͷΞʔΩςΫνϟ ಈతίϯςϯπͷ࣮ߦํࣜ
ߴूੵϚϧνςφϯτํࣜͷ 8FCαʔόͷΞʔΩςΫνϟ
ϓϩηεͱऩ༰ϗετ͕ॏཁ wϓϩηε͕ϗετʹґଘ͠ͳ͍ߏ wෳαΠτڞ༗ͷ8FCαʔόϓϩηε͕ϦΫΤετ ͞Εͨϗετ໊͔ΒಈతʹίϯςϯπΛݕग़ͯ͠ॲཧ ͢Δํ͕ࣜߴूੵϚϧνςφϯτʹඞཁ ྫɿ"QBDIFͷ7JSUVBM)PTUػೳ
8FCαʔόͷجຊతͳϞσϧ 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF $IJMEIUUQEQSPDFTT PXOFSBQBDIF $MJFOU
ϦΫΤετ Ϩεϙϯε 6/*9ܥ04ͷ߹ࣄલʹϦΫΤετΛड͚Δ ϓϩηεΛෳGPSL ͯ͠ϓʔϧ͓ͯ͘͠ ʢ͜ΕΒશͯΛؚΊͯʮ୯Ұͷαʔόϓϩηεʯͱఆٛʣ ϦΫΤετ Ϩεϙϯε ϦΫΤετ Ϩεϙϯε
ߴूੵͷͨΊͷΞʔΩςΫνϟ IUUQE Ϣʔβ" IUUQE Ϣʔβ# IUUQE Ϣʔβ$ IUUQE Ϣʔβ" Ϣʔβ#
Ϣʔβ$ ޮྑ͘ϦιʔεΛ͑Δ ىಈʹඞཁ ͳϦιʔε ىಈʹඞཁ ͳϦιʔε ىಈʹඞཁ ͳϦιʔε ىಈʹඞཁͳϦιʔε ߴूੵ͕ཁٻ͞ΕΔ߹ͷ Ϛϧνςφϯτʢຊݚڀʣ ϚϧνςφϯτͷผΞϓϩʔν
ಈతίϯςϯπͷ࣮ߦํࣜ
ಈతίϯςϯπͷ࣮ߦํࣜ $(*ʢ$PNNPO(BUFXBZ*OUFSGBDFʣ࣮ߦํࣜ %40ʢ%ZOBNJD4IBSFE0CKFDUʣ࣮ߦํࣜ
$(*࣮ߦํࣜ $(*QSPDFTT QIQDHJJOEFYQIQ $(*QSPDFTT GPSL UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT
PXOFSBQBDIF ϦΫΤετຖʹϓϩηεͷੜɾഁغͱ ൺֱతେ͖ͳόΠφϦʢ1)1ͩͱQIQDHJόΠφϦʣͷ FYFDWF ͕ඞཁ
%40࣮ߦํࣜ 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF JOEFYQIQ QBSTF SVO αʔόϓϩηεʹΠϯλϓϦλΛϥΠϒϥϦ
ͱͯ͠ΈࠐΜͰ͓͘
ಈతίϯςϯπͷ࣮ߦํࣜ w$(*࣮ߦํࣜ ΠϯλϓϦλͷෳόʔδϣϯΛ࣮ߦͰ͖Δ w%40࣮ߦํࣜ ੑೳߴ͍͕جຊతʹ୯Ұͷ8FCαʔόʹΠϯλ ϓϦλΛෳόʔδϣϯ࣋ͯͳ͍
ߴूੵϚϧνςφϯτํࣜͷ՝ wߴूੵΛ࣮ݱ͢Δ"QBDIFͷ7JSUVBM)PTUػೳͷΑ͏ͳ ΞʔΩςΫνϟϦιʔεޮ͕ྑ͍͕ෳ՝͕Δ ӡ༻ٕज़ͱηΩϡϦςΟͱੑೳͷ՝➜ 8FCαʔόͷػೳ֦ுͱ՝➜ 8FCαʔόͷϦιʔε੍ޚͱ՝➜
ӡ༻ٕज़ͱηΩϡϦςΟͱੑೳͷ՝
ӡ༻ٕज़ͱੑೳͷ՝ wϗετ୯ҐʹઃఆΛՃͯ͠ཧɾ੍ޚ͢Δӡ༻ wϗετͷ੩తઃఆʹΑΔϝϞϦͱಡࠐΈෛՙ૿େ ϖʔδςʔϒϧΤϯτϦ 15& ͷංେԽʹΑΓGPSL ͷ࣮ ߦॲཧ͕ඇৗʹ͍ ϓϩηεͷϦϩʔυ͔͔࣌ؒΔ߹༗Γ
ηΩϡϦςΟͱੑೳͷ՝ w$(*ํࣜͷΞΫηε੍ޚʹΑΔ੩తઃఆͷڧ੍ ϗετ୯ҐͰ੩తʹΦʔφ໊Λઃఆ͢Δඞཁ༗Γ ϗετʹґଘͨ͠ઃఆͱϝϞϦ༻ྔͷ૿Ճ wैདྷͷ%40ͷΞΫηε੍ޚͰ$(*ํࣜҎԼͷੑೳ wϗετͷ্ҐσΟϨΫτϦͷγεςϜྖҬͷӾཡ
$(*QSPDFTT PXOFSVTFS $(*QSPDFTT PXOFSSPPU QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS ੩తʹઃఆ͞ΕͨVJEΛݩʹTFUVJE TFUHJE
GPSL FYFDWF TVFYFDQSPHSBN TFUVJESPPU UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF ˞$(* ैདྷͷΞΫηε੍ޚख๏ ϦΫΤετຖʹ$(*༻ϓϩηεͷ ੜഁغ͕ඞཁ
1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSSPPU JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO
$IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSVTFS UFSNJOBUFQSPDFTT ϦΫΤετຖʹࢠIUUQEϓϩηεͷੜഁغ͕ඞཁ ˞%40 ैདྷͷΞΫηε੍ޚख๏
ఏҊख๏
ӡ༻ٕज़ͱηΩϡϦςΟΛղܾ wͭͷΞΫηε੍ޚΞʔΩςΫνϟΛఏҊ w$(*ํࣜͰηΩϡϦςΟͱӡ༻ٕज़Λཱ྆͢ΔΞΫ ηε੍ޚΞʔΩςΫνϟ➜ষ w%40ํࣜͰηΩϡϦςΟͱੑೳΛཱ྆͢ΔΞΫηε ੍ޚΞʔΩςΫνϟ➜ষ
8FCαʔόͷػೳ֦ுͱ՝
8FCαʔϏεͷ҆ఆੑ্ͷ՝ wηΩϡϦςΟϦιʔεཧͷॏཁੑͷߴ·Γ wαʔϏεͷӡ༻ɾཧίετͷݮ͕ඞཁ wαʔϏεܗଶʹΑͬͯ8FCαʔόͷ࠷దԽ͕ඞཁ w8FCαʔόͷ֦ுػೳͷඞཁੑ͕૿Ճ
8FCαʔόͷػೳ֦ு͕ॏཁ wϨεϙϯεੜॲཧલޙʹॲཧΛࠩ͠ࠐΉ w8FCίϯςϯπʹґଘ͠ͳ͍ޮͷྑ͍ΞΫηε੍ ޚϦιʔεΛ࣮ݱՄೳ w8FCαʔϏεͷӡ༻ɾཧΛޮԽՄೳ w8FCαʔόͷઃఆ͚ͩͰղܾͰ͖ͳ͍՝ͷ૿Ճ
ैདྷͷ8FCαʔόͷػೳ֦ுख๏ w$ݴޠʹΑΔ࣮͕ఆ൪ ߴ͔ͭলϝϞϦ㱻อकੑੜ࢈ੑ͕͍ wεΫϦϓτݴޠʹΑΔ࣮ อकੑੜ࢈ੑ͕ߴ͍㱻ੑೳɾ҆શੑͷ
ఏҊख๏
εΫϦϓτͰߴ͔ͭ҆શʹ֦ுՄೳ w8FCαʔόϓϩηεͷΠϯλϓϦλΈࠐΈΛ࠷దԽ wߴूੵϚϧνςφϯτํࣜͰӡ༻อकΛߟྀͨ͠ػೳ ֦ுΞʔΩςΫνϟ͕ॏཁͰ͋Δ wੑೳ໘ͱ҆શੑΛཱ྆ͨ͠ΞʔΩςΫνϟͷઃܭͱੜ ࢈ੑΛߴΊΔ࣮➜ষ
8FCαʔόͷϦιʔε੍ޚͱ՝
ैདྷͷ8FCαʔόͷϦιʔε੍ޚ wϋʔυΣΞϦιʔεಉ࣌ଓͳͲΛ୯७ͳᮢ ॲཧͰ੍ݶ wᮢΛ͑ΔͱϦΫΤετॲཧΛڧ੍அɾڋ൱ wϦΫΤετΛड͚Δ͔ड͚ͳ͍͔ͷ୯७ͳ੍ޚ
ैདྷͷϦιʔε੍ޚͷ՝ αʔόͷෛՙΛݮ͢Δ͜ͱΛॏࢹ͢Δ͋·ΓϢʔβ ମݧΛେ͖͘ଛͳ͍ͬͯΔ ࠷େಉ࣌ଓҎԼͰҰͭͷϦΫΤετͰେྔʹϦ ιʔεΛ༻͢ΔίϯςϯπΛߟྀͰ͖͍ͯͳ͍ ੍ݶͷཻ͕ߥ͘ϗετؒͷϦιʔεڝ߹ʹΑΓշద ʹ͑ΔϢʔβͱ͑ͳ͍Ϣʔβͷ͕ࠩେ͖͍
ఏҊख๏
ϦΫΤετ୯ҐͰϦιʔεΛ wϦΫΤετͷதஅͰͳ͘ܧଓతʹॲཧ͢Δख๏ wϦΫΤετ୯ҐͰϦΫΤετͷଐੑʹج͍ͯϦιʔε੍ޚ wཧऀ͕ෳࡶͳઃఆΛϓϩάϥϚϒϧʹදݱՄೳ wಛఆͷίϯϐϡʔλϦιʔεൣғͰॲཧ͢ΔΞʔΩς Ϋνϟ➜ষ
ୈষ ߴूੵ8FCϗεςΟϯάج൫ͷηΩϡϦςΟ ͱӡ༻ٕज़Λߟྀͨ͠ΞΫηε੍ޚΞʔΩςΫνϟ
ষͷ՝ͷ·ͱΊ wಈతίϯςϯπ$(*ํࣜΛ͏ඞཁ͕͋Δ ෳόʔδϣϯͷΠϯλϓϦλΛѻ͍͍ͨ %40ํࣜͷΞΫηε੍ޚ$(*ఔͷੑೳʹͳΔ w੩తઃఆͷ૿ՃʹΑΔϝϞϦ༻ྔͷ૿େ wγεςϜྖҬͷӾཡෆՄͷͨΊͷઃఆίετ͕ߴ͍
ӡ༻໘ͱηΩϡϦςΟΛཱ྆͢ΔఏҊख๏ wϦΫΤετ͞ΕͨϑΝΠϧ͔ΒಈతʹPXOFSΛऔಘ ઃఆΛϗετͷʹ߹Θͤͯ૿͢ඞཁ͕ͳ͍ ϗετͷऩ༰ʹґଘͯ͠ϝϞϦ༻ྔ͕૿େ͠ͳ͍ 15&͕ංେԽͤͣGPSL ͷ࣮ߦॲཧ͕͘ͳΒͳ͍ wϑΝΠϧͷPXOFSʹΑΔݖݶͷࡍʹϑΝΠϧγεςϜΛ ߹Θִͤͯ
1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSSPPU JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO
˞%40 ैདྷͷΞΫηε੍ޚख๏ $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSVTFS UFSNJOBUFQSPDFTT ϦΫΤετຖͷࢠIUUQEϓϩηεͷੜഁغ͕ඞཁ
$(*QSPDFTT PXOFSVTFS $(*QSPDFTT PXOFSSPPU QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS ੩తʹઃఆ͞ΕͨVJEΛݩʹTFUVJE TFUHJE
GPSL FYFDWF TVFYFDQSPHSBN TFUVJESPPU UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF ϦΫΤετຖʹ$(*༻ϓϩηεͷ ੜഁغ͕ඞཁ ˞$(* ैདྷͷΞΫηε੍ޚख๏
$(*QSPDFTT PXOFSVTFS $(*QSPDFTT PXOFSSPPU QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS DISPPU
ϦΫΤετϑΝΠϧ͔ΒVJEऔಘޙ TFUVJE TFUHJE GPSL FYFDWF TVFYFDQSPHSBN TFUVJESPPU UFSNJOBUFQSPDFTT FYFDWF 1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF DISPPU&OWJSPONFOU ˞$(* ఏҊ͢ΔΞʔΩςΫνϟ
ੑೳධՁ w"QBDIFIUUQEʹରͯ͠ఏҊΞʔΩςΫνϟΛ࣮ wಉ࣌ଓΛมԽͤ͞ͳ͕ΒඵؒͷϨεϙϯεΛܭଌ w1)1ͰจࣈྻΛग़ྗ͢Δ͚ͩͷ$(*ϓϩάϥϜΛར༻ wैདྷख๏ͱఏҊख๏ͷੑೳΛධՁ
࣮ݧڥ
̏ষ·ͱΊ wӡ༻ٕज़ͱηΩϡϦςΟΛߟྀͨ͠$(*ͷ৽͍͠ΞʔΩςΫνϟΛఏҊ wैདྷͷΞʔΩςΫνϟͱಉͷੑೳͰΑΓηΩϡΞͰѻ͍͍༷͢ ߴूੵ࣌ʹ͓͍ͯઃఆʹԠͨ͡ϝϞϦ૿Ճ͕ੜ͡ͳ͍ͨΊ࣮ӡ༻ ্ߴʹಈ࡞Մೳ DISPPU͢ΔͨΊͷϢʔβڥͷߏஙผ్Ϣʔβຖʹඞཁ wߴूੵϚϧνςφϯτͷςφϯτ૿ՃΛߟྀͨ͠ΞʔΩςΫνϟ
ୈষ εϨου୯ҐͰߴʹݖݶΛߦ͏ WebαʔόͷΞΫηε੍ޚΞʔΩςΫνϟ
ষͷ՝ͷ·ͱΊ wষͷΞΫηε੍ޚΞʔΩςΫνϟӡ༻ੑʹண $(*ͷརʢෳόʔδϣϯͷఏڙʣΛߟྀ w%40൛ͷੑೳΛ׆͔͢ΞΫηε੍ޚख๏͕ແ͍ w࣮ߦํࣜΠϯλϓϦλ͕ಠࣗʹΞΫηε੍ޚख๏Λ ࣮͓ͯ͠Γࡶ
ߴूੵϚϧνςφϯτͱ$(*ɾ%40ͷੑೳ wੑೳ໘ʹ͓͍ͯ$(*ຊདྷద͍ͯ͠ͳ͍ ऩ༰͕૿͑ΔͱϓϩηεͷϝϞϦ༻ྔ͕૿͑GPSL ͷޮԼ ͦͦϦΫΤετ୯ҐͰGPSL ͢ΔͷͰ͍ w%40ຊདྷGPSL Λ࣮ߦ͠ͳ͍ͨΊߴʹಈ࡞͢Δ͕
ैདྷͷ%40ͷΞΫηε੍ޚϦΫΤετຖʹGPSL Λ࣮ߦ͢Δ
1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSSPPU JOEFYQIQ PXOFSVTFS TFUVJE TFUHJE QBSTF SVO
˞%40 ैདྷͷΞΫηε੍ޚख๏ $IJMEIUUQEQSPDFTT PXOFSVTFS $IJMEIUUQEQSPDFTT PXOFSVTFS UFSNJOBUFQSPDFTT ϦΫΤετຖͷࢠIUUQEϓϩηεͷੜഁغ͕ඞཁ
ఏҊ͢ΔΞΫηε੍ޚΞʔΩςΫνϟ w%40ํࣜͷੑೳΛ׆͔͢ΞʔΩςΫνϟ wಈతίϯςϯπ࣮ߦલʹΦʔφมߋͷಛݖͷΈΛ༩ ੍͑ͨޚ༻ͷεϨουΛ࡞ wΦʔφΛมߋͨ͠εϨου্ͰίϯςϯπΛॲཧ wίϯςϯπ࣮ߦޙεϨουͷΈΛআ
-JOVYεϨουͱ-JOVY$BQBCJMJUJFT w-JOVY,FSOFMҎ߱ͷಠࣗͷηΩϡϦςΟϞσϧ wSPPUಛݖΛࡉԽͯ͠εϨου୯ҐͰ༩Մೳ wΦʔφʔͷมߋɾXFMMLOPXOQPSUͷMJTUFOݸ w-JOVYલఏͰ͋ΕఏҊख๏͕࣮ݱՄೳ
1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF UISFBE PXOFSVTFS UISFBE PXOFSBQBDIF JOEFYQIQ PXOFSVTFS
TFUVJE TFUHJE ʜ VOTFUDBQT DSFBUFUISFBE TFUDBQT EFTUSPZUISFBE QBSTF SVO QSDUM TFUVJETFUHJEDBQT UISFBE PXOFSVTFS ˞%40 ఏҊ͢ΔΞΫηε੍ޚΞʔΩςΫνϟ
1BSFOUIUUQEQSPDFTT PXOFSSPPU $IJMEIUUQEQSPDFTT PXOFSBQBDIF UISFBE PXOFSVTFS UISFBE PXOFSBQBDIF TFUVJE TFUHJE
ʜ VOTFUDBQT DSFBUFUISFBE TFUDBQT EFTUSPZUISFBE QSDUM TFUVJETFUHJEDBQT UISFBE PXOFSVTFS ˞$(* ఏҊ͢ΔΞΫηε੍ޚΞʔΩςΫνϟ $(*QSPDFTT PXOFSVTFS QIQDHJJOEFYQIQ PXOFSVTFS $(*QSPDFTT PXOFSVTFS GPSL UFSNJOBUFQSPDFTT FYFDWF
8FCαʔόϞσϧͱ੍ޚ༻εϨουͷߟ wϦΫΤετϓϩηε༗͢ΔαʔόϞσϧલఏ w%40εϨουͷ༗ແʹؔΘΒͣαʔόϓϩηεʹ Έࠐ·ΕͨΠϯλϓϦλ͕ϓϩάϥϜΛ࣮ߦ wεϨουΛҰ࣌తʹ࡞Δ͜ͱʹΑΔηΩϡϦςΟϨϕ ϧͷԼੜ͡ͳ͍
-JOVYͰ"QBDIFϞδϡʔϧͱ࣮ͯ͠ wNPE@QSPDFTT@TFDVSJUZϞδϡʔϧ wઃఆҎԼͷΑ͏ʹγϯϓϧ
ੑೳධՁ w"QBDIFIUUQEʹରͯ͠ఏҊΞʔΩςΫνϟΛ࣮ wඵؒͷϦΫΤετΛมԽͤ͞ϨεϙϯεΛܭଌ wQIQJOGP Λग़ྗ͢Δ͚ͩͷ؆୯ͳϓϩάϥϜΛ༻ҙ wैདྷख๏ͱఏҊख๏ͷੑೳΛධՁ
࣮ݧڥ
%40࣮ߦํࣜͷΞΫηε੍ޚੑೳൺֱ w ඵؒϦΫΤετΛ૿Ճͤ͞ͳ͕Βඵ ؒϨεϙϯεΛܭଌ w ͷैདྷͷΞΫηε੍ޚ΄ͱΜͲੑ ೳ͕Ͱ͍ͯͳ͍ w ͷఏҊ͢ΔΞΫηε੍ޚΞΫηε ੍ޚແ͠ͷ߹ͱൺͯ΄ͱΜͲΦʔ
όʔϔουແ͠ ੨ɿΞΫηε੍ޚແ͠ ɿఏҊ͢ΔΞΫηε੍ޚ ɿैདྷͷΞΫηε੍ޚ
$(*࣮ߦํࣜͷΞΫηε੍ޚੑೳൺֱ w ඵؒϦΫΤετΛ૿Ճͤ͞ͳ͕ΒඵؒϨ εϙϯεΛܭଌ w $(*ͷΞΫηε੍ޚͷ༗ແʹؔΘΒͣ$(* ͷ࣮ߦํࣜͷΦʔόʔϔου͕େ͖͍ͨΊɺ ΞΫηε੍ޚʹΑΔΦʔόʔϔουແ͍ w ষͷ$(*ͷΞΫηε੍ޚTVFYFDͱಉ
ͷੑೳͰ͋Δ͜ͱ͕ষͰ࣮ݧࡁΈ ੨ɿΞΫηε੍ޚແ͠ ɿैདྷͷΞΫηε੍ޚ ɿఏҊ͢ΔΞΫηε੍ޚ
ࢀߟɿγεςϜίʔϧͷΛൺֱ wQIQJOGP ͷΞΫηεΛTUSBDF͔Βղੳ w$(*ʴTV&9&$ճ wNPE@QIQ NPE@QSPDFTT@TFDVSJUZճ wΦʔόʔϔουʹͳͬͯΔγεςϜίʔϧ wDMPOF PQFO DMPTF
FYFDWF ͳͲTV&9&$ؔ࿈ ˞TUSBDFDGQ1*% ˞DBUDHJMPHcHSFQWFQPMM@XBJUcHSFQWGVUFYcQFSMBOF <aEa> QSJOU@JG
ࢀߟɿಋೖલޙͷ$16༻ྔൺֱ ҰͷΞΫηεͲͪΒͷαʔόສʢαʔϏεશମͰेԯʣ $(*ʴTV&9&$ %40ʴNPE@QSPDFTT@TFDVSJUZ ˙TZTUFN ˙VTFS ˙JEMF
ষ·ͱΊ wߴूੵϚϧνςφϯτํࣜʹ͓͚ΔੑೳΛߟྀͨ͠Ξ Ϋηε੍ޚΞʔΩςΫνϟͷఏҊ w%40࣮ߦํࣜͷΞΫηε੍ޚͱͯ͠େ෯ʹੑೳվળ wఏҊख๏$(*࣮ߦํࣜʹద༻Մೳ
ষͷ$(*ͷΞΫηε੍ޚͱͷҧ͍ wষͷΞΫηε੍ޚ҆શʹDISPPUͰ͖ͳ͍ wεϨου্ͰDISPPU͢ΔͱಉҰϓϩηε্ʹଐ͢Δ શͯͷεϨου͕DISPPU͞ΕΔ wεϨουΛੜͨ͠ϓϩηεࣗମDISPPU͞ΕΔͨ Ί߹ʹΑͬͯҙਤ͠ͳ͍ಈ࡞Λ͢ΔՄೳੑ͕͋Δ
$(*ํࣜͷΞΫηε੍ޚͷ͍͚ wDISPPUʹΑΔִ·Ͱߦ͍͍ͨ߹➜ষ wಉҰͷΞΫηε੍ޚͰ౷Ұతʹ͍ͨ͠߹➜ষ wੑೳಉఔ
ୈষ εΫϦϓτݴޠͰߴ͔ͭܰྔʹ֦ுՄೳͳ 8FCαʔόͷػೳ֦ுࢧԉΞʔΩςΫνϟ
ষͷ՝ͷ·ͱΊ w8FCαʔόͷػೳ֦ுʹ͓͍ͯੑೳΛߟྀͨ͠߹ $ݴޠʹΑΔ࣮͕ఆ൪ wैདྷͷ8FCαʔόͷεΫϦϓτݴޠʹΑΔ֦ுੑ ೳ໘ͱ҆શੑʹ՝ wαʔόϓϩηεͷΠϯλϓϦλΈࠐΈͷΞʔΩς ΫνϟͷఏҊ͕ॏཁ
ैདྷͷεΫϦϓτʹΑΔػೳ֦ுํࣜʢ̍ʣ wΠϯλϓϦλڞ༗ํࣜʢNPE@QFSMɺNPE@SVCZʣ αʔόϓϩηεىಈ࣌ʹ୯ҰͷΠϯλϓϦλ֬อ ϦΫΤετॲཧ࣌ʹෳͷεΫϦϓτͰΠϯλϓϦλڞ༗ άϩʔόϧͷঢ়ଶڞ༗ ߴػೳ͔ͭنͷେ͖͍ΠϯλϓϦλʹ࠷ద
ैདྷͷεΫϦϓτʹΑΔػೳ֦ுํࣜʢ̎ʣ wෳΠϯλϓϦλํࣜʢNPE@MVBʣ εΫϦϓτ࣮ߦʢϦΫΤετॲཧʣ୯ҐͰΠϯλϓϦλ֬อ άϩʔόϧͳঢ়ଶಠཱͰ҆શ ΠϯλϓϦλ͕֬อ͢Δঢ়ଶ։์ͯ͠লϝϞϦ ػೳͰߴɾলϝϞϦͳΈࠐΈεΫϦϓτݴޠͳͲʹ࠷ద
ैདྷख๏ͷ՝ wΠϯλϓϦλڞ༗ํࣜͷ՝ άϩʔόϧঢ়ଶ͕ෳεΫϦϓτͰׯব ࣮ߦ࣌ͷόΠτίʔυ૿ՃʹΑΔϝϞϦͷ૿Ճ wෳΠϯλϓϦλํࣜͷ՝ ϦΫΤετຖͷΠϯλϓϦλ֬อɾ։์ͷίετ͕ߴ͍
VM • • •
ఏҊ͢ΔΞʔΩςΫνϟ wੑೳ͕ཁٻ͞ΕΔՕॴΠϯλϓϦλڞ༗ wੑೳ͕ཁٻ͞Εͳ͍ՕॴݸผʹΠϯλϓϦλ֬อ wϝϞϦ૿ՃͷݪҼͰ͋ΔόΠτίʔυͷΈΛ։์ w҆શੑͷ໘Ͱάϩʔόϧͷঢ়ଶͷΈΛ։์Մೳ wόΠτίʔυΩϟογϡʹΑΔߴԽՄೳ
αʔόϓϩηε ࢠαʔόϓϩηε" ϦΫΤετॲཧ༻ΠϯλϓϦλ ىಈ࣌ॲཧ༻ΠϯλϓϦλ ϦΫΤετҎ֎ͷॲཧ༻ΠϯλϓϦλ εΫϦϓτ εΫϦϓτ εΫϦϓτ εΫϦϓτ εΫϦϓτ
ੑೳ͕ཁٻ͞ΕΔϑοΫ ΠϯλϓϦλΛڞ༗ ɾ ɾ ɾ
w αʔόϓϩηεىಈ࣌ʹΠϯλϓ ϦλΛ֬อ w ϦΫΤετॲཧ࣌ʹΠϯλϓϦλ Λڞ༗ͯ͠εΫϦϓτΛίϯύΠϧ ͔ͯ͠Β࣮ߦ ߏจղੳ όΠτίʔυੜ 7.্Ͱ࣮ߦ
ϦΫΤετຖʹαʔόϓϩηε͕εΫϦϓτΛϑοΫ εΫϦϓτಡΈࠐΈ ΠϯλϓϦλͱ ϥΠϒϥϦΛڞ༗ όΠτίʔυɺάϩʔόϧมɾΫϥεɺྫ֎ϑϥάΛ։์ ഉଞॲཧ ϚϧνεϨου8FC αʔόΞʔΩςΫνϟ ʹରԠ
ߏจղੳ όΠτίʔυੜ 7.্Ͱ࣮ߦ ϦΫΤετຖʹαʔόϓϩηε͕εΫϦϓτΛϑοΫ εΫϦϓτಡΈࠐΈ ΠϯλϓϦλͱ ϥΠϒϥϦΛڞ༗ άϩʔόϧมɾΫϥεɺྫ֎ϑϥάΛ։์ όΠτίʔυ ςʔϒϧ
w όΠτίʔυΩϟογϡʹΑͬͯαʔ όϓϩηεىಈޙʹίʔυมߋ͕ඞ ཁͳ͍߹ߴԽ w αʔόىಈ࣌ʹίϯύΠϧͯ͠όΠ τίʔυςʔϒϧʹอଘ͓͖ͯ͠ɺ ϦΫΤετ࣌ʹऔಘ࣮ͯ͠ߦ
ΞʔΩςΫνϟͷ࣮ w"QBDIFϞδϡʔϧͷNPE@NSVCZͱ࣮ͯ͠ wOHJOYϞδϡʔϧͷOHY@NSVCZͱ࣮ͯ͠ wNSVCZͱ͍͏ܰྔ3VCZΠϯλϓϦλΛར༻ w3VCZͰ8FCαʔόͷৼΔ͍Λ֦ுՄೳ wదࡐదॴͱͯ͠ैདྷͷ$ݴޠͷ࣮ͱڞଘՄೳ
NPE@NSVCZͷػೳ֦ுͷ֓ཁਤ
NPE@NSVCZઃఆྫ # Normal hook <Location /mruby-test> mrubyHandlerMiddle /path/to/test.rb </Location> #
ByteCode Caching at Start up <Location /mruby-test-cache> mrubyHandlerMiddle /path/to/test.rb cache </Location>
NPE@NSVCZઃఆྫ # Normal hook <Location /mruby-test> mrubyHandlerMiddle /path/to/test.rb </Location> #
ByteCode Caching at Start up <Location /mruby-test-cache> mrubyHandlerMiddle /path/to/test.rb cache </Location>
OHY@NSVCZͷΠϯϥΠϯઃఆྫ # Inline code hook location /mruby-hello { mruby_content_handler_code ‘
r = Nginx::Request.new c = Nginx::Connection.new r.content_type = “text/plain” Nginx.echo “Hello #{c.remote_ip} World” ‘; }
NPE@NSVCZͰͷ3FWFSTF1SPYZ # mrubyTranslateNameFirst “/path/to/proxy.rb” backends = [ "http://192.168.0.101:8888/", "http://192.168.0.102:8888/", "http://192.168.0.103:8888/",
] r = Apache::Request.new backend = backends[rand(backends.length)] r.reverse_proxy backend + r.unparsed_uri
OHY@NSVCZͰͷ3FWFSTF1SPYZ # location /proxy { # mruby_set $backend "/path/to/proxy.rb"; #
proxy_pass http://$backend; # } backends = [ "http://192.168.0.101:8888/", "http://192.168.0.102:8888/", "http://192.168.0.103:8888/", ] backends[rand(backends.length)]
NPE@NSVCZͷ#BTJD"VUIXJUI3FEJT # <Location /basic/> # AuthType basic # AuthName "Message
for clients" # AuthBasicProvider mruby # mrubyAuthnCheckPassword /path/to/authn_basic.rb # require valid-user # </Location> anp = Apache::AuthnProvider.new redis = Redis.new "127.0.0.1”, 6379 if redis.get(anp.user) == anp.password Apache.return Apache::AuthnProvider::AUTH_GRANTED else Apache.return Apache::AuthnProvider::AUTH_DENIED end
ҟͳΔ8FCαʔόͷ౷Ұత֦ுهड़ "QBDIF "1* 3VCZTDSJQU NPE@NSVCZ 3VCZTDSJQU ɾ ɾ ɾ ɾ
3VCZTDSJQUO /HJOY "1* OHY@NSVCZ 3VCZTDSJQU "QBDIF $PSF /HJOY $PSF 3VCZ %4- GPS8FC "QBDIF 5SB⒏D 4FSWFS "1* UT@NSVCZ "QBDIF 5SB⒏D 4FSWFS $PSF SFGIUUQTHJUIVCDPNTZVDSFBNUT@NSVCZ
౷Ұతهड़ྫ # Output Hello World Server = get_server_calss Server.rputs "Hello
#{Server.module_name}/ #{Server.module_version} world!" # mod_mruby => "Hello mod_mruby/1.9.3 world!" # ngx_mruby => "Hello ngx_mruby/1.3.2 world!" # ts_mruby => "Hello ts_mruby/0.0.1 world!"
࣮ݧ wੑೳධՁ )FMMP8PSMEग़ྗͷ୯७ͳϓϩάϥϜʢΠϯλϓϦλͷੑೳͰ ͳ͘ΈࠐΈΞʔΩςΫνϟͷੑೳΛ࠷େԽ͢ΔͨΊʣ ैདྷɾఏҊख๏Ͱ࣮ߦ͠ඵؒͷϨεϙϯεΛܭଌ ಉ࣌ଓɾ૯ଓສ
࣮ݧڥ
ैདྷख๏ͱͷੑೳൺֱ ैདྷͷػೳ֦ ு NPE@QFSM NPE@SVCZ NPE@MVB NPE@NSVCZ NPE@NSVCZ Ωϟογϡ ݴޠ
$ 1FSM 3VCZ -VB NSVCZ NSVCZ ΠϯλϓϦλ ॳظԽॲཧ ࣄલ ࣄલ ࣄલ ϥΠϒϥϦ ಡΈࠐΈ ࣄલ ࣄલ ࣄલ ίϯύΠϧ ࣄલ ࣄલ ίʔυͷมߋ ෆՄ Մ Մ Մ ෆՄ άϩʔόϧঢ়ଶ ڞ༗ ڞ༗ ඇڞ༗ ඇڞ༗ ඇڞ༗ ੑೳ 3FTQPOTFTFD
ੈքதͷ8FCϑϨʔϜϫʔΫͷΛڝ͏ίϯςετ$ɺ$ ɺ+BWBɺ(Pͷத 3VCZͰؤு͍ͬͯΔҐ SFGIUUQTXXXUFDIFNQPXFSDPNCFODINBSLT
ݴޠΛ3VCZʹݶఆͨ݁͠Ռ ѹతҐ SFGIUUQTXXXUFDIFNQPXFSDPNCFODINBSLT
ষͷ·ͱΊ wεΫϦϓτݴޠͰߴ͔ͭ҆શʹಈ࡞͢Δ8FCαʔόػೳ֦ ுࢧԉΞʔΩςΫνϟΛఏҊ wैདྷݚڀΑΓߴͰ8FCαʔό׆༻έʔεͰ$ݴޠͰͷ࣮ ʹḮ৭ͳ͍ΞʔΩςΫνϟΛ࣮ݱ w͘ΘΕ͍ͯΔ8FCαʔόιϑτΣΞͷϞδϡʔϧͱͯ͠ ࣮͠ΦʔϓϯιʔειϑτΣΞͱͯ͠ެ։
ষͷࠓޙͷ՝ wάϩʔόϧมྖҬͷࣗಈ։์ػೳ wݱࡏखಈ։์Ͱ͋Δ͕ಛఆͷάϩʔόϧมҎ֎ ࣗಈͰ։์Ͱ͖ΔॲཧʢઃఆͰΓସ͑ՄೳʣΛ Ճ༧ఆ
ୈষ ϦΫΤετ୯ҐͰίϯϐϡʔλϦιʔεΛ ͢ΔWebαʔόͷ Ϧιʔε੍ޚΞʔΩςΫνϟ
ষͷ՝ͷ·ͱΊ αʔόͷෛՙΛݮ͢Δ͜ͱΛॏࢹ͢Δ͋·ΓϢʔβ ମݧΛେ͖͘ଛͳ͍ͬͯΔ ࠷େಉ࣌ଓҎԼͰҰͭͷϦΫΤετͰେྔʹϦ ιʔεΛ༻͢ΔίϯςϯπΛߟྀͰ͖͍ͯͳ͍ ੍ݶͷཻ͕ߥ͘ϗετؒͷϦιʔεڝ߹ʹΑΓշద
ʹ͑ΔϢʔβͱ͑ͳ͍Ϣʔβͷ͕ࠩେ͖͍
࣮ݱ͍ͨ͠Ϧιʔε੍ޚʢ̍ʣ 8FCαʔό 8FCαʔό Ϛϧνςφϯτํࣜͷαʔόશମͷ$16Ϧιʔε͕ṧഭͨ͠ঢ়ଶʹ͓͍ͯɺ ༻Ͱ͖Δ$16Ϧιʔεʹ੍ݶ͞ΕΔ͕ɺར༻Ͱ͖ΔΫϥΠΞϯτഒ ΞΫηεෆՄ ΞΫηεՄʂ ΞΫηεՄ $16ˋ༻͢Δ
ͭͷϓϩάϥϜΛॲཧ $16ˋ༻͢Δ ͭͷϓϩάϥϜΛॲཧ ఏҊख๏ ैདྷख๏ ΑΓཻͷ ࡉ੍͔͍ݶ
࣮ݱ͍ͨ͠Ϧιʔε੍ޚʢ̎ʣ wϦΫΤετʹؚ·ΕΔ༷ʑͳଐੑΛݩʹ੍ޚ͍ͨ͠ ߴूੵϚϧνςφϯτํࣜͰϦΫΤετͷଐੑͰ ϗετΛ۠ผ͠ϓϩηεΛڞ༗͢ΔͨΊ ϦΫΤετ୯ҐͰͷϦιʔε͕ඞཁ wෳࡶͳઃఆΛϓϩάϥϚϒϧʹهड़Մೳʹ͍ͨ͠
ఏҊ͢ΔϦιʔε੍ޚΞʔΩςΫνϟ w04ͷϓϩηεϦιʔεٕज़Λ8FCαʔόͷϦΫ Τετ୯ҐͰ׆༻੍͠ޚ wষͷػೳ֦ுࢧԉػߏNPE@NSVCZΛԠ༻ ϓϩάϥϚϒϧͰΦʔόʔϔουগͳ͍ࢧԉػߏͰ ϦΫΤετ୯ҐʹϦιʔεΛ੍ޚՄೳ
-JOVYಠࣗͷϦιʔε੍ޚDHSPVQ wϓϩηε୯ҐͰ$16ɾϝϞϦɾ*0Λ੍ޚ -JOVY,FSOFMҎ߱ͷػೳ ಛఆͷϓϩηείΞ$16·ͰׂͳͲ $16ΛׂΓͯͨϦιʔεάϧʔϓΛ࡞ άϧʔϓʹࢀՃ͍ͯ͠ΔϓϩηεͰϦιʔε
ϦΫΤετ୯ҐͰͷϦιʔε੍ޚ 8FCαʔό ϓϩηε ΫϥΠΞϯτ ϦΫΤετ Ϩεϙϯε ϨεϙϯεੜͷॲཧͷؒͷΈ ϓϩηεΛಛఆͷDHSPVQʹΞλον ʢ$16ͳͲʣ DHSPVQΞλον
DHSPVQσλον
NPE@NSVCZͱDHSPVQͷ࣮ "QBDIF1SPDFTT NPE@NSVCZ NSVCZ MJCNSVCZB NSVCZDHSPVQ MJCDHSPVQ -JOVYDHSPVQT •
֤ػೳ୯ମͰಈ࡞Մೳʢૄ݁߹ʣ • NPE@NSVCZ"QBDIFΛNSVCZͰ੍ޚ • NSVCZDHSPVQMJCDHSPVQΛNSVCZͰ੍ޚ • NSVCZ NSVCZDHSPVQ • 3VCZ$ίʔυͰϦιʔεΛ੍ޚՄೳ • ͜ͷϧʔϓ$16Ͱ • ͜ͷॻ͖ग़͠%*4,ॻࠐ.#TFDͰ
"QBDIFͱNPE@NSVCZʹΑΔ࣮֓ཁ
Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.filename == “/path/to/cpu.cgi” cpu =
Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end ݫີʹNTதNTͷ$16༻࣌ؒΛ RVPUBͱͯ͠εέδϡʔϧ͢Δઃఆ
Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.hostname == “example.com” cpu =
Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end
Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.user== “matsumotory” cpu = Cgroup::CPU.new
“cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end
Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.method== “POST” cpu = Cgroup::CPU.new
“cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end
Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.finfo.user == 500 cpu =
Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end
Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.finfo.group == 300 cpu =
Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end
Ϧιʔε੍ޚͷઃఆྫ r = Apache::Request.new if r.finfo.size > 3000 cpu =
Cgroup::CPU.new “cpu_group” # CPU 10 cpu.cfs_quota_us = 10000 cpu.create cpu.attach end
Ϧιʔε੍ޚͷઃఆྫ if resource.most_heavy_hosts.include? r.hostname # 1 100 1 c =
Cgroup::CPU.new "httpd-static-limited" c.cfs_quota_us = 100000 Apache::Resource.attach_cgroup c, "httpd-static-limited" elsif resource.heavy_hosts.include? r.hostname # CPU 25% 24 6 # httpd 100 ( ) c = Cgroup::CPU.new "httpd-limited" c.shares = 25 Apache::Resource.attach_cgroup c, "httpd-limited" else # CPU 75% 24 18 # httpd-limited 100 ( ) c = Cgroup::CPU.new "httpd" c.shares = 75 Apache::Resource.attach_cgroup c, "httpd" end
ਫ਼ͱΦʔόʔϔουͷධՁ wϦιʔε੍ޚಋೖʹΑΔΦʔόʔϔουධՁ wϦιʔε੍ޚͷਫ਼ධՁ
࣮ݧڥ
ΦʔόʔϔουͷධՁ w)FMMP8PSME͢Δ͚ͩͷ)5.-ϑΝΠϧ wϦιʔε੍ޚಋೖ੍͠ݶΛ͠ͳ͍߹ͷΦʔόʔϔου wಉ࣌ଓɾ૯ଓສϦΫΤετ ະಋೖ࣌ɿSFTQPOTFTFD ɹಋೖ࣌ɿSFTQPOTFTFD
Ϧιʔε੍ޚͷਫ਼ධՁ w$16༻͢Δ$(*ϦΫΤετ w$16ʹϦιʔε੍ޚ w$(*ͷ$16༻࣌ؒΛมߋͯ͠ਫ਼Λൺֱ wੑೳ੍ޚΛఆٛɿ wϨεϙϯε࣌ؒʢ੍ݶແ͠ʣϨεϙϯε࣌ؒʢ੍ݶ༗Γʣ wੑೳ੍ޚ͕ʹ͚ۙΕਖ਼੍͘͠ޚ͞Ε͍ͯΔ
ষͷ·ͱΊ wϦΫΤετ୯ҐͰίϯϐϡʔλϦιʔεΛ wϚϧνςφϯτํࣜͷΑ͏ʹϦΫΤετͰςφϯτΛಛ ఆ͠ॲཧ͢Δϓϩηεڞ༗͢ΔΞʔΩςΫνϟʹ༗༻ wߴूੵϚϧνςφϯτํࣜʹ͓͍ͯैདྷݚڀΑΓཻ ͷࡉ͔͍Ϧιʔε੍ݶΛద༻Ͱ͖Δ
ୈষ ·ͱΊ
·ͱΊ w8FCαʔόͷߴूੵϚϧνςφϯτํࣜʹؔ͢Δݚڀ ষͰηΩϡϦςΟͱӡ༻໘Λཱ྆ͨ͠ΞΫηε੍ޚͷݚڀ ষͰੑೳͱηΩϡϦςΟΛཱ྆ͨ͠ΞΫηε੍ޚͷݚڀ ষͰ8FCαʔόػೳ֦ுࢧԉػߏͷݚڀ ষͰ8FCαʔόͷϦιʔε੍ޚͷݚڀ
ߩݙ w8FCαʔόͷߴूੵϚϧνςφϯτํࣜͷجຊ֓೦ͱ՝ Λମܥతʹཧ͠ΞʔΩςΫνϟΛఏҊͯ͠ղܾ ηΩϡϦςΟɾੑೳɾϦιʔε੍ޚɾӡ༻ٕज़ͷ؍ wಛʹ8FCϗεςΟϯάαʔϏεΛରʹΞʔΩςΫνϟͷ ࣮Λߦͬͯ044ͱͯ͠ެ։͠αʔϏεөɾվળ -JOVYΛ׆༻֤ͨ͠छ8FCαʔϏεͷߴԽʹد༩
044ͱͯ͠ެ։ wୈষNPE@QSPDFTT@TFDVSJUZ wୈষNPE@NSVCZOHY@NSVCZͱ֤छNSVCZϞδϡʔϧ wୈষNSVCZDHSPVQ wੈքத͔Β֤छࣄྫΛ࿈བྷ͍͓ͯΓ·͢
ࠓޙͷల wςφϯτ୯ҐͰαʔόϓϩηεΛىಈͤͭͭ͞ߴूੵ ཱ྆͢ΔΞʔΩςΫνϟͷઃܭͱ࣮ wϦΫΤετॲཧ࣌ͷΈϓϩηε͕.PSUBMʹىಈ͢Δ w߃ৗੑͷ͋Δ8FCαʔϏεج൫ͷ࣮ݱ wϝʔϧͷΑ͏ͳͦͷଞͷϓϩτίϧʹԠ༻Մೳ
ຊจʹؚ·ΕΔൃදจݙ തֶ࢜Ґจ 1 দຊ ྄հ, WebαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟʹؔ͢Δݚڀ, 2017 ژେ ֶେֶӃใֶݚڀՊ ത࢜จֶҐ৹ࠪެௌձ
20175݄ژେֶത࢜(ใֶ)ֶҐऔಘ, 2017 .
ຊจʹؚ·ΕΔൃදจݙ จࢽจ 1 দຊ ྄հ, ܀ྛ ݈ଠ, Ԭ෦ णஉ, ϦΫΤετ୯ҐͰԾతʹϋʔυΣΞϦιʔεΛ͢
ΔWebαʔόͷϦιʔε੍ޚΞʔΩςΫνϟ, ใॲཧֶձจࢽ, Vol.59, No.3, pp.1016-1025, Mar 2018. 2 দຊ ྄հ, ܀ྛ ݈ଠ, Ԭ෦णஉ, WebαʔόͷߴूੵϚϧνςφϯτΞʔΩςΫνϟͱӡ༻ٕ ज़, ిࢠใ௨৴ֶձจࢽ, Vol.J101-B, No.1, pp.16-30, Jan 2018.
ຊจʹؚ·ΕΔൃදจݙ จࢽจ 3 দຊ ྄հ, Ԭ෦ णஉ, mod_mruby: εΫϦϓτݴޠͰߴ͔ͭলϝϞϦʹ֦ுՄೳͳWebαʔ όͷػೳ֦ுࢧԉػߏ,
ใॲཧֶձจࢽɼVol.55, No.11, pp.2451-2460, Nov 2014. 4 দຊ ྄հ, Ԭ෦णஉ,εϨου୯ҐͰݖݶΛߦ͏WebαʔόͷΞΫηε੍ޚΞʔΩςΫ νϟ,ిࢠใ௨৴ֶձจࢽ Vol.J96-B, No.10, pp.1122-1130, Oct 2013. 5 দຊ ྄հ, ݪক࢘, দԬً, େنڞ༗ܕWebόʔνϟϧϗεςΟϯάج൫ͷηΩϡϦςΟ ͱӡ༻ٕज़ͷվળ, ใॲཧֶձจࢽ, Vol.54, No.3, pp.1077-1086, Mar 2013.
ຊจʹؚ·ΕΔൃදจݙ ࠃࡍձٞൃදʢࠪಡ͖ʣ 1 Ryosuke Matsumoto, Yasuo Okabe, Access Control Architecture
Separating Privilege by a Thread on a Web Server, The 12th IEEE/IPSJ International Symposium on Applications and the Internet (SAINT2012), pp.178-183, July 2012.