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
Haconiwa - mrubyによるLinuxコンテナランタイム / haconiwa-fu...
Search
KONDO Uchio
March 01, 2017
Technology
3
7.3k
Haconiwa - mrubyによるLinuxコンテナランタイム / haconiwa-fukuoka-ruby-award-presentation-2017
福岡Ruby大賞本審査資料 @ 2017/03/01
KONDO Uchio
March 01, 2017
Tweet
Share
More Decks by KONDO Uchio
See All by KONDO Uchio
大規模レガシーテストを 倒すための CI基盤の作り方 / #CICD2023
udzura
5
2.3k
Ruby x BPF in Action / RubyKaigi 2022
udzura
0
220
Narrative of Ruby & Rust
udzura
0
190
開発者生産性指標の可視化 / pepabo-four-keys
udzura
3
1.6k
Talk of RBS
udzura
0
410
Re: みなさん最近どうですか? / FGN tech meetup in 2021
udzura
0
740
Dockerとやわらかい仮想化 - ProSec-IT/SECKUN 2021 edition -
udzura
2
700
Device access filtering in cgroup v2
udzura
1
820
"Story of Rucy" on RubyKaigi takeout 2021
udzura
0
770
Other Decks in Technology
See All in Technology
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
190
EMConf JP 2025 懇親会LT / EMConf JP 2025 social gathering
sugamasao
2
180
Two Blades, One Journey: Engineering While Managing
ohbarye
4
1.4k
AWSアカウントのセキュリティ自動化、どこまで進める? 最適な設計と実践ポイント
yuobayashi
7
470
プロダクトエンジニア 360°フィードバックを実施した話
hacomono
PRO
0
140
EDRの検知の仕組みと検知回避について
chayakonanaika
11
4.5k
Iceberg Meetup Japan #1 : Iceberg and Databricks
databricksjapan
0
310
システム・ML活用を広げるdbtのデータモデリング / Expanding System & ML Use with dbt Modeling
i125
1
320
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
18k
Reading Code Is Harder Than Writing It
trishagee
2
120
わたしのOSS活動
kazupon
2
340
生成 AI プロダクトを育てる技術 〜データ品質向上による継続的な価値創出の実践〜
icoxfog417
PRO
5
1.9k
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
GraphQLとの向き合い方2022年版
quramy
44
14k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Facilitating Awesome Meetings
lara
52
6.2k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Thoughts on Productivity
jonyablonski
69
4.5k
Speed Design
sergeychernyshev
27
810
Code Review Best Practice
trishagee
67
18k
A better future with KSS
kneath
238
17k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Transcript
Haconiwa mrubyʹΑΔॊೈ͔ͭಈతͳɺOSSͷLinuxίϯςφϥϯλΠϜ Presentation by Uchio Kondo
ൃදऀʹ͍ͭͯ • ۙ౻͏͓ͪ / GMOϖύϘٕज़ج൫νʔϜ ϓϦϯγύϧ • ग़౦ࡾՏɺݱࡏԬࢢࡏॅ • ίϛϡχςΟ:
Fukuoka.rb ·ͨɺRailsGirls Fukuoka #1 ΦʔΨφΠβʔ • RubyKaigi 2016 Speaker
ΞδΣϯμ 1. ιϑτΣΞͷ֓ཁ 2. औΓΈͷಈػͳͲ 3. ιϑτΣΞͷಛɾ༏Ґੑ 4. ࣮ͱࠓޙʹ͍ͭͯ 5.
ࢀߟࢿྉ
ιϑτΣΞͷ֓ཁ
Haconiwaͱʁ • LinuxίϯςφͷϥϯλΠϜͰ͋Δ • Linuxίϯςφͱ...LinuxͷΧʔωϧͷ༷ʑͳػೳΛ༻͍ ͯಠཱͨ͠ҰछͷԾڥΛ࡞Δٕज़ • ϥϯλΠϜͱ...ͦͷԾڥΛ࡞͠ɺ্ཱͪ͛ɺϥΠ ϑαΠΫϧΛཧ͢ΔιϑτΣΞ
HaconiwaͲ͏͍͏ϥϯλΠϜ͔ • LinuxίϯςφϥϯλΠϜʹɺޙड़͢Δ௨Γઌߦ࣮͕ ͍͔ͭ͘ଘࡏ͢ΔʢLXC, Docker, rkt, ...ʣɻ • HaconiwaɺLinuxίϯςφϥϯλΠϜͷதͰɺ Ruby(mruby)ͷεΫϦϓτʹΑͬͯConfiguration
as Code Λ࣮ݱ͢Δ ʢॊೈͳઃఆͷهड़ɺϑοΫͷهड़ͳͲʣ
औΓΈͷಈػ
ݩʑͷಈػ • ͍ΘΏΔSaaSαʔϏε(*)ͷ։ൃɾӡ༻ͷܦݧ্ɺ෦Ͱ ར༻͍ͯ͠ΔίϯςφϥϯλΠϜ࣮ʹෆΛײ͡ɺࣗ ͷඞཁͱ͢ΔػೳΛ࣮ͨ͠ͷΛ࡞ͬͨɻ • ϗεςΟϯάܥαʔϏεͷதͰ͏ͷ͕ͦͦͷಈػ • RubyKaigi 2016ͷCFPʹԠื͠ɺ௨աͨ͜͠ͱ͖͔ͬ
͚ͷҰͭ (*) http://sqale.jp/
։ൃͷաఔͰͷؾ͖ͮ • Πϯλʔωοτ͕େ͍ʹීٴ͠ɺΣϒαΠτͷΞΫηεٸ ૿ͳͲʹର͢ΔॊೈͳαʔόϦιʔεͷίϯτϩʔϧ͕՝ͱ ͳ͍ͬͯΔɻ • KubernetesͳͲͷ͋Δ௨ΓɺίϯςφԾԽٕज़ʹ͓ ͚Δٕज़ֵ৽ʹظ͕͋Δ • ͦ͏͍ͬͨഎܠΛ౿·͑ɺΑΓ൚༻తͳίϯςφϥϯλΠϜʹ
͘͢։ൃΛଓ͚͍ͯΔ
Rubyͷ࠾༻ಈػ • ։ൃͷॳ͔ΒɺʮॊೈͰϓϩάϥϚϒϧʯͳ͜ͱΛఆ • PaaS෦ͰͷϦιʔεׂΓͯɺΞΫηεٸ૿࣌ͷϦιʔ εͷߜΓࠐΈɺFastContainer(*)ͳͲ৽ΞʔΩςΫνϟ ͷରԠ • ͦ͏͍ͬͨతʹRubyඇৗʹ͍͍ͯΔ (*)
http://hb.matsumoto-r.jp/entry/2016/11/11/234915
RubyͷϝϦοτ ͦͷ1 • ෦DSLͱͷ૬ੑͷྑ͞ ίϯςφهड़ݴޠɺઃఆͱϓϩάϥϜͷͪΐ͏Ͳதؒ • namespace/cgroup/capabilityͳͲͷࢦఆʹઃఆ • ίϯςφىಈ࣌ͷಉظ/ඇಈػͷϑοΫɺγάφϧϋϯυϥ ʹϓϩάϥϜ
• Rubyͷจ๏Ͱ͋Εɺ෦DSLͱͯ͠౷Ұతʹهड़Մೳ
RubyͷϝϦοτ ͦͷ2 • mrubyΈࠐΈʹ͍ͨɺચ࿅͞ΕͨCͷAPIΛ࣮͍ͯ͠ Δɻͦͷ෭࢈ͱͯ͠ɺCݴޠΛܦ༝ͨ͠γεςϜίʔϧͷόΠ ϯσΟϯά͕ඇৗʹॻ͖͘͢ͳ͍ͬͯΔ • ·ͨɺΞΫηε͢ΔͨΊͷίʔυྔCͱͯ͠খ͘͞ࡁΉ • ࣮ͱͯ͠ɺ༷ʑͳmruby
gemΛ࡞ࡁΈ: ɹcgroup, capability, linux namespace, seccomp...
ιϑτΣΞͷ ಛɾ༏Ґੑ
طଘ࣮ʹൺͨ༏Ґੑ - ॊೈੑ • ྫ͑Dockerͱൺͯ: • DockerԾڥͱͯ͠ͷಠཱੑΛॏࢹͨ݁͠Ռɺີ݁߹ͷ ίϯςφͰ͋Δ • ҰํͰHaconiwaɺඞཁͳίϯϙʔωϯτΛΈ߹Θͤɺঢ়
گʹԠͯ͡ແޮԽ͢Δ͜ͱ͑͞Ͱ͖·͢ɻྫ͑ىಈ࣌ͷΦʔ όϔουͷݮͳͲɺΑΓଟ͘ͷ༻్ʹίϯςφΛར༻Ͱ͖Δ
طଘ࣮ʹൺͨ༏Ґੑ - ಈతͳੑ࣭ • ྫ͑LXCͱൺͯ: • LXCAPIΛ࣋ͪɺόΠϯσΟϯάΛ࡞Ͱ͖Δɻ͔ͦ͠͠ͷAPI ىಈɺఀࢭͳͲɺݶఆతͳૢ࡞ͷΈ • ҰํͰHaconiwaɺίϯςφʹؔ͢ΔઃఆҰ௨Γͯ͢
DSLͰઃఆՄೳɻͳ͓͔ͭɺىಈͷ༷ʑͳλΠϛϯάͰ͋ͬͨ Γɺ͋Δ͍γάφϧϋϯυϥɺىಈޙͷඇಉظతϑοΫॲཧ αϙʔτ͢ΔͨΊɺΑΓϓϩάϥϜͳͲͰͷ੍ޚ͕༰қͰ͋Δ
طଘ࣮ʹൺͨ༏Ґੑ - อकੑ • ྫ͑rkt(CoreOS)/Kubernetesͱൺͯ: • rktଟ͘ͷઃఆΛαϙʔτ͢Δ͕ɺίϚϯυϥΠϯΦϓγϣ ϯͰͷड͚ೖΕͱͳΔ KubernetesΦʔέετϨʔγϣϯπʔϧ͕ͩɺHaconiwaͷ ࢦ͢ํੑʹ͍ۙͷ͕͋Δɻ
ҰํͰɺઃఆڊେͳyamlϑΝΠϧͷΈ
طଘ࣮ʹൺͨ༏Ґੑ - อकੑ • ʢঝલʣॊೈͰෳࡶͳίϯςφઃఆɺ͋Δ͍ΦʔέετϨʔ γϣϯͱͷ࿈ܞΛߟ͑ΔͱɺͦΕΒͷઃఆಈ࡞ΛRuby ͷΑ͏ͳݴޠͰهड़ͨ͘͠ͳΔ͜ͱ͕ߟ͑ΒΕΔɻ • HaconiwaͷΑ͏ʹઃܭࢥͷஈ֊ͰDSLʹΑΔ੍ޚΛα ϙʔτͨ͠ίϯςφɺͦ͏͍ͬͨཁΛड͚ࢭΊΒΕΔɻ
RubyΛ࠾༻͍ͯ͠ΔͷͰֶश͢͠͞/Մಡੑߴ͍
ֵ৽ੑʹ͍ͭͯ • ઌड़ͨ͠Α͏ʹɺHaconiwaDSLΛࠜຊͱͨ͠ॊೈੑɺ ಈతੑΛ࣮ݱ͍ͯ͠Δ • ͦͷ݁ՌɺʮίϯςφʯΛݻఆతͳԾڥͰͳ͘ɺ ϓϩάϥϜͰ੍ޚ͕ՄೳͳεϨουతͳͷͱൃలͤ͞ ͏Δɺͱߟ͑Δ
HaconiwaͷγεςϜίʔϧతଆ໘ • ίϯςφ࣮ߦج൫ͱͯ͠ɺOSͷू߹ମΛҰͭͷʮOSʯɺ ͋Δ͍ϦιʔεͷϓʔϧͱΈͳ͢ͱɺίϯςφͷάϧʔ ϓ͕ϓϩηεతɺίϯςφҰͭҰͭεϨουతͳɺ͋Δ छ͍ࣺͯͷαϒϧʔνϯͱ၏ͤΔ • ͦ͏ߟ͑ΔͱɺͦͷίϯςφΛࣗ༝ࣗࡏʹ࡞ɺΞΫηε Ͱ͖ΔHaconiwaͷ෦APIɺγεςϜίʔϧతͰ͋Δ
• චऀൃදʮHaconiwaͷதͱઃܭࢥʯp. 36
“Haconiwa API”ͷҰ࣮͕Haconiwa • c.f. specinfra/Serverspec • ʮHaconiwaͷ෦APIʯΛΑΓ൚༻తʹൈ͖ग़͢ͱɺ HaconiwaࣗͷଞʹɺίϯςφΛར༻༷ͨ͠ʑͳϛυϧ ΣΞΛ࡞Δ͜ͱ͕Ͱ͖ΔͷͰͳ͍͔
࣮ͱࠓޙͷల
ٕज़ൃදଞɺ࣮ʹ͍ͭͯ • RubyKaigi 2016ɺ໊ݹRubyձٞ03Λ࢝ΊɺRubyίϛϡ χςΟத৺ʹHaconiwaʹؔ͢ΔτʔΫΛॏͶ͍ͯΔஈ֊ • ଞɺͱͯ͠ɺGitHubͷϓϩδΣΫτͷ ελʔ͕97 (20172݄22ݱࡏ)
ࠓޙʹ͍ͭͯ 1 • ઌड़ͨ͠ίϯςφ࣮ߦج൫ͱͯ͠ͷOSΫϥελͷൃΛ͞Βʹਐ Ίͨɺদຊ྄հࢯͷFastContainerߏ(*)Λ౿·͑ɺॴଐձࣾͰ ϗεςΟϯάܥWebαʔϏεͷ։ൃΛਐΊ͍ͯΔஈ֊Ͱ͋Δ • FastContainerͷΑ͏ͳੜଘظؒͷίϯτϩʔϧ͞Εͨίϯςφ Haconiwaͱ૬ੑ͕͍͍ •
ྫ͑ɺʮαʔόϨεΞʔΩςΫνϟʯͷ࣮ݱʹ͍͍ͯΔ
• ʮFactContainerΞʔΩςΫνϟ֓ʯΑΓ
ࠓޙʹ͍ͭͯ 2 • ίϯςφϥϯλΠϜͱͯ͠ͷͷ্Λࢦ͢ • ۩ମతʹɺseccomp/apparmorͱ͍ͬͨηΩϡϦςΟؔ ͷAPIͷαϙʔτɺCRIUͱ͍ͬͨίϯςφىಈͷߴ Խʹཱٕͭज़ͱͷ࿈ܞΛߟ͍͑ͯΔ • ಉ࣌ʹυΩϡϝϯτͷॆ࣮......͍ͨ͠
૯ׅ
Haconiwaͷ·ͱΊ • Haconiwaɺྨࣅͷ࣮ͱൺͯඇৗʹಈతͰॊೈͳίϯςφΛ࡞ Ͱ͖ΔϥϯλΠϜͰ͋Γɺͦͷ࣮ݱͷͨΊʹRuby/mrubyͷੑ࣭Λ׆༻ ͍ͯ͠Δɻ • Haconiwaɺίϯςφ࣮ج൫ͷOSͷΫϥελΛͻͱ·ͱ·ΓͷOS ͱΈͳ͢ͱɺҰछͷγεςϜίʔϧͱߟ͑Δ͜ͱͰ͖Δ • ্ड़ͨ͠Α͏ͳHaconiwaͷಛΛ׆༻͠ɺ࣍ੈతͳϗεςΟϯάܥ
ͷαʔϏεΛߟҊɾ։ൃ͍ͯ͠Δ
ࢀߟࢿྉ
ࢿྉҰཡ 1. Haconiwaʹؔ͢Δࢿྉ The introduction of mRuby on Container https://speakerdeck.com/udzura/mruby-on-container
Haconiwaͷ͜Ε·Ͱͱ͜Ε͔Β https://speakerdeck.com/udzura/haconiwa-on-the-pavement Haconiwa ͷதͱઃܭࢥ https://speakerdeck.com/udzura/the-haconiwa-internals 2. FastContainer/DAOSߏʹ͍ͭͯ FastContainerΞʔΩςΫνϟ֓ https://speakerdeck.com/matsumoto_r/reactive-stateless-and-mortal- architecture-for-web-applications ະདྷͷαʔόج൫ͷHaconiwa/mrubyͷؔΘΓ https://speakerdeck.com/udzura/haconiwa-and-future-os 3. Serverspecͱspecinfraʹ͍ͭͯ ࠷ॳͷݴٴ https://github.com/mizzy/serverspec-thesis/pull/13#issuecomment-32700180 4. αʔόϨεΞʔΩςΫνϟʹ͍ͭͯ http://www.publickey1.jp/blog/16/qcon_tokyo_2016.html