Share
Embed
分散リソースマネージメントミドルウェアの設計と実装
分散リソースマネージメントミドルウェアの設計と実装
公立はこだて未来大学 松原研究室 訪問
2019/04/24
さくらインターネット株式会社
さくらインターネット研究所
上級研究員
松本亮介 / まつもとりー / @matsumotory
MATSUMOTO Ryosuke PRO
April 25, 2019
Transcript
25 slides
-
͘͞ΒΠϯλʔωοτגࣜձࣾ (C) Copyright 1996-2019 SAKURA Internet Inc ͘͞ΒΠϯλʔωοτݚڀॴ ࢄϦιʔεϚωʔδϝϯτϛυϧΣΞ ͷઃܭͱ࣮
2019/04/23 ্ڃݚڀһ দຊ ྄հ ެཱͩͯ͜ະདྷେֶ দݪݚڀࣨ ๚ -
2 ɾ͘͞ΒΠϯλʔωοτݚڀॴ ্ڃݚڀһ ɾגࣜձࣾGrooves Forkewll ٕज़ސ ɾϖύϘݚڀॴ ٬һݚڀһ ݚڀސ ɾηΩϡϦςΟɾΩϟϯϓߨࢣ
ɾใॲཧֶձ Πϯλʔωοτͱӡ༻ٕज़ݚڀձ ֤छҕһ ɾژେֶത࢜ʢใֶʣ দຊ྄հ / ·ͭͱΓʔ / @matsumotory -
4 ݸମతσʔληϯλʔʹ͚ͨऔΓΈ • ΫϥυωΠςΟϒɾϚϧνΫϥυɾಛఆOSSͷґଘͷഉআ • ίϯςφ୯ҐͰͷαʔϏεػೳɺཧख๏ͷࢄԽ • ϚΠΫϩαʔϏεͷΑ͏ͳSOAࢤͷઃܭख๏ • ৫νʔϜͱͯ͠ͷࣗࢄԽؚΉ
• ͘͞ΒΠϯλʔωοτݚڀॴʹΑΔݸମతσʔληϯλʔͷऔΓΈ • ϨΠςϯγͷݮͱࣾձʹ༹͚ࠐΉίϯϐϡʔςΟϯά • ਓͷۙ͘ʹͲΜͲΜͱΫϥυͷϚγϯύϫʔΛد͍ͤͯ͘ -
5 ӡ༻ٕज़ͷࢄԽ • ϚΠΫϩαʔϏε୯ҐͰνʔϜͱͯ͠ӡ༻͢Δํੑ͕ͻͱͭ • ࣗࢄ͍ͯ͘͠αʔϏείϯςφΛӡ༻͢Δٕज़ͷਐԽ • k8sΛ࢝Ίͱ͢ΔΦʔέετϨʔγϣϯʹΑΔཧ • k8sʹΑͬͯΫϥυOSΛநԽͯ͠ΫϥυOSͱͳΔੈք
• k8sʹґଘ͠ͳ͍ࢄͨ͠ίϯςφVMڥͷϦιʔεϚωʔδϝϯτ • k8sΛΑΓ͍͔Βࢧ͑Δج൫ٕज़։ൃͱݴ͑Δ? • ΦʔέετϨʔγϣϯʹ࣮͢ΔͨΊͷӡ༻ٕज़ͷࢄԽ -
7 k2i • ίϯςφΛऔΓר͘ࢄγεςϜʹ͓͚ΔϓϩηεใΛಁաతʹऔಘ • ίϯςφͷऩ༰ϗετͷϓϩηεใΛϦϞʔτ͔ΒऔಘɾௐࠪՄೳ • ֤ऩ༰ϗετʹىಈ͓ͤͯ͘͜͞ͱͰಁաతʹϓϩηεใΛऔಘՄೳ • ࣮RustͷHTTPαʔό+libprocpsͷRust
bindingʹΑ࣮ͬͯ • Ͱ͖Δ͚ͩߴʹಈ࡞͢ΔΑ͏ʹ • https://github.com/matsumotory/k2i • https://github.com/matsumotory/procps-sys -
8 drcond • ϦϞʔτ͔Βऩ༰ϗετͷ֤छϓϩηεͷ֤छϦιʔε༻ྔΛ੍ޚ • localݶఆͷcliπʔϧͱͯ͠rconͱ͍͏πʔϧΛҎલ࡞ͬͨ • ෳͷऩ༰ϗετʹରͯ͠drcond͕ಈ͍͍ͯΕϦϞʔτ͔Β੍ޚՄೳ • ֤छϛυϧΣΞ͔ΒҰ࣌తʹϦιʔεΛ੍ޚ͍ͨ͠߹ར༻Մೳ
• ྫ: HTTPϦΫΤετ୯ҐͰಛఆͷϦΫΤετॲཧ͚ͩΛ੍ޚ͢Δͱ͔※1 • drcond͕͋ΕSMTPηογϣϯ୯ҐͰ൚༻తʹ੍ޚՄೳʹͳΔ ※1 দຊ྄հ, ܀ྛ݈ଠ, Ԭ෦णஉ, ϦΫΤετ୯ҐͰԾతʹϋʔυΣΞϦιʔεΛ͢ΔWebαʔόͷϦιʔ ε੍ޚΞʔΩςΫνϟ, ใॲཧֶձจࢽ, Vol.59, No.3, pp.1016-1025, 20183݄. -
9 drcond • ϦΫΤετ୯Ґͱ͔ηογϣϯ୯ҐͰͷҰ࣌తͳ੍ݶͳͲͷέʔε • Ϧιʔε੍ޚॲཧࣗମ͕ΦʔόʔϔουʹͳΒͳ͍Α͏ͳੑೳ͕ඞཁ • Trusterdͱ͍͏ߴʹmrubyͰಈ࡞͢ΔHTTP/2αʔόΛར༻ • https://github.com/matsumotory/trusterd
• nginxΑΓ3ഒ͍ͱ͍͏ݕূ݁Ռग़ͨ https://hb.matsumoto-r.jp/ entry/2015/12/16/000114 • trusterdʹmruby-cgroupΛΈࠐΜͰRubyͰrcondΛ࣮͍ͯ͠Δ్த • https://github.com/matsumotory/mruby-cgroup -
17 ίϯηϯαεΞϧΰϦζϜͱ࣮ • Paxos, Raft, Zab, 2PCɺ࣮etcd, consul, CockroachDB, TiDB
• Paxos • ੲ͔Β͋ΔΞϧΰϦζϜͰ͋Δ͕ཧ͕ͯ͘͠Paxos-baseΈ͍ͨͳ࣮ ͕େྔʹੜ·ΕΔ • ͦͷͨΊ࣮ࡍʹҰ؏ੑΛอূͰ͖͍ͯΔͷ͔͕ෆ໌ͰࠔΔ͜ͱ͕ଟ • Raft • In search of an understandable consensus algorithm in USENIX 2014 • PaxosΛ࣮༻తʹແ͍ϨϕϧͰੑೳͱཧղͷ͢͠͞Λվળ -
18 Raftͷ໘ന͍ͱ͜Ζ • ෳࡶͳࢄ߹ҙܗΛ࣮༻্ͳ͍ͱ͍͏લఏͰཧΛߏங • ΞϧΰϦζϜͰ࣮͋ͬͯફΛલఏʹ͍ͯ͠Δͱ͜Ζ͕͓͘͢͝͠Ζ͍ • Ϧʔμʔ͕ແݶʹܾ·Βͳ͍λΠϜΞτΛཚʹ͢Ε࣮༻্ ແ͍ϨϕϧͰϥΠϒϩοΫʹͳͬͯϦʔμʔΛܾΊΒΕΔͱ͔ •
ϩάͷ࠶ૹͱ্ॻ͖ͷޮࣦഊͨ͠ΒલʹͬͯΓ͠Λ܁Γฦ͢ ͷͰҰݟޮ͕ѱͦ͏͚ͩͲ࣮༻্ͦ͜·Ͱͷ͕ى͖ʹ͍͘ͱ͔ • https://www.usenix.org/system/files/conference/atc14/atc14-paper- ongaro.pdf -
19 ࢄτϥϯβΫγϣϯͱ͔ϩάอଘ • ίϯηϯαεΞϧΰϦζϜͰॏཁͳཁૉ • ͨͩͷతʹͦΜͳʹඞཁͳ͍ͷͰͳ͍͔ • ໋ྩΛϩάʹͯ͠Ұ؏ੑΛอͭͱ͍͏ػೳk2idrcondʹ໋͓͍ͯྩࣗମ ͕εςʔτϨε •
ͱ͍͑ɺ࣮ߦઌͰͷ࣮ߦͳͲෛՙʹΑͬͯมΘΔͷͰߟྀඞཁ • KVSͷΑ͏ʹϩάΛͨΊͨΓίϯύΫγϣϯΛ͢Δͱ͍͏ͷ࣌ؒͰྑ͍ • ετϨʔδͷอଘΛߟྀ͠ͳ͚Εߋʹraftߴ͍ੑೳ͕ͰΔ ※1 ※1 ࢄ߹ҙΞϧΰϦζϜRaftͷௐࠪ http://db-event.jpn.org/deim2017/papers/386.pdf -
20 Ԡ༻ྫ: Koordinator • A Service Approach for Replicating Docker
Containers in Kubernetes • k8sͰѻ͏ίϯςφ͕εςʔτΛอͭ߹ʹreplicaͷҰ؏ੑΛอͭ • ϚϧνίϯςφͰwriteͷޙʹམͪΔͱଞͷίϯςφͱঢ়ଶ͕มΘΔ • proxyͱίϯςφؒʹkoordinatorΛ࡞Δ • koordinatorͰίϯηϯαεΞϧΰϦζϜΛ໋ͬͯྩΛorderԽͯ͠ෳ ͷίϯςφʹ໋ྩॱʹಉ࣮࣌ߦ →Ұ؏ੑΛΑΓڧ͍ͷʹ͢Δ Hylson Vescovi Netto, Aldelir Fernando Luiz, Miguel Correia, Luciana de Oliveira Rech, Caio Pereira Oliveira, Koordinator: A Service Approach for Replicating Docker Containers in Kubernetes, 2018 IEEE Symposium on Computers and Communications (ISCC) Year: 2018, Volume: 1, Pages: 58-51 -
Ԡ༻ྫɿKoordinator 21 client FW proxy proxy proxy koordinator koordinator koordinator
app app app client FW proxy proxy proxy koordinator koordinator koordinator app app app $POTFOTVT"MHPSJUIN 0SEFSJOH &YFDVUJPO XSJUFSFRVFTU SFBESFRVFTU -
22 k2idrcondͷࢄԽ: Multiraft leader follower follower client leader follower follower
leader follower follower Multiraftͱ͔RaftΫϥελͷࢄΈ͍ͨͳ͋Δ 1. https://www.cockroachlabs.com/blog/scaling-raft/ 2. http://db-event.jpn.org/deim2017/papers/386.pdf 3. http://sergeiturukin.com/2017/06/09/multiraft.html -
23 ࣮༧ఆ • Raftͷ࣮͍ͬͺ͍͋Δ CͰRustͰ • drcondmrubyͰ࡞͍ͬͯΔͷͰCͷϥΠϒϥϦΛ͏ͭΓ • k2iRustͰॻ͍͍ͯΔͷͰRustΛૉʹ͏͔ •
ͱ͍͑ίϯηϯαεΞϧΰϦζϜͰKVSσʔλϕʔεΛ࡞Δͱ͍͏Θ͚Ͱ ͳ͍ͷͰɺ֤छϥΠϒϥϦΛ͍ͳ͕Βతʹ͋ͬͨՕॴͷ࣮Λ͍ͨ͠