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

はてなのインフラストラクチャ設計構想 / 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. ͸ͯͳͷΠϯϑϥετϥΫνϟ
    ઃܭߏ૝
    ϖύϘɾ͸ͯͳٕज़େձ
    ~ Πϯϑϥٕज़ج൫ ~ @෱Ԭɹɹɹɹɹid:masayoshi

    View Slide

  2. ΞδΣϯμ
    • ࣗݾ঺հ
    • ͸͡Ίʹ
    • ͸ͯͳγεςϜ
    • ͳͥ෼ղͱ࠶ߏஙΛϏδϣϯʹͨ͠ͷ͔?
    • ࣾ಺ߏ੒؅ཧπʔϧ
    • ෼ղͱ࠶ߏஙྫͷ঺հ
    • ΞʔΩςΫνϟͷ෼ղͱ࠶ߏங
    • ػೳͷ෼ղͱ࠶ߏங

    View Slide

  3. ࣗݾ঺հ
    • id:masayoshi
    • twitter: yoyogidesaiz
    • WebΦϖϨʔγϣϯΤϯδχΞ 2016೥ೖࣾ
    • ओʹωοτϫʔΫɺԾ૝αʔόج൫ํ໘ͷ୲౰

    View Slide

  4. ͸͡Ίʹ
    • ෼ղͱ࠶ߏஙʹΑ࣮ͬͯݱ͢ΔΠϯϑϥج൫ߏ૝Λ࿩͠·͢
    • y_uukiͷൃදΑΓ΋͏Ұา۩ମతͳ಺༰Λ࿩͠·͢
    • ͜͜Ͱ͍͏Πϯϑϥج൫͸ʮ͸ͯͳͷʯΠϯϑϥج൫Ͱ͢
    • ࣄۀ಺༰,ن໛ʹΑͬͯΠϯϑϥج൫͸େ͖͘ҟͳΓ·͢
    • ͥͻϖύϘɾ͸ͯͳͰͷҧ͍Λתೳ͍ͯͩ͘͠͞ʂ
    • SREຊ౳ΛಡΉͱGoogleͷΠϯϑϥج൫ʹ৮ΕΔ͜ͱ΋
    ग़དྷΔͰ͠ΐ͏
    ※1 https://landing.google.com/sre/book.html
    ※1

    View Slide

  5. ͸ͯͳγεςϜ

    View Slide

  6. ͸ͯͳγεςϜ
    • ෼ղͱ࠶ߏங
    • Repairable Infrastructure
    • ؍ଌͱ࣮ݧ
    • Experimental Infrastructure
    • ࠓճ͸ͪ͜Β͸ѻ͍·ͤΜ

    View Slide

  7. ͳͥզʑ͸෼ղͱ࠶ߏஙΛϏδϣϯʹͨ͠ͷ͔?

    View Slide

  8. 10೥ͷॏΈ
    • ઌఔͷฐࣾy_uukiͷʮ͸ͯͳγεςϜߏ૝ʯ
    • 10೥΋ͭʹ͸?
    • ࣾ಺αʔόߏ੒؅ཧπʔϧ
    • ࣮ࡍʹ10೥ࢧ͑ͨ͸ͯͳͷΠϯϑϥج൫ͷத਻
    • 2007೥ࠒ͔Β։ൃελʔτͨ͠
    • վળ͠ͳ͕Βདྷ͕ͨ৭ʑͭΒ͘ͳ͖ͬͯͨ

    View Slide

  9. ͪͳΈʹ2007೥͝Ζ(10೥લ)͸͜Μͳ࣌୅ʂʂ
    • CentOS5͕ϦϦʔε͞ΕΔ
    • Linux Kernel 2.60.20 ͕ϦϦʔε͞ΕKVM͕౷߹͞Εͨ
    • 2006೥ʹAWS S3, EC2͕αʔϏεఏڙ։࢝
    • ౦ژϦʔδϣϯ͸2011೥։ઃ
    • iPhoneॳ୅͕ൃച
    • Android౥ࡌͷܞଳి࿩ൃച͕2008೥

    View Slide

  10. 2007೥ʹ࡞੒͞Εͨࣾ಺αʔόߏ੒؅ཧπʔϧ
    • ϋΠύʔόΠβʔܕͷԾ૝Ϛγϯલఏͷߏ੒
    • σʔληϯλΛલఏʹͨ͠ઃܭ
    • ϥοΫྻͱ͔ిѹͱ͔
    • αʔϏεͱϩʔϧͷ૊Έ߹ΘͤʹΑΔαʔό؅ཧ
    • Hatena-Blog—DB, Hatena-Blog—Proxy
    • αʔϏε,ϩʔϧʹج͍ͮͨDNSϨίʔυͷੜ੒
    • db.hatena-blog.service.hosts 192.168.0.1
    • ωοτϫʔΫʹԠͨ͡IPΞυϨεͷ෷͍ग़͠
    • εςʔλε৘ใͷ؅ཧ(working, standby, maintenance,…)
    • ؂ࢹઃఆͷࣗಈઃఆ
    • αʔόຖʹϝτϦοΫΛRRDToolʹΑΔՄࢹԽ
    ·ͩ·ͩػೳ͸͋Δͧ!!!

    View Slide

  11. طଘͷࣾ಺αʔόߏ੒؅ཧπʔϧͷྑ͔ͬͨ఺
    • αʔϏεɾϩʔϧͱεςʔλεʹج͍༷ͮͨʑͳػೳ
    • DNSͷϨίʔυੜ੒
    • σϓϩΠઌαʔόͷಛఆ
    • ؂ࢹઃఆͷࣗಈԽɺ؂ࢹͷ௨஌on,off
    • ͸ͯͳͷΠϯϑϥج൫Λ10೥ࢧ͑ͨ
    • վमΛॏͶͯෛ࠴΋ଟ͍͕͔ͬ͠Γࢧ͑ͨ

    View Slide

  12. طଘͷࣾ಺αʔόߏ੒؅ཧπʔϧͷ໰୊఺
    • ઐଐͷϝϯςφʔෆࡏ໰୊
    • ࣾ಺πʔϧͷϝϯςφϯε͸์ஔ͞Ε͕ͪ
    • ߏ੒؅ཧπʔϧͰ͔͗͢Δ໰୊
    • શ෦͕ґଘ͍ͯͯ͠มߋͷίετ͕ߴ͍
    • ྑ͍OSS͕ग़ͨͱ͖ʹ͚ͦͩ͜Ҡߦ͢Δͷ͕೉͍͠
    • ωοτϫʔΫଆͷػೳͳͲΛ੝ΓࠐΈ͗ͨ͢

    View Slide

  13. ݱࡏͷࣾ಺αʔόߏ੒؅ཧπʔϧࣄ৘
    • MackerelΛαʔό؂ࢹαʔϏεͱͯ͠ϦϦʔε
    • ߏ੒؅ཧπʔϧͷྑ͍ͱ͜ΖΛ࢒͠ɺࣾ಺ࣄ৘Λഉআ
    • αʔϏεʹͳΕ͹ϝϯςφʔ΋ͭ͘ʂʂ
    • ʮࣾ಺੡ͷΞϓϦέʔγϣϯΛOSSʹ͢Δʯͱࣅͨٞ࿦
    • ͱ͸͍͑ࣾ಺ࣄ৘΋Πϯϑϥج൫Ͱ͸Χόʔ͢Δඞཁ͕͋Δ
    • MackerelΛ࢖͍ͭͭɺطଘͷߏ੒؅ཧπʔϧ΋ซ༻
    • ࣾ಺ࣄ৘ΛΧόʔ͢Δɺ࣍ͷ10೥Λࢧ͑Δ৽نΠϯϑ
    ϥج൫ͷ੔උ͕ඞཁ

    View Slide

  14. কདྷͷΠϯϑϥج൫ʹٻΊΒΕΔ͜ͱ
    • ઐଐͷϝϯςφϯε୲౰͕͚ͭΒΕͳ͍͜ͱ΋͋Δ
    • 10೥ઌΛݟӽͨ͠׬ᘳͳઃܭ͸΄΅ෆՄೳ
    • 3೥ఔ౓ͰϦϓϨʔε͢Δඞཁ͕͋Δ
    • શػೳΛશͯΛϦϓϨʔε͢Δඞཁ͸ͳ͍
    Ұ෦ػೳΛ3೥ఔ౓ͰϦϓϨʔεՄೳͳΠϯϑϥج൫
    Repairable Infrastructure

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. શମͷ࿦ཧϨΠϠʔߏ੒(৽)
    Resource
    Domestic Infrastructure
    Service Adapter
    Service Application 4FSWJDF" 4FSWJDF# 4FSWJDF$
    *OGSBTUSVDUVSF
    $MPVE )PVTJOH
    4FSWJDF"PS# 4FSWJDF$
    • Service Adapter ͰαʔϏεࠩҟΛٵऩ
    • Domestic Infrastructure Ͱࣾ಺ࣄ৘Λٵऩ
    • Resource ͸AWSɺΦϯϓϨ؀ڥɺαʔόϨεͷϦιʔεͳͲ

    View Slide

  21. Service Adapter LayerΛઃ͚ͨཧ༝
    • Πϯϑϥج൫ΛRepairableʹ͢ΔͨΊ
    • ಛఆαʔϏεͷҝ΁ͷ֦ுΛ܁Γฦ͢
    • αʔϏεͷมԽʹΠϯϑϥج൫͕௥͍͚ͭͳ͍
    • ΞϓϦέʔγϣϯ΋RepairableʹͳΔ
    • ୲౰ྖҬͷ໌֬Խ
    • ΞϓϦέʔγϣϯΤϯδχΞ͕Πϯϑϥࣾ಺ࣄ৘ͷ೺Ѳ͸ࠔ೉
    • ΠϯϑϥΤϯδχΞ͕֤αʔϏεͷίʔυঢ়گ೺Ѳ͸ࠔ೉
    • Service Adapter͸྆ऀ͕৮Δ

    View Slide

  22. %FCJBO
    %FCJBO
    αʔό಺ͷϨΠϠʔߏ੒
    • γεςϜ(OS)ʹΠϯετʔϧ͞Ε͍ͯΔ΋ͷΛར༻͢Δ
    • OSͷมߋͷࡍͷӨڹ͕େ͖͍ => RepairableͰ͸ͳ͍
    1FSM 1FSM
    "11 "11
    APP Layer
    OS Layer

    View Slide

  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

    View Slide

  24. αʔό಺ͷϨΠϠʔߏ੒
    • localͱsystemͷ෼཭Λ࣮ݱ͢ΔγεςϜ
    • rbenv, plenv, pyenv, mysqlenv,…..
    • chroot
    • ίϯςφٕज़
    • ্هͷதͰ΋chroot͕γϯϓϧ͔ͭ൚༻ੑ͕ߴ͍
    • docker͸ศར͕ͩɺ͜ͷͨΊ͚ͩʹ࢖͏ͷ͸ॏ͍
    • ίϯςφٕज़ͷҰ෦(namespace)ͱchrootͷ૊Έ߹Θͤ
    • => drootͷ։ൃ
    • ͜Ε͸ػೳͷ෼ղͱ࠶ߏஙͱ͍͑Δ

    View Slide

  25. ΞʔΩςΫνϟͷ෼ղͱ࠶ߏங
    • ͜ͷΑ͏ͳײ͡ͰΞʔΩςΫνϟΛ࠶ఆ͍ٛͯ͘͠
    • ෼ղͱ࠶ߏங͸ιϑτ΢ΣΞ΍ωοτϫʔΫΛࢀߟʹ

    View Slide

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

    View Slide

  27. ػೳͷ෼ղͱ࠶ߏங
    • ػೳͷ෼ղͱ࠶ߏங
    • ࠶ߏஙͨ͠ΞʔΩςΫνϟͷద߹͢ΔΑ͏ʹ෼ղ͠࠶ߏங
    • ద߹͢ΔOSS, ϚωʔδυαʔϏεΛ୳͢
    • ػೳ͕଍Γͳ͚Ε͹ + αͰ࣮૷͢Δ
    • ࣮૷ͷࡍʹ͸Repairable͔Ͳ͏͔ߟྀ࣮ͯ͠૷͢Δ
    • ࠶ͼ෼ղͱ࠶ߏங͕Ͱ͖Δ΋ͷ͔
    • ґଘϞδϡʔϧͷଟ͞ɺ࣮૷͕େม͞ͳͲ
    • কདྷద߹ͨ͠OSS͕ग़͖ͯͨͱ͖ʹҠߦͰ͖Δ͔

    View Slide

  28. ػೳͷ෼ղͱ࠶ߏஙྫ
    • droot
    • ฐࣾy_uukiͷൃදͰ͋ͬͨͷͰলུ
    • IP Drawer
    • IP෷͍ग़͠ػೳͷ࣮૷

    View Slide

  29. IP෷͍ग़͠ػೳ͕ཉ͔ͬͨ͠ཧ༝
    • Ծ૝αʔό࡞੒࣌ͷIPΞυϨεܾఆ
    • DHCPαʔόΛαʔϏεͷՄ༻ੑͰӡ༻ͨ͘͠ͳ͍
    • ΦϯϓϨ͸Ծ૝αʔό࡞੒࣌ʹݻఆʹ͍ͨ͠
    • EC2͸VPCͷDHCPͰ΍Γ͍ͨ
    • VIPͷܾఆ͸ਓ͕΍Γ͍ͨͷͰਓʹ΋෷͍ग़ͯ͠ཉ͍͠
    • طଘͷߏ੒؅ཧπʔϧ͔ΒIP෷͍ग़͠ػೳΛ෼཭͍ͨ͠
    • ෼ղͱ࠶ߏங
    • ඞཁͳͷ͸ओʹIPΞυϨεͷ෷͍ग़͠
    • DHCPαʔόͰREST APIରԠ͍ͯ͠Δͷ͕Kea͙Β͍ͩͬͨ
    • IP෷͍ग़ͯ͠ཉ͍͙͠Β͍ͩͬͨͷͰͰ͔ͦ͏ͩͬͨ
    • golangͱRedisͰαΫοͱΞϧόΠτʹ࡞ͬͯ΋Βͬͨ

    View Slide

  30. ࣮ࡍͷ࣮૷
    • IPΞυϨεͷ෷͍ग़͠͸RESTͰߦΘΕΔ
    • DHCPϓϩτίϧͷ࣮૷͸΍Βͳ͔ͬͨ
    • DHCP͔ΒͷҠߦָ͕ͩ͠ฒߦӡ༻ՄೳͰ࢖༻Λ΍ΊΔ͜ͱ΋೉͘͠ͳ͍

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

    View Slide

  31. ػೳͷ෼ղͱ࠶ߏங
    • ࠶ߏங͠ͳ͍Ͱద߹͢ΔͳΒͦΕΛར༻͢Δ
    • μϝͦ͏ͳΒࣾ಺ࣄ৘Λߟྀ͠ɺബ͍࣮૷Λ͢Δ
    • Domestic Infrastructure Layer͸ബ͘
    • ద߹͢Δ΋ͷ͸ੵۃతʹ Resource LayerͰ
    • ୤ग़ɺϑϧεΫϥονͷେม͞Λߟྀ࣮͠૷ΛબͿ

    View Slide

  32. ·ͱΊ
    • ϏδϣϯΛࣔ͢͜ͱʹΑΓઓུతʹվળΛ͢Δ
    • ݱࡏ͸෼ղͱ࠶ߏஙʹΑΓΞʔΩςΫνϟͳͲΛఆٛ
    • ΞʔΩςΫνϟʹैͬͯػೳͷ෼ղͱ࠶ߏங
    • ػೳͷ੾Γग़͠Λ͢Δ͔ͳͲͷ൑அج४ʹ
    • ࠓޙ͸؍ଌͱ࣮ݧ΋ճͯ͠ߦ͖͍ͨ
    • MackerelΛ࠷େݶར༻ͨ͠؍ଌ
    • ࣮ݧͱϑΟʔυόοΫ੍ޚ

    View Slide