Slide 1

Slide 1 text

Haconiwa mrubyʹΑΔॊೈ͔ͭಈతͳɺOSSͷLinuxίϯςφϥϯλΠϜ Presentation by Uchio Kondo

Slide 2

Slide 2 text

ൃදऀʹ͍ͭͯ • ۙ౻͏͓ͪ / GMOϖύϘٕज़ج൫νʔϜ ϓϦϯγύϧ • ग़਎͸౦ࡾՏɺݱࡏ෱Ԭࢢ಺ࡏॅ • ίϛϡχςΟ: Fukuoka.rb
 ·ͨɺRailsGirls Fukuoka #1 ΦʔΨφΠβʔ • RubyKaigi 2016 Speaker

Slide 3

Slide 3 text

ΞδΣϯμ 1. ιϑτ΢ΣΞͷ֓ཁ 2. औΓ૊ΈͷಈػͳͲ 3. ιϑτ΢ΣΞͷಛ௃ɾ༏Ґੑ 4. ࣮੷ͱࠓޙʹ͍ͭͯ 5. ࢀߟࢿྉ

Slide 4

Slide 4 text

ιϑτ΢ΣΞͷ֓ཁ

Slide 5

Slide 5 text

Haconiwaͱ͸ʁ • LinuxίϯςφͷϥϯλΠϜͰ͋Δ • Linuxίϯςφͱ͸...LinuxͷΧʔωϧͷ༷ʑͳػೳΛ༻͍ ͯಠཱͨ͠ҰछͷԾ૝؀ڥΛ࡞Δٕज़ • ϥϯλΠϜͱ͸...ͦͷԾ૝؀ڥΛ࡞੒͠ɺ্ཱͪ͛ɺϥΠ ϑαΠΫϧΛ؅ཧ͢Διϑτ΢ΣΞ

Slide 6

Slide 6 text

Haconiwa͸Ͳ͏͍͏ϥϯλΠϜ͔ • LinuxίϯςφϥϯλΠϜʹ͸ɺޙड़͢Δ௨Γઌߦ࣮૷͕ ͍͔ͭ͘ଘࡏ͢ΔʢLXC, Docker, rkt, ...ʣɻ • Haconiwa͸ɺLinuxίϯςφϥϯλΠϜͷதͰ΋ɺ Ruby(mruby)ͷεΫϦϓτʹΑͬͯConfiguration as Code Λ࣮ݱ͢Δ
 ʢॊೈͳઃఆͷهड़ɺϑοΫͷهड़ͳͲʣ

Slide 7

Slide 7 text

औΓ૊Έͷಈػ

Slide 8

Slide 8 text

ݩʑͷಈػ • ͍ΘΏΔSaaSαʔϏε(*)ͷ։ൃɾӡ༻ͷܦݧ্ɺ಺෦Ͱ ར༻͍ͯ͠ΔίϯςφϥϯλΠϜ࣮૷ʹෆ଍Λײ͡ɺࣗ෼ ͷඞཁͱ͢ΔػೳΛ࣮૷ͨ͠΋ͷΛ࡞ͬͨɻ • ϗεςΟϯάܥαʔϏεͷதͰ࢖͏ͷ͕ͦ΋ͦ΋ͷಈػ • RubyKaigi 2016ͷCFPʹԠื͠ɺ௨աͨ͜͠ͱ΋͖͔ͬ ͚ͷҰͭ (*) http://sqale.jp/

Slide 9

Slide 9 text

։ൃͷաఔͰͷؾ͖ͮ • Πϯλʔωοτ͕େ͍ʹීٴ͠ɺ΢ΣϒαΠτ΁ͷΞΫηεٸ ૿ͳͲʹର͢ΔॊೈͳαʔόϦιʔεͷίϯτϩʔϧ͕՝୊ͱ ͳ͍ͬͯΔɻ • KubernetesͳͲͷ஫໨౓΋͋Δ௨ΓɺίϯςφԾ૝Խٕज़ʹ͓ ͚Δٕज़ֵ৽ʹظ଴͕͋Δ • ͦ͏͍ͬͨഎܠΛ౿·͑ɺΑΓ൚༻తͳίϯςφϥϯλΠϜʹ ͢΂͘։ൃΛଓ͚͍ͯΔ

Slide 10

Slide 10 text

Rubyͷ࠾༻ಈػ • ։ൃͷ౰ॳ͔ΒɺʮॊೈͰϓϩάϥϚϒϧʯͳ͜ͱΛ૝ఆ • PaaS಺෦ͰͷϦιʔεׂΓ౰ͯɺΞΫηεٸ૿࣌ͷϦιʔ εͷߜΓࠐΈɺFastContainer(*)ͳͲ৽ΞʔΩςΫνϟ΁ ͷରԠ • ͦ͏͍ͬͨ໨తʹRuby͸ඇৗʹ޲͍͍ͯΔ (*) http://hb.matsumoto-r.jp/entry/2016/11/11/234915

Slide 11

Slide 11 text

RubyͷϝϦοτ ͦͷ1 • ಺෦DSLͱͷ૬ੑͷྑ͞
 ίϯςφهड़ݴޠ͸ɺઃఆͱϓϩάϥϜͷͪΐ͏Ͳதؒ • namespace/cgroup/capabilityͳͲͷࢦఆʹઃఆ • ίϯςφىಈ࣌ͷಉظ/ඇಈػͷϑοΫɺγάφϧϋϯυϥ
 ʹϓϩάϥϜ • Rubyͷจ๏Ͱ͋Ε͹ɺ಺෦DSLͱͯ͠౷Ұతʹهड़Մೳ

Slide 12

Slide 12 text

RubyͷϝϦοτ ͦͷ2 • mruby͸૊ΈࠐΈʹ޲͍ͨɺચ࿅͞ΕͨCͷAPIΛ࣮૷͍ͯ͠ Δɻͦͷ෭࢈෺ͱͯ͠ɺCݴޠΛܦ༝ͨ͠γεςϜίʔϧͷόΠ ϯσΟϯά͕ඇৗʹॻ͖΍͘͢ͳ͍ͬͯΔ • ·ͨɺΞΫηε͢ΔͨΊͷίʔυྔ΋Cͱͯ͠͸খ͘͞ࡁΉ • ࣮੷ͱͯ͠ɺ༷ʑͳmruby gemΛ࡞੒ࡁΈ:
 ɹcgroup, capability, linux namespace, seccomp...

Slide 13

Slide 13 text

ιϑτ΢ΣΞͷ ಛ௃ɾ༏Ґੑ

Slide 14

Slide 14 text

طଘ࣮૷ʹൺ΂ͨ༏Ґੑ - ॊೈੑ • ྫ͑͹Dockerͱൺ΂ͯ: • Docker͸Ծ૝؀ڥͱͯ͠ͷಠཱੑΛॏࢹͨ݁͠Ռɺີ݁߹ͷ ίϯςφͰ͋Δ • ҰํͰHaconiwa͸ɺඞཁͳίϯϙʔωϯτΛ૊Έ߹Θͤɺঢ় گʹԠͯ͡ແޮԽ͢Δ͜ͱ͑͞Ͱ͖·͢ɻྫ͑͹ىಈ࣌ͷΦʔ όϔουͷ࡟ݮͳͲɺΑΓଟ͘ͷ༻్ʹίϯςφΛར༻Ͱ͖Δ

Slide 15

Slide 15 text

طଘ࣮૷ʹൺ΂ͨ༏Ґੑ - ಈతͳੑ࣭ • ྫ͑͹LXCͱൺ΂ͯ: • LXC΋APIΛ࣋ͪɺόΠϯσΟϯάΛ࡞੒Ͱ͖Δɻ͔ͦ͠͠ͷAPI ͸ىಈɺఀࢭͳͲɺݶఆతͳૢ࡞ͷΈ • ҰํͰHaconiwa͸ɺίϯςφʹؔ͢Δઃఆ஋͸Ұ௨Γ͢΂ͯ DSLͰઃఆՄೳɻͳ͓͔ͭɺىಈͷ༷ʑͳλΠϛϯάͰ͋ͬͨ Γɺ͋Δ͍͸γάφϧϋϯυϥ΍ɺىಈޙͷඇಉظతϑοΫॲཧ ΋αϙʔτ͢ΔͨΊɺΑΓϓϩάϥϜͳͲͰͷ੍ޚ͕༰қͰ͋Δ

Slide 16

Slide 16 text

طଘ࣮૷ʹൺ΂ͨ༏Ґੑ - อकੑ • ྫ͑͹rkt(CoreOS)/Kubernetesͱൺ΂ͯ: • rkt͸ଟ͘ͷઃఆΛαϙʔτ͢Δ͕ɺίϚϯυϥΠϯΦϓγϣ ϯͰͷड͚ೖΕͱͳΔ
 Kubernetes͸ΦʔέετϨʔγϣϯπʔϧ͕ͩɺHaconiwaͷ ໨ࢦ͢ํ޲ੑʹ͍ۙ΋ͷ͕͋Δɻ
 ҰํͰɺઃఆ͸ڊେͳyamlϑΝΠϧͷΈ

Slide 17

Slide 17 text

طଘ࣮૷ʹൺ΂ͨ༏Ґੑ - อकੑ • ʢঝલʣॊೈͰෳࡶͳίϯςφઃఆɺ͋Δ͍͸ΦʔέετϨʔ γϣϯ૚ͱͷ࿈ܞΛߟ͑ΔͱɺͦΕΒͷઃఆ΍ಈ࡞ΛRuby ͷΑ͏ͳݴޠͰهड़ͨ͘͠ͳΔ͜ͱ͕ߟ͑ΒΕΔɻ • HaconiwaͷΑ͏ʹઃܭࢥ૝ͷஈ֊ͰDSLʹΑΔ੍ޚΛα ϙʔτͨ͠ίϯςφ͸ɺͦ͏͍ͬͨཁ๬Λड͚ࢭΊΒΕΔɻ
 RubyΛ࠾༻͍ͯ͠ΔͷͰֶश͠΍͢͞/Մಡੑ΋ߴ͍

Slide 18

Slide 18 text

ֵ৽ੑʹ͍ͭͯ • ઌड़ͨ͠Α͏ʹɺHaconiwa͸DSLΛࠜຊͱͨ͠ॊೈੑɺ ಈతੑΛ࣮ݱ͍ͯ͠Δ • ͦͷ݁ՌɺʮίϯςφʯΛݻఆతͳԾ૝؀ڥͰ͸ͳ͘ɺ
 ϓϩάϥϜͰ੍ޚ͕ՄೳͳεϨουతͳ΋ͷ΁ͱൃలͤ͞ ͏Δɺͱߟ͑Δ

Slide 19

Slide 19 text

HaconiwaͷγεςϜίʔϧతଆ໘ • ίϯςφ࣮ߦج൫ͱͯ͠ɺOSͷू߹ମΛҰͭͷʮOSʯɺ ͋Δ͍͸ϦιʔεͷϓʔϧͱΈͳ͢ͱɺίϯςφͷάϧʔ ϓ͕ϓϩηεతɺίϯςφҰͭҰͭ͸εϨουతͳɺ͋Δ छ࢖͍ࣺͯͷαϒϧʔνϯͱ؃၏ͤΔ • ͦ͏ߟ͑ΔͱɺͦͷίϯςφΛࣗ༝ࣗࡏʹ࡞੒ɺΞΫηε Ͱ͖ΔHaconiwaͷ಺෦API͸ɺγεςϜίʔϧతͰ͋Δ

Slide 20

Slide 20 text

• චऀൃදʮHaconiwaͷத਎ͱઃܭࢥ૝ʯp. 36

Slide 21

Slide 21 text

“Haconiwa API”ͷҰ࣮૷͕Haconiwa • c.f. specinfra/Serverspec • ʮHaconiwaͷ಺෦APIʯΛΑΓ൚༻తʹൈ͖ग़͢ͱɺ Haconiwaࣗ਎ͷଞʹɺίϯςφΛར༻༷ͨ͠ʑͳϛυϧ ΢ΣΞΛ࡞Δ͜ͱ͕Ͱ͖ΔͷͰ͸ͳ͍͔

Slide 22

Slide 22 text

࣮੷ͱࠓޙͷల๬

Slide 23

Slide 23 text

ٕज़ൃදଞɺ࣮੷ʹ͍ͭͯ • RubyKaigi 2016ɺ໊ݹ԰Rubyձٞ03Λ࢝ΊɺRubyίϛϡ χςΟத৺ʹHaconiwaʹؔ͢ΔτʔΫΛॏͶ͍ͯΔஈ֊ • ଞɺ஫໨౓ͱͯ͠͸ɺGitHubͷϓϩδΣΫτͷ
 ελʔ਺͕97 (2017೥2݄22೔ݱࡏ)

Slide 24

Slide 24 text

ࠓޙʹ͍ͭͯ 1 • ઌड़ͨ͠ίϯςφ࣮ߦج൫ͱͯ͠ͷOSΫϥελͷൃ૝Λ͞Βʹਐ Ίͨɺদຊ྄հࢯͷFastContainerߏ૝(*)Λ౿·͑ɺॴଐձࣾͰ
 ϗεςΟϯάܥWebαʔϏεͷ։ൃΛਐΊ͍ͯΔஈ֊Ͱ͋Δ • FastContainerͷΑ͏ͳੜଘظؒͷίϯτϩʔϧ͞Εͨίϯςφ ͸Haconiwaͱ૬ੑ͕͍͍ • ྫ͑͹ɺʮαʔόϨεΞʔΩςΫνϟʯͷ࣮ݱʹ޲͍͍ͯΔ

Slide 25

Slide 25 text

• ʮFactContainerΞʔΩςΫνϟ֓࿦ʯΑΓ

Slide 26

Slide 26 text

ࠓޙʹ͍ͭͯ 2 • ίϯςφϥϯλΠϜͱͯ͠ͷ׬੒౓ͷ޲্Λ໨ࢦ͢ • ۩ମతʹ͸ɺseccomp/apparmorͱ͍ͬͨηΩϡϦςΟؔ ܎ͷAPIͷαϙʔτ΍ɺCRIUͱ͍ͬͨίϯςφىಈͷߴ଎ Խʹ໾ཱٕͭज़ͱͷ࿈ܞΛߟ͍͑ͯΔ • ಉ࣌ʹυΩϡϝϯτͷॆ࣮΋......͍ͨ͠

Slide 27

Slide 27 text

૯ׅ

Slide 28

Slide 28 text

Haconiwaͷ·ͱΊ • Haconiwa͸ɺྨࣅͷ࣮૷ͱൺ΂ͯඇৗʹಈతͰॊೈͳίϯςφΛ࡞੒ Ͱ͖ΔϥϯλΠϜͰ͋Γɺͦͷ࣮ݱͷͨΊʹRuby/mrubyͷੑ࣭Λ׆༻ ͍ͯ͠Δɻ • Haconiwa͸ɺίϯςφ࣮૷ج൫ͷOSͷΫϥελΛͻͱ·ͱ·ΓͷOS ͱΈͳ͢ͱɺҰछͷγεςϜίʔϧͱߟ͑Δ͜ͱ΋Ͱ͖Δ • ্ड़ͨ͠Α͏ͳHaconiwaͷಛ௃Λ׆༻͠ɺ࣍ੈ୅తͳϗεςΟϯάܥ ͷαʔϏεΛߟҊɾ։ൃ͍ͯ͠Δ

Slide 29

Slide 29 text

ࢀߟࢿྉ

Slide 30

Slide 30 text

ࢿྉҰཡ 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