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

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

masayoshi
October 16, 2017

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

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

masayoshi

October 16, 2017
Tweet

More Decks by masayoshi

Other Decks in Technology

Transcript

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

    ࣾ಺ߏ੒؅ཧπʔϧ • ෼ղͱ࠶ߏஙྫͷ঺հ • ΞʔΩςΫνϟͷ෼ղͱ࠶ߏங • ػೳͷ෼ղͱ࠶ߏங
  2. ͸͡Ίʹ • ෼ղͱ࠶ߏஙʹΑ࣮ͬͯݱ͢ΔΠϯϑϥج൫ߏ૝Λ࿩͠·͢ • y_uukiͷൃදΑΓ΋͏Ұา۩ମతͳ಺༰Λ࿩͠·͢ • ͜͜Ͱ͍͏Πϯϑϥج൫͸ʮ͸ͯͳͷʯΠϯϑϥج൫Ͱ͢ • ࣄۀ಺༰,ن໛ʹΑͬͯΠϯϑϥج൫͸େ͖͘ҟͳΓ·͢ •

    ͥͻϖύϘɾ͸ͯͳͰͷҧ͍Λתೳ͍ͯͩ͘͠͞ʂ • SREຊ౳ΛಡΉͱGoogleͷΠϯϑϥج൫ʹ৮ΕΔ͜ͱ΋ ग़དྷΔͰ͠ΐ͏ ※1 https://landing.google.com/sre/book.html ※1
  3. ͪͳΈʹ2007೥͝Ζ(10೥લ)͸͜Μͳ࣌୅ʂʂ • CentOS5͕ϦϦʔε͞ΕΔ • Linux Kernel 2.60.20 ͕ϦϦʔε͞ΕKVM͕౷߹͞Εͨ • 2006೥ʹAWS

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

    Hatena-Blog—DB, Hatena-Blog—Proxy • αʔϏε,ϩʔϧʹج͍ͮͨDNSϨίʔυͷੜ੒ • db.hatena-blog.service.hosts 192.168.0.1 • ωοτϫʔΫʹԠͨ͡IPΞυϨεͷ෷͍ग़͠ • εςʔλε৘ใͷ؅ཧ(working, standby, maintenance,…) • ؂ࢹઃఆͷࣗಈઃఆ • αʔόຖʹϝτϦοΫΛRRDToolʹΑΔՄࢹԽ ·ͩ·ͩػೳ͸͋Δͧ!!!
  5. ݱࡏͷࣾ಺αʔόߏ੒؅ཧπʔϧࣄ৘ • MackerelΛαʔό؂ࢹαʔϏεͱͯ͠ϦϦʔε • ߏ੒؅ཧπʔϧͷྑ͍ͱ͜ΖΛ࢒͠ɺࣾ಺ࣄ৘Λഉআ • αʔϏεʹͳΕ͹ϝϯςφʔ΋ͭ͘ʂʂ • ʮࣾ಺੡ͷΞϓϦέʔγϣϯΛOSSʹ͢Δʯͱࣅͨٞ࿦ •

    ͱ͸͍͑ࣾ಺ࣄ৘΋Πϯϑϥج൫Ͱ͸Χόʔ͢Δඞཁ͕͋Δ • MackerelΛ࢖͍ͭͭɺطଘͷߏ੒؅ཧπʔϧ΋ซ༻ • ࣾ಺ࣄ৘ΛΧόʔ͢Δɺ࣍ͷ10೥Λࢧ͑Δ৽نΠϯϑ ϥج൫ͷ੔උ͕ඞཁ
  6. શମͷ࿦ཧϨΠϠʔߏ੒(چ) DataCenter or Cloud Container or Serverless Infrastructure Application 4FSWJDF"

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

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

    ΞϓϦέʔγϣϯ΋RepairableʹͳΔ • ୲౰ྖҬͷ໌֬Խ • ΞϓϦέʔγϣϯΤϯδχΞ͕Πϯϑϥࣾ಺ࣄ৘ͷ೺Ѳ͸ࠔ೉ • ΠϯϑϥΤϯδχΞ͕֤αʔϏεͷίʔυঢ়گ೺Ѳ͸ࠔ೉ • Service Adapter͸྆ऀ͕৮Δ
  9. %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
  10. αʔό಺ͷϨΠϠʔߏ੒ • localͱsystemͷ෼཭Λ࣮ݱ͢ΔγεςϜ • rbenv, plenv, pyenv, mysqlenv,….. • chroot

    • ίϯςφٕज़ • ্هͷதͰ΋chroot͕γϯϓϧ͔ͭ൚༻ੑ͕ߴ͍ • docker͸ศར͕ͩɺ͜ͷͨΊ͚ͩʹ࢖͏ͷ͸ॏ͍ • ίϯςφٕज़ͷҰ෦(namespace)ͱchrootͷ૊Έ߹Θͤ • => drootͷ։ൃ • ͜Ε͸ػೳͷ෼ղͱ࠶ߏஙͱ͍͑Δ
  11. ػೳͷ෼ղͱ࠶ߏங • ػೳͷ෼ղͱ࠶ߏங • ࠶ߏஙͨ͠ΞʔΩςΫνϟͷద߹͢ΔΑ͏ʹ෼ղ͠࠶ߏங • ద߹͢ΔOSS, ϚωʔδυαʔϏεΛ୳͢ • ػೳ͕଍Γͳ͚Ε͹

    + αͰ࣮૷͢Δ • ࣮૷ͷࡍʹ͸Repairable͔Ͳ͏͔ߟྀ࣮ͯ͠૷͢Δ • ࠶ͼ෼ղͱ࠶ߏங͕Ͱ͖Δ΋ͷ͔ • ґଘϞδϡʔϧͷଟ͞ɺ࣮૷͕େม͞ͳͲ • কདྷద߹ͨ͠OSS͕ग़͖ͯͨͱ͖ʹҠߦͰ͖Δ͔
  12. IP෷͍ग़͠ػೳ͕ཉ͔ͬͨ͠ཧ༝ • Ծ૝αʔό࡞੒࣌ͷIPΞυϨεܾఆ • DHCPαʔόΛαʔϏεͷՄ༻ੑͰӡ༻ͨ͘͠ͳ͍ • ΦϯϓϨ͸Ծ૝αʔό࡞੒࣌ʹݻఆʹ͍ͨ͠ • EC2͸VPCͷDHCPͰ΍Γ͍ͨ •

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

    %)$1 αʔό αʔό IP෷͍ग़͠ IP෷͍ग़͠ IPϦϦʔεࡁΈ IPϦϦʔεࡁΈ IPϦϦʔεࡁΈ IP෷͍ग़͠ DHCPͰઃఆ͍ͨ͠ IPݻఆͰઃఆ͍ͨ͠ IPखಈͰઃఆ͍ͨ͠