$30 off During Our Annual Pro Sale. View Details »

超個体型データセンターOSを目指した選択性を持つコンテナ実行基盤

 超個体型データセンターOSを目指した選択性を持つコンテナ実行基盤

超個体型データセンターOSを目指した選択性を持つコンテナ実行基盤

第5回Web System Architecture研究会(#wsa研)@福岡

2019/09/28

さくらインターネット株式会社
さくらインターネット研究所
上級研究員
まつもとりー / @matsumotory / 松本亮介

MATSUMOTO Ryosuke

September 28, 2019
Tweet

More Decks by MATSUMOTO Ryosuke

Other Decks in Research

Transcript

  1. 3 େن໛σʔληϯλʔͷूதͱٕज़എܠͷมԽ • σʔληϯλʔͷେن໛Խͱूத • ίϯϐϡʔλϦιʔεͱίετͷޮ཰Խ • Ϋϥ΢υར༻͕͜͜਺೥Ͱਵ෼ͱଅਐ͞Ε͖ͯͨ • ٕज़എܠͷมԽʹ൐ͬͯOSS΍αʔϏε΋ٸ଎ʹมԽ

    • ιϑτ΢ΣΞ΍ϕϯμʔʹڧ͘ґଘ͠ͳ͍มԽʹڧ͍ઃܭ͕ٸ຿ • Ϋϥ΢υωΠςΟϒɾϚϧνΫϥ΢υɾϚΠΫϩαʔϏεԽ • εϚʔτγςΟɾεϚʔτϞϏϦςΟ • Edge/FogίϯϐϡʔςΟϯάɾྔࢠίϯϐϡʔςΟϯά
  2. 4 σʔληϯλʔͷूத͔Β෼ࢄ • Ϋϥ΢υΛલఏʹϞϊϦγοΫͳαʔϏεઃܭ͔ΒϚΠΫϩαʔϏεԽ΁ • αʔϏεͷ֤ػೳΛখ͞ͳαʔϏεͱ࣮ͯ͠૷͠gRPC౳Ͱ࿈ܞ • ೝূ΍ਪનɺͦͷଞ֤छػೳΛϚΠΫϩαʔϏεԽͯ͠૊Έ߹ΘͤΔ • ϚΠΫϩαʔϏεؒͰͷϨΠςϯγʔͷ௿ݮ͕ٻΊΒΕΔ

    • େن໛σʔληϯλʔͷڑ཭ʢ౦ژͱੴङؒʣͰ΋ٞ࿦͕ੜ࢝͡ΊΔ • αʔό͚ͩͰͳ͘ηϯαʔ΍σόΠεͷߴ౓Խɾଟ਺Խ • Edge/FogίϯϐϡʔςΟϯάɾεϚʔτγςΟɾεϚʔτϞϏϦςΟ • ϦΞϧλΠϜੑ΍ۙ๣ͰͷίϯϐϡʔλϦιʔεఏڙྔ૿Ճͷཁٻ
  3. 9 ݱࡏͷΫϥ΢υ͚ͩͰ໰୊͕ղܾͰ͖ΔΘ͚Ͱ͸ͳ͍ • ΑΓҰ૚ந৅ԽͷਐΜͩΠϯλʔωοτͷ༷૬ͷมԽ • Ϋϥ΢υωΠςΟϒʹΑͬͯ͞ΒͳΔσʔληϯλʔͷڊେԽ • தԝूݖతͳίϯϐϡʔςΟϯάͰ͸೉͍͠έʔε • ϨΠςϯγ͕େ͖ͯ͘൑அ͕ؒʹ߹Θͳ͍ϦΞϧλΠϜ͕ཁٻ͞ΕΔέʔε

    • Edge/FogίϯϐϡʔςΟϯάɾεϚʔτγςΟɾεϚʔτϞϏϦςΟ • ࠓޙΫϥ΢υͷϚγϯύϫʔΛͲͷΑ͏ʹ׆༻Ͱ͖ΔੈքΛ໨ࢦ͢΂͖͔ʁ • ͘͞ΒΠϯλʔωοτݚڀॴͷίϯηϓτͱϏδϣϯΛ࠶ఆٛ
  4. 12 ͦ΋ͦ΋௒ݸମͱ͸ • ӳޠͰ͸superorganism • ࣾձੑࠛ஬ͷࣾձूஂΛҙຯ͢Δ͜ͱ͕ଟ͍ • ࣾձֶ΍ੜ෺ֶɺܦࡁֶɺαΠόωςΟοΫεͷ෼໺ͳͲͰٞ࿦ • ୯ػೳ͔ͭݸผͷػೳΛ࣋ͭݸମ͕૯ମͱͯ͠ݸମҎ্ͷৼΔ෣͍Λ͢Δ

    • ଟ਺ͷҟछͷݸମ͕ಠࣗʹಈ͕͘૯ମͱͯ͠͸ҰͭͷݸମͷΑ͏ʹৼΔ෣͏ • ಉछͰߏ੒͞ΕΔ৔߹͸ݸମ܈΍ίϩχʔͳͲͱݺͿ৔߹΋ • ͍͔ͭ͘εϚʔτγςΟͷจ຺Ͱ࿦จ΍دߘ͕͋Δ [1][2] [1] Franco Zambonelli, Toward Sociotechnical Urban Superorganisms, IEEE Computer Magazine, pp. 76-78, vol. 45, 2012. [2] Nicola Bicocchi, Alket Cecaj, Damiano Fontana, Marco Mamei, Andrea Sassi, Franco Zambonelli, Collective Awareness for Human-ICT Collaboration in Smart Cities, IEEE WETICE 2013, Volume: 1, Pages: 3-8, 2013.
  5. 13 ίϯηϓτɿ௒ݸମܕσʔληϯλʔ 1. ݱࡏ͸σʔληϯλʔʹڊେͳίϯϐϡʔςΟϯάϦιʔε͕ଘࡏ͍ͯ͠·͕͢ɺࠓޙ͸Ϩ ΠςϯγʗηΩϡϦςΟʗίετ౳ͷཁ͔݅Βɺ͋ΒΏΔ৔ॴ΍ࣾձɺ૊৫ʹίϯϐϡʔ ςΟϯάϦιʔε༹͕͚ࠐΜͰ͍͘͜ͱʹͳΓ·͢ɻ 2. ͦΕΒ෼ࢄͨ͠ίϯϐϡʔςΟϯάϦιʔε͸ɺ୯ಠͰίϯϐϡʔςΟϯάύϫʔΛఏڙ͢ Δʹཹ·Βͣɺͦͷ৔ॴ΍ࣾձͷཁٻʹԠͯ͡ɺࣗ཯తʹɺ෼ࢄ͋Δ͍͸༗ػతʹ݁߹͠ɺ ݱ৔ɾΫϥ΢υͦΕͧΕ͕ॎԣʹ݁ͼ͍ͭͨϋΠϒϦουߏ଄Λ࠾ΔΑ͏ʹػೳ͠·͢ɻ

    3. ͜ͷΑ͏ͳγεςϜʹΑΓ࣮ݱ͞ΕΔ΋ͷ͸ɺਓʑͷ਎ۙʹଘࡏ͠ɺϦΞϧλΠϜ͔ͭΠϯ ςϦδΣϯεʹϢʔβΛࢧ͑ͳ͕Βɺ͔͠͠ಉ࣌ʹόοΫΤϯυଆ͕༗ػతʹ݁߹͢Δ͜ͱ ʹΑΓɺ͔ͭͯͳ͍ϚγϯύϫʔͱϦιʔεྔΛಈһ͢Δ͜ͱͰݱ৔࠷ద͔ͭશମ࠷దΛ΋ ࣮ݱ͢ΔSuperorganizm WorldͰ͢ɻ ฐॴ௕ͷ࿯๺ʹΑΔղઆIUUQTSFTFBSDITBLVSBBEKQDPODFQUWJTJPO
  6. 14 ίϯηϓτͷ΋͏Ұͭͷ໾ׂɿٞ࿦Λ͓͜͢ 1. ݱࡏ͸σʔληϯλʔʹڊେͳίϯϐϡʔςΟϯάϦιʔε͕ଘࡏ͍ͯ͠·͕͢ɺࠓޙ͸Ϩ ΠςϯγʗηΩϡϦςΟʗίετ౳ͷཁ͔݅Βɺ͋ΒΏΔ৔ॴ΍ࣾձɺ૊৫ʹίϯϐϡʔ ςΟϯάϦιʔε༹͕͚ࠐΜͰ͍͘͜ͱʹͳΓ·͢ɻ 2. ͦΕΒ෼ࢄͨ͠ίϯϐϡʔςΟϯάϦιʔε͸ɺ୯ಠͰίϯϐϡʔςΟϯάύϫʔΛఏڙ͢ Δʹཹ·Βͣɺͦͷ৔ॴ΍ࣾձͷཁٻʹԠͯ͡ɺࣗ཯తʹɺ෼ࢄ͋Δ͍͸༗ػతʹ݁߹͠ɺ ݱ৔ɾΫϥ΢υͦΕͧΕ͕ॎԣʹ݁ͼ͍ͭͨϋΠϒϦουߏ଄Λ࠾ΔΑ͏ʹػೳ͠·͢ɻ

    3. ͜ͷΑ͏ͳγεςϜʹΑΓ࣮ݱ͞ΕΔ΋ͷ͸ɺਓʑͷ਎ۙʹଘࡏ͠ɺϦΞϧλΠϜ͔ͭΠϯ ςϦδΣϯεʹϢʔβΛࢧ͑ͳ͕Βɺ͔͠͠ಉ࣌ʹόοΫΤϯυଆ͕༗ػతʹ݁߹͢Δ͜ͱ ʹΑΓɺ͔ͭͯͳ͍ϚγϯύϫʔͱϦιʔεྔΛಈһ͢Δ͜ͱͰݱ৔࠷ద͔ͭશମ࠷దΛ΋ ࣮ݱ͢ΔSuperorganizm WorldͰ͢ɻ ༗ػతͱ͸ʁॎԣͱ͸ʁ࠷దͱ͸ʁ → ੝Μʹٞ࿦Λ͓͜͢΂͋͑ͯ͘ᐆດͳϫʔυΛબ୒ ฐॴ௕ͷ࿯๺ʹΑΔղઆIUUQTSFTFBSDITBLVSBBEKQDPODFQUWJTJPO
  7. 16 ࠓίϯςφͷ໘ന͍ͱ͜Ζ • Ϋϥ΢υɾϗεςΟϯάۀքʹ͍ͨࣗ෼ͱͯ͠ཁૉٕज़͸͜Ε·Ͱͱಉ͕ͩ͡ • ίϯςφΛऔΓר͘ΤίγεςϜ΍ඪ४Խ͕ੈքͰڠௐͯ͠ਐΈ࢝Ί͍ͯΔ • kubernetesɺistioͳͲͷαʔϏεϝογϡɺϚΠΫϩαʔϏε΁ͷ׆༻ • Open

    Container Initiative(OCI)ɺContainer Runtime Interface(CRI) • CNCFΛத৺ʹ͜ΕΒͷݚڀɾઃܭɾ։ൃɾඪ४Խ͕੝ΜʹߦΘΕ͍ͯΔ • ಛʹΦʔέετϨʔγϣϯ΍࣮ݱࠔ೉ͩͬͨͱ͜ΖΛօͰڠྗͯٞ͠࿦ɾ։ൃ • ΞΧσϛΞͱاۀ͕ڠྗͯ͠ݚڀΛ࢝͠Ί͍ͯΔ
  8. 18 ಁաੑͱίϯςφͷϦΞΫςΟϒੑͷॏཁ͞ • σʔληϯλʔΛಁաత͔ͭ༗ػతʹίϯςφ͕ॲཧΛߦ͏ඞཁ͕͋Δ • ߴ౓ʹ෼ࢄͨ͠஍ཧతಛੑ౳Λҙࣝ͠ͳ͍Α͏ʹ͢΂͖ • ࣄલ༧ଌతͰ͸ͳ͘൓ԠతʹΞΫηεมԽͱϦιʔεׂ౰ΛҰகͤ͞Δ • ίϯςφ͕ϦΞΫςΟϒʹঢ়ଶΛม͑ΒΕΔΑ͏ʹ͢Δඞཁ͕͋Δ※1

    ˞3ZPTVLF.BUTVNPUP 6DIJP,POEP ,FOUBSP,VSJCBZBTIJ 'BTU$POUBJOFS")PNFPTUBUJD4ZTUFN "SDIJUFDUVSF)JHITQFFE"EBQUJOH&YFDVUJPO&OWJSPONFOU$IBOHFT 5IFSE "OOVBM*&&&*OUFSOBUJPOBM$PNQVUFST 4PGUXBSF BOE"QQMJDBUJPOT$POGFSFODF $0.14"$ +VMZ
  9. 20 dockerdΛܦ༝֤ͨ͠छίϯςφϥϯλΠϜ※1 time sudo docker run --rm mizzy/hello:latest /hello time

    sudo docker run --rm --runtime=runsc mizzy/ hello:latest /hello time sudo docker run --rm --runtime=kata-runtime mizzy/ hello:latest /hello time sudo docker run --rm --runtime=runnc mizzy/ hello:latest /hello.nabla time sudo docker run --rm --runtime=kata-fc mizzy/ hello:latest /hello ˞দຊ྄հ ௶಺༎थ ٶԼ߶ี ෼ࢄܕσʔληϯλʔ04Λ໨ࢦͨ͠ϦΞΫςΟϒੑΛ࣋ͭίϯςφ࣮ߦج൫ٕज़  ৘ใॲཧֶձݚڀใࠂΠϯλʔωοτͱӡ༻ٕज़ʢ*05ʣ /P*05 7PM QQ ೥݄
  10. ϝοηʔδ ηΩϡϦςΟ ࣮૷ྫ helloworldੑೳ (Pod+ίϯςφىಈ଎౓) ऩ༰ޮ཰ (1ίϯςφ͋ͨΓͷϝϞϦͷ ϑοτϓϦϯτ) ϓϩηεܕ ωʔϜεϖʔεͷִ཭

    runC 0.847 s docker: 50356 KB containerd-shim: 6124 KB ߹ܭ໿ 56 MB αϯυϘοΫεܕ ϢʔβϥϯυΧʔωϧ γεςϜίʔϧΞΫηε੍ޚ gVisor(runsc) 1.034 s docker: 50532 KB cintainerd-shim: 5812 KB runsc-gopher: 12296 KB runsc-sandbox: 18124 KB ߹ܭ໿ 85 MB ϢχΧʔωϧܕ ϢχΧʔωϧ෼཭ (ઐ༻appΠϝʔδͱ࠷௿ݶͷ γεςϜίʔϧ੍ݶ) Nabla-Containers(runnc) 0.897 s docker: 50720 KB containerd-shim: 5512 KB nabla-run: 6684 KB ߹ܭ໿ 62 MB microVMܕ microVM (virtio-net,virtio-blockɼ serial console, a 1-button key-board controller) Firecracker (devmapper snapshotter) (Kata plugin) 3.889 s docker: 1170808 KB docker-containerd-shim: 9960 KB kata-shim: 455664 KB firecracker: 145952 KB ߹ܭ໿ 1700 MB VMܕ VM Kata-Containers 2.415 s docker: 51056 KB containerd-shim: 6060 KB qemu-lite-system-x86_64: 227316 KB kata-proxy: 6132 KB kata-shim: 19536 KB ߹ܭ໿ 310 MB ೥݄࣌఺
  11. 24 ௒ݸମܕDC/OSͷϓϩηε/εϨουʹؔ͢Δݚڀ ࣾձʹ༹͚ࠐΜͩϗετ ΍Τοδ౳ͷίϯϐϡʔ ςΟϯά܈ ϓϩηε؅ཧػߏ ࣾձʹ༹͚ࠐΜͩϗετ ΍Τοδ౳ͷίϯϐϡʔ ςΟϯά܈ ࣾձʹ༹͚ࠐΜͩϗετ

    ΍Τοδ౳ͷίϯϐϡʔ ςΟϯά܈ ϓϩηε εϨου ϓϩηε ϓϩηε εϨου εϨου ɾར༻ऀͷ༻్ʹԠͯ͡ΞϓϦέʔγϣϯΛࣗ༝ʹϓϩηεܕ΍εϨουܕɺߋʹ͸ܰྔϓϩηεܕ౳Ͱ࣮ߦͰ͖Δ ɾϓϩηε΍εϨουΛϦΞΫςΟϒʹεέδϡʔϦϯά࣮ͯ͠ߦස౓ͷมԽͱϦιʔε࢖༻ྔͷมԽΛ͚ۙͮΔ ɾϓϩηε΍εϨου͸ίϯϐϡʔςΟϯά΍ར༻ऀͷঢ়گʹԠͯ͡ಁաతʹεέδϡʔϦϯάΛߦ͏ ϓϩηε͸ɺྫ͑͹ Pod͕VMͰִ཭͞Εͨ ίϯςφ܈ͱఆٛ εϨου͸ɺྫ͑͹ Pod͸Ϣʔβʔϥϯυ ΧʔωϧͰִ཭͞Ε ͨίϯςφ܈ͱఆٛ ܰྔϓϩηε ܰྔϓϩηε͸ɺྫ͑͹Pod ͕࠷௿ݶͷVMͷԾ૝Խػೳͷ ΈͰִ཭͞Εͨίϯςφ܈ͱ ఆٛ εέδϡʔϥʔ ௒ݸମܕσʔληϯλʔOS
  12. 25 ௒ݸମܕσʔληϯλʔʹ͓͚Δίϯςφ • ඞཁͳͱ͖΍ཁ݅ʹ߹Θͤͯద੾ͳίϯςφϥϯλΠϜΛબ୒తʹىಈ • OSʹ͓͚Δϓϩηε΍εϨουͷ࢖͍ํͱಉ༷ • ίϯςφىಈ଎౓ͱىಈޙͷΞϓϦέʔγϣϯ଎౓ͷτϨʔυΦϑΛٞ࿦ • ىಈ଎౓ͱىಈޙͷੑೳͷόϥϯεΛऔΔίϯςφϥϯλΠϜͷ༗Γํ

    • ֎తͳΞΫηε܏޲΍༧ଌͰ͖ͳ͍มԽʹϦΞΫςΟϒʹରԠͤ͞Δ • ϓϩηε΍εϨουؒͷ࿈ܞʹ͓͍ͯ΋ϗετಁաతʹॲཧ͢Δ • ߴ଎ʹίϯςφͷঢ়ଶΛมԽͤͨ͞ΓҠಈ͢Δݚڀ͕ඞཁ[1] [1] দຊ྄հɾ௶಺༎थɾٶԼ߶ี, CRIUΛར༻ͨ͠HTTPϦΫΤετ୯ҐͰίϯςφΛ࠶഑ஔͰ͖Δ௿ίετͰߴ଎ͳεέ δϡʔϦϯάख๏, IOT44, 2019೥3݄.
  13. 27 ௒ݸମܕDC/OSʹ͓͚Δίϯςφج൫ • ௒ݸମܕσʔληϯλʔͷίϯηϓτΛ঺հ • σʔληϯλʔػೳ͕ࣾձʹ༹͚ࠐΈͳ͕ΒΫϥ΢υͷϚγϯύϫʔΛ׆༻ • ۩ମతͳϏδϣϯΛ঺հ • ར༻ऀͷ༻్ʹԠͨ͡બ୒తͳίϯςφϥϯλΠϜ࣮ߦج൫ͷߏ૝

    • ϦΞΫςΟϒੑ͕ཁٻ͞ΕΔέʔεͰ͸ϢʔβϥϯυΧʔωϧܕ • ىಈޙͷΞϓϦͷੑೳ͕ཁٻ͞ΕΔέʔεͰ͸VMִ཭ܕ • ίϯςφ΍VMΛεϨου΍ϓϩηεͷΑ͏ʹಁաతʹ࣮ߦ͢Δج൫
  14. 28 ࠓޙͷ՝୊ͱݕ౼ • OCIϥϯλΠϜͷ෼ྨʹ͓͍ͯߋʹݚڀ։ൃ • Podͱίϯςφ͕ΑΓ଎͘ىಈ͠ΞϓϦέʔγϣϯΛॲཧͰ͖Δݚڀ • ूੵ཰ɾੑೳɾηΩϡϦςΟɾ࢖͍΍͢͞ͷόϥϯεΛ͞Βʹݕ౼͢Δ • ߴ౓ʹ෼ࢄ͞Εͨίϯςφͷ৘ใΛ؅ཧ͢Δ࿮૊Έͷઃܭͱ࣮૷

    • ϦΞΫςΟϒͷจ຺Ͱߴ଎ʹϦιʔε৘ใΛऔಘɾ੍ޚͰ͖Δٕज़ • Ϧιʔε৘ใʹج͍ͮͨྔࢠίϯϐϡʔςΟϯάʹΑΔ࠷దԽ໰୊ͷղܾ • ͋ͷͭΔ΂ʔ @tsurubee3 ͞Μ͕औΓ૊ΜͰ͍Δݚڀˢ
  15. 29 ௒ݸମܕDC/OSͷ෼ࢄܕϦιʔε؅ཧʹؔ͢Δݚڀ ࣾձʹ༹͚ࠐΜͩϗετ ΍Τοδ౳ͷίϯϐϡʔ ςΟϯά܈ ࣾձʹ༹͚ࠐΜͩϗετ ΍Τοδ౳ͷίϯϐϡʔ ςΟϯά܈ ࣾձʹ༹͚ࠐΜͩϗετ ΍Τοδ౳ͷίϯϐϡʔ

    ςΟϯά܈ ϓϩηε εϨου ϓϩηε ɾͲͷϗετ΍Τοδʹϓϩηε΍εϨου͕ىಈɾఀࢭɾҠಈ͞Εͯ΋Ϧιʔε؅ཧͰ͖Δ෼ࢄϦιʔε؅ཧγεςϜ ɾίϯηϯαεΞϧΰϦζϜͷҰ෦ػೳΛར༻ͨ͠ϝϯόʔγοϓ؅ཧͱ໋ྩͷฒྻԽʹΑͬͯϦιʔεΛ੍ޚ ɾ؅ཧऀ͕௒ݸମͷঢ়ଶʹ߹Θͤͯπʔϧ࣮ߦ͢ΔͷͰ͸ͳ͘πʔϧ࣮ߦʹ௒ݸମ͕ਖ਼͘͠൓Ԡͯ͠౴͑Λࣔ͢ ܰྔϓϩηε Ϧιʔεঢ়گͷऔಘ Ϧιʔεͷ੍ޚ ϝϯόʔγοϓ؅ཧ ʴ ໋ྩฒྻԽ ؅ཧऀͷπʔϧ Ϧιʔεͷ੍ޚ Ϧιʔεঢ়گͷऔಘ ϓϩηε؅ཧػߏ ϝϯόʔγοϓ؅ཧ ʴ ໋ྩฒྻԽ