Upgrade to Pro — share decks privately, control downloads, hide ads and more …

はてなのインフラストラクチャ設計構想 / The Concept of Hatena Infrastructure

5e811ea39e141c433cdd961bbaa03122?s=47 masayoshi
PRO
October 16, 2017

はてなのインフラストラクチャ設計構想 / The Concept of Hatena Infrastructure

ペパボ・はてな技術大会〜インフラ技術基盤〜@福岡 vol.3
で発表した内容となります。
下記スライドの続きとなっているので下記スライドから見ると流れがわかりやすいと思います。
https://speakerdeck.com/yuukit/the-concept-of-hatena-system

5e811ea39e141c433cdd961bbaa03122?s=128

masayoshi
PRO

October 16, 2017
Tweet

Transcript

  1. ͸ͯͳͷΠϯϑϥετϥΫνϟ ઃܭߏ૝ ϖύϘɾ͸ͯͳٕज़େձ ~ Πϯϑϥٕज़ج൫ ~ @෱Ԭɹɹɹɹɹid:masayoshi

  2. ΞδΣϯμ • ࣗݾ঺հ • ͸͡Ίʹ • ͸ͯͳγεςϜ • ͳͥ෼ղͱ࠶ߏஙΛϏδϣϯʹͨ͠ͷ͔? •

    ࣾ಺ߏ੒؅ཧπʔϧ • ෼ղͱ࠶ߏஙྫͷ঺հ • ΞʔΩςΫνϟͷ෼ղͱ࠶ߏங • ػೳͷ෼ղͱ࠶ߏங
  3. ࣗݾ঺հ • id:masayoshi • twitter: yoyogidesaiz • WebΦϖϨʔγϣϯΤϯδχΞ 2016೥ೖࣾ •

    ओʹωοτϫʔΫɺԾ૝αʔόج൫ํ໘ͷ୲౰
  4. ͸͡Ίʹ • ෼ղͱ࠶ߏஙʹΑ࣮ͬͯݱ͢ΔΠϯϑϥج൫ߏ૝Λ࿩͠·͢ • y_uukiͷൃදΑΓ΋͏Ұา۩ମతͳ಺༰Λ࿩͠·͢ • ͜͜Ͱ͍͏Πϯϑϥج൫͸ʮ͸ͯͳͷʯΠϯϑϥج൫Ͱ͢ • ࣄۀ಺༰,ن໛ʹΑͬͯΠϯϑϥج൫͸େ͖͘ҟͳΓ·͢ •

    ͥͻϖύϘɾ͸ͯͳͰͷҧ͍Λתೳ͍ͯͩ͘͠͞ʂ • SREຊ౳ΛಡΉͱGoogleͷΠϯϑϥج൫ʹ৮ΕΔ͜ͱ΋ ग़དྷΔͰ͠ΐ͏ ※1 https://landing.google.com/sre/book.html ※1
  5. ͸ͯͳγεςϜ

  6. ͸ͯͳγεςϜ • ෼ղͱ࠶ߏங • Repairable Infrastructure • ؍ଌͱ࣮ݧ • Experimental

    Infrastructure • ࠓճ͸ͪ͜Β͸ѻ͍·ͤΜ
  7. ͳͥզʑ͸෼ղͱ࠶ߏஙΛϏδϣϯʹͨ͠ͷ͔?

  8. 10೥ͷॏΈ • ઌఔͷฐࣾy_uukiͷʮ͸ͯͳγεςϜߏ૝ʯ • 10೥΋ͭʹ͸? • ࣾ಺αʔόߏ੒؅ཧπʔϧ • ࣮ࡍʹ10೥ࢧ͑ͨ͸ͯͳͷΠϯϑϥج൫ͷத਻ •

    2007೥ࠒ͔Β։ൃελʔτͨ͠ • վળ͠ͳ͕Βདྷ͕ͨ৭ʑͭΒ͘ͳ͖ͬͯͨ
  9. ͪͳΈʹ2007೥͝Ζ(10೥લ)͸͜Μͳ࣌୅ʂʂ • CentOS5͕ϦϦʔε͞ΕΔ • Linux Kernel 2.60.20 ͕ϦϦʔε͞ΕKVM͕౷߹͞Εͨ • 2006೥ʹAWS

    S3, EC2͕αʔϏεఏڙ։࢝ • ౦ژϦʔδϣϯ͸2011೥։ઃ • iPhoneॳ୅͕ൃച • Android౥ࡌͷܞଳి࿩ൃച͕2008೥
  10. 2007೥ʹ࡞੒͞Εͨࣾ಺αʔόߏ੒؅ཧπʔϧ • ϋΠύʔόΠβʔܕͷԾ૝Ϛγϯલఏͷߏ੒ • σʔληϯλΛલఏʹͨ͠ઃܭ • ϥοΫྻͱ͔ిѹͱ͔ • αʔϏεͱϩʔϧͷ૊Έ߹ΘͤʹΑΔαʔό؅ཧ •

    Hatena-Blog—DB, Hatena-Blog—Proxy • αʔϏε,ϩʔϧʹج͍ͮͨDNSϨίʔυͷੜ੒ • db.hatena-blog.service.hosts 192.168.0.1 • ωοτϫʔΫʹԠͨ͡IPΞυϨεͷ෷͍ग़͠ • εςʔλε৘ใͷ؅ཧ(working, standby, maintenance,…) • ؂ࢹઃఆͷࣗಈઃఆ • αʔόຖʹϝτϦοΫΛRRDToolʹΑΔՄࢹԽ ·ͩ·ͩػೳ͸͋Δͧ!!!
  11. طଘͷࣾ಺αʔόߏ੒؅ཧπʔϧͷྑ͔ͬͨ఺ • αʔϏεɾϩʔϧͱεςʔλεʹج͍༷ͮͨʑͳػೳ • DNSͷϨίʔυੜ੒ • σϓϩΠઌαʔόͷಛఆ • ؂ࢹઃఆͷࣗಈԽɺ؂ࢹͷ௨஌on,off •

    ͸ͯͳͷΠϯϑϥج൫Λ10೥ࢧ͑ͨ • վमΛॏͶͯෛ࠴΋ଟ͍͕͔ͬ͠Γࢧ͑ͨ
  12. طଘͷࣾ಺αʔόߏ੒؅ཧπʔϧͷ໰୊఺ • ઐଐͷϝϯςφʔෆࡏ໰୊ • ࣾ಺πʔϧͷϝϯςφϯε͸์ஔ͞Ε͕ͪ • ߏ੒؅ཧπʔϧͰ͔͗͢Δ໰୊ • શ෦͕ґଘ͍ͯͯ͠มߋͷίετ͕ߴ͍ •

    ྑ͍OSS͕ग़ͨͱ͖ʹ͚ͦͩ͜Ҡߦ͢Δͷ͕೉͍͠ • ωοτϫʔΫଆͷػೳͳͲΛ੝ΓࠐΈ͗ͨ͢
  13. ݱࡏͷࣾ಺αʔόߏ੒؅ཧπʔϧࣄ৘ • MackerelΛαʔό؂ࢹαʔϏεͱͯ͠ϦϦʔε • ߏ੒؅ཧπʔϧͷྑ͍ͱ͜ΖΛ࢒͠ɺࣾ಺ࣄ৘Λഉআ • αʔϏεʹͳΕ͹ϝϯςφʔ΋ͭ͘ʂʂ • ʮࣾ಺੡ͷΞϓϦέʔγϣϯΛOSSʹ͢Δʯͱࣅͨٞ࿦ •

    ͱ͸͍͑ࣾ಺ࣄ৘΋Πϯϑϥج൫Ͱ͸Χόʔ͢Δඞཁ͕͋Δ • MackerelΛ࢖͍ͭͭɺطଘͷߏ੒؅ཧπʔϧ΋ซ༻ • ࣾ಺ࣄ৘ΛΧόʔ͢Δɺ࣍ͷ10೥Λࢧ͑Δ৽نΠϯϑ ϥج൫ͷ੔උ͕ඞཁ
  14. কདྷͷΠϯϑϥج൫ʹٻΊΒΕΔ͜ͱ • ઐଐͷϝϯςφϯε୲౰͕͚ͭΒΕͳ͍͜ͱ΋͋Δ • 10೥ઌΛݟӽͨ͠׬ᘳͳઃܭ͸΄΅ෆՄೳ • 3೥ఔ౓ͰϦϓϨʔε͢Δඞཁ͕͋Δ • શػೳΛશͯΛϦϓϨʔε͢Δඞཁ͸ͳ͍ Ұ෦ػೳΛ3೥ఔ౓ͰϦϓϨʔεՄೳͳΠϯϑϥج൫

    Repairable Infrastructure
  15. Repairable Infrastructure ~ ෼ղͱ࠶ߏங ~

  16. Repairable InfrastructureΛ໨ࢦͨ͢Ίʹ • ෼ղͱ࠶ߏஙΛ͠ɺRepairable InfrastructureΛ໨ࢦ͢ • ΞʔΩςΫνϟͷ෼ղͱ࠶ߏங • ػೳͷ෼ղͱ࠶ߏங

  17. ΞʔΩςΫνϟͷ෼ղͱ࠶ߏங ~ ෼ղͱ࠶ߏங ~

  18. ΞʔΩςΫνϟͷ෼ղͱ࠶ߏங • ࠓ·Ͱͷ֊૚ߏ଄ΛҰճ෼ղ͠ɺ࠶ߏங • ໌֬ͳ୯ޠ͕ͳ͍ͱ͜Ζ͸৽ͨʹఆٛ • ࠶ఆٛྫΛ2ͭ঺հ

  19. શମͷ࿦ཧϨΠϠʔߏ੒(چ) DataCenter or Cloud Container or Serverless Infrastructure Application 4FSWJDF"

    4FSWJDF# 4FSWJDF$ *OGSBTUSVDUVSF $MPVE )PVTJOH • σʔληϯλ͔ΒΫϥ΢υͳͲେ͖ͳ؀ڥͷมԽ • αʔϏε਺͕૿͑Δͱ”ྫ֎ͳΠϯϑϥ”͕૿͍͑ͯ͘ • InfrastructureͰ࣮૷͢ΔͱαʔϏε͕૿͑Δͨͼʹվम͕ࠔ೉ • Applicationͱ͍͏ͷ΋Կ͔ҧ͏…
  20. શମͷ࿦ཧϨΠϠʔߏ੒(৽) Resource Domestic Infrastructure Service Adapter Service Application 4FSWJDF" 4FSWJDF#

    4FSWJDF$ *OGSBTUSVDUVSF $MPVE )PVTJOH 4FSWJDF"PS# 4FSWJDF$ • Service Adapter ͰαʔϏεࠩҟΛٵऩ • Domestic Infrastructure Ͱࣾ಺ࣄ৘Λٵऩ • Resource ͸AWSɺΦϯϓϨ؀ڥɺαʔόϨεͷϦιʔεͳͲ
  21. Service Adapter LayerΛઃ͚ͨཧ༝ • Πϯϑϥج൫ΛRepairableʹ͢ΔͨΊ • ಛఆαʔϏεͷҝ΁ͷ֦ுΛ܁Γฦ͢ • αʔϏεͷมԽʹΠϯϑϥج൫͕௥͍͚ͭͳ͍ •

    ΞϓϦέʔγϣϯ΋RepairableʹͳΔ • ୲౰ྖҬͷ໌֬Խ • ΞϓϦέʔγϣϯΤϯδχΞ͕Πϯϑϥࣾ಺ࣄ৘ͷ೺Ѳ͸ࠔ೉ • ΠϯϑϥΤϯδχΞ͕֤αʔϏεͷίʔυঢ়گ೺Ѳ͸ࠔ೉ • Service Adapter͸྆ऀ͕৮Δ
  22. %FCJBO %FCJBO αʔό಺ͷϨΠϠʔߏ੒ • γεςϜ(OS)ʹΠϯετʔϧ͞Ε͍ͯΔ΋ͷΛར༻͢Δ • OSͷมߋͷࡍͷӨڹ͕େ͖͍ => RepairableͰ͸ͳ͍ 1FSM

    1FSM "11 "11 APP Layer OS Layer
  23. %FCJBO %FCJBO $POUBJOFS DISPPU $POUBJOFS DISPPU αʔό಺ͷϨΠϠʔߏ੒ • APP͕͔ͭ͏lib, ϛυϧ΢ΣΞ,

    ࣮ߦ؀ڥΛՄೳͳݶΓ෼཭ • OSͷมߋ͕͠қ͍ => Repairable ! System Library Layer Local Library Layer 1FSM 1FSM 1FSM 1FSM "11 "11 APP Layer OS Layer
  24. αʔό಺ͷϨΠϠʔߏ੒ • localͱsystemͷ෼཭Λ࣮ݱ͢ΔγεςϜ • rbenv, plenv, pyenv, mysqlenv,….. • chroot

    • ίϯςφٕज़ • ্هͷதͰ΋chroot͕γϯϓϧ͔ͭ൚༻ੑ͕ߴ͍ • docker͸ศར͕ͩɺ͜ͷͨΊ͚ͩʹ࢖͏ͷ͸ॏ͍ • ίϯςφٕज़ͷҰ෦(namespace)ͱchrootͷ૊Έ߹Θͤ • => drootͷ։ൃ • ͜Ε͸ػೳͷ෼ղͱ࠶ߏஙͱ͍͑Δ
  25. ΞʔΩςΫνϟͷ෼ղͱ࠶ߏங • ͜ͷΑ͏ͳײ͡ͰΞʔΩςΫνϟΛ࠶ఆ͍ٛͯ͘͠ • ෼ղͱ࠶ߏங͸ιϑτ΢ΣΞ΍ωοτϫʔΫΛࢀߟʹ

  26. ػೳͷ෼ղͱ࠶ߏங ~ ෼ղͱ࠶ߏங ~

  27. ػೳͷ෼ղͱ࠶ߏங • ػೳͷ෼ղͱ࠶ߏங • ࠶ߏஙͨ͠ΞʔΩςΫνϟͷద߹͢ΔΑ͏ʹ෼ղ͠࠶ߏங • ద߹͢ΔOSS, ϚωʔδυαʔϏεΛ୳͢ • ػೳ͕଍Γͳ͚Ε͹

    + αͰ࣮૷͢Δ • ࣮૷ͷࡍʹ͸Repairable͔Ͳ͏͔ߟྀ࣮ͯ͠૷͢Δ • ࠶ͼ෼ղͱ࠶ߏங͕Ͱ͖Δ΋ͷ͔ • ґଘϞδϡʔϧͷଟ͞ɺ࣮૷͕େม͞ͳͲ • কདྷద߹ͨ͠OSS͕ग़͖ͯͨͱ͖ʹҠߦͰ͖Δ͔
  28. ػೳͷ෼ղͱ࠶ߏஙྫ • droot • ฐࣾy_uukiͷൃදͰ͋ͬͨͷͰলུ • IP Drawer • IP෷͍ग़͠ػೳͷ࣮૷

  29. IP෷͍ग़͠ػೳ͕ཉ͔ͬͨ͠ཧ༝ • Ծ૝αʔό࡞੒࣌ͷIPΞυϨεܾఆ • DHCPαʔόΛαʔϏεͷՄ༻ੑͰӡ༻ͨ͘͠ͳ͍ • ΦϯϓϨ͸Ծ૝αʔό࡞੒࣌ʹݻఆʹ͍ͨ͠ • EC2͸VPCͷDHCPͰ΍Γ͍ͨ •

    VIPͷܾఆ͸ਓ͕΍Γ͍ͨͷͰਓʹ΋෷͍ग़ͯ͠ཉ͍͠ • طଘͷߏ੒؅ཧπʔϧ͔ΒIP෷͍ग़͠ػೳΛ෼཭͍ͨ͠ • ෼ղͱ࠶ߏங • ඞཁͳͷ͸ओʹIPΞυϨεͷ෷͍ग़͠ • DHCPαʔόͰREST APIରԠ͍ͯ͠Δͷ͕Kea͙Β͍ͩͬͨ • IP෷͍ग़ͯ͠ཉ͍͙͠Β͍ͩͬͨͷͰͰ͔ͦ͏ͩͬͨ • golangͱRedisͰαΫοͱΞϧόΠτʹ࡞ͬͯ΋Βͬͨ
  30. ࣮ࡍͷ࣮૷ • IPΞυϨεͷ෷͍ग़͠͸RESTͰߦΘΕΔ • DHCPϓϩτίϧͷ࣮૷͸΍Βͳ͔ͬͨ • DHCP͔ΒͷҠߦָ͕ͩ͠ฒߦӡ༻ՄೳͰ࢖༻Λ΍ΊΔ͜ͱ΋೉͘͠ͳ͍ ਓ *1%SBXFS 71$

    %)$1 αʔό αʔό IP෷͍ग़͠ IP෷͍ग़͠ IPϦϦʔεࡁΈ IPϦϦʔεࡁΈ IPϦϦʔεࡁΈ IP෷͍ग़͠ DHCPͰઃఆ͍ͨ͠ IPݻఆͰઃఆ͍ͨ͠ IPखಈͰઃఆ͍ͨ͠
  31. ػೳͷ෼ղͱ࠶ߏங • ࠶ߏங͠ͳ͍Ͱద߹͢ΔͳΒͦΕΛར༻͢Δ • μϝͦ͏ͳΒࣾ಺ࣄ৘Λߟྀ͠ɺബ͍࣮૷Λ͢Δ • Domestic Infrastructure Layer͸ബ͘ •

    ద߹͢Δ΋ͷ͸ੵۃతʹ Resource LayerͰ • ୤ग़ɺϑϧεΫϥονͷେม͞Λߟྀ࣮͠૷ΛબͿ
  32. ·ͱΊ • ϏδϣϯΛࣔ͢͜ͱʹΑΓઓུతʹվળΛ͢Δ • ݱࡏ͸෼ղͱ࠶ߏஙʹΑΓΞʔΩςΫνϟͳͲΛఆٛ • ΞʔΩςΫνϟʹैͬͯػೳͷ෼ղͱ࠶ߏங • ػೳͷ੾Γग़͠Λ͢Δ͔ͳͲͷ൑அج४ʹ •

    ࠓޙ͸؍ଌͱ࣮ݧ΋ճͯ͠ߦ͖͍ͨ • MackerelΛ࠷େݶར༻ͨ͠؍ଌ • ࣮ݧͱϑΟʔυόοΫ੍ޚ