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

負荷分散技術を選ぶときに考えること

 負荷分散技術を選ぶときに考えること

ペパボはてな技術大会(京都)発表資料

masayoshi
PRO

July 04, 2016
Tweet

More Decks by masayoshi

Other Decks in Technology

Transcript

  1. ෛՙ෼ࢄٕज़Λ
    બͿͱ͖ʹߟ͑Δ͜ͱ
    ϖύϘ͸ͯͳٕज़େձ ژ౎

    גࣜձࣾ͸ͯͳ
    JENBTBZPTIJ

    View Slide

  2. ຊ೔ͷൃද
    • ࣗݾ঺հ
    • ෛՙ෼ࢄͷ֓ཁ
    • αʔό಺Ϧιʔεຖͷෛՙ෼ࢄ
    • ϩʔϧຖʹෛՙ෼ࢄ
    • αʔόຖͷෛՙ෼ࢄ
    • ෛՙ෼ࢄٕज़ͷબͼํͱ·ͱΊ

    View Slide

  3. 1
    ࣗݾ঺հ

    View Slide

  4. View Slide

  5. ID: masayoshi
    Twitter: yoyogidesaiz
    ৽ଔ 2016೥4݄
    ΢ΣϒΦϖϨʔγϣϯΤϯδχΞ

    View Slide

  6. • େֶ
    • ωοτϫʔΫܥͷݚڀ
    • SDN(Software-Defined Networking)
    • ΞϧόΠτͰαʔό؂ࢹۀ຿
    • ࢓ࣄ
    • ωοτϫʔΫ͕த৺
    • αʔϏε͕Քಇ͍ͯ͠Δαʔό΋ݟΔ

    View Slide

  7. 2
    ෛՙ෼ࢄٕज़ͷ֓ཁ

    View Slide

  8. %BUB$FOUFS
    %BUB$FOUFS
    6TFS
    1SPYZ
    8FC
    -PBE#BMBODFS
    4FSWFS
    8FC
    %#
    ଎͍ ஗͍

    View Slide

  9. ෛՙ෼ࢄͷछྨ
    • αʔό಺Ϧιʔεͷෛՙ෼ࢄ
    • ϩʔϧ͝ͱͷෛՙ෼ࢄ
    • αʔό͝ͱͷෛՙ෼ࢄ

    View Slide

  10. 3
    αʔό಺Ϧιʔεͷ
    ෛՙ෼ࢄ

    View Slide

  11. %BUB$FOUFS
    %BUB$FOUFS
    6TFS
    1SPYZ
    8FC
    -PBE#BMBODFS
    4FSWFS
    8FC
    %#
    ଎͍ ஗͍

    View Slide

  12. αʔό಺Ϧιʔεͷෛՙ෼ࢄٕज़
    • ϋʔυ΢ΣΞػೳ
    • Hyper-ThreadingɺRAID0ͳͲ
    • ϋʔυ΢ΣΞΛҙࣝͨ͠OSͷෛՙ෼ࢄػೳ
    • NUMAɺRSS/RFS/RPSͳͲ
    • OSΛҙࣝͨ͠ΞϓϦέʔγϣϯͷ࡞Γํ
    • fork()ɺclone()ͳͲͷγεςϜίʔϧ

    View Slide

  13. ϝϞϦίϯτϩʔϥ
    /6."/PEF
    ϝϞϦίϯτϩʔϥ
    /6."/PEF
    σʔλ

    View Slide

  14. ϓϩηε
    εϨου
    ϓϩηε
    GPSL

    DMPOF

    ϓϩηε
    TFMFDU

    View Slide

  15. ϓϩηε
    εϨου
    ϓϩηε
    GPSL

    DMPOF

    ϓϩηε
    TFMFDU

    • fork(), clone()
    • task_tܕߏ଄ମΛෳ੡͢Δ
    • task_tܕߏ଄ମΛεέδϡʔϦϯάͯ͠CPUʹׂ౰
    • select(), epoll()
    • ϑΝΠϧσΟεΫϦϓλ(fd)Λ؂ࢹ͢Δ(IOଟॏԽ)
    • ಡΈॻ͖Ͱ͖Δfd͕͋Ε͹fdΛฦ͢

    View Slide

  16. Α͋͘Δ͜ͱ
    top - 13:41:45 up 88 days, 15:26, 1 user, load average: 0.79, 0.78, 0.77
    Tasks: 117 total, 2 running, 115 sleeping, 0 stopped, 0 zombie
    %Cpu0 : 95.9 us, 0.0 sy, 0.0 ni, 3.1 id, 0.0 wa, 0.0 hi, 1.0 si, 0.0 st
    %Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    %Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    %Cpu3 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    %Cpu4 : 0.0 us, 1.0 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    %Cpu5 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    %Cpu6 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    %Cpu7 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

    View Slide

  17. Ϧιʔεຖͷෛՙ෼ࢄٕज़
    • ϋʔυ΢ΣΞػೳͱϋʔυ΢ΣΞΛҙࣝͨ͠OSػೳ
    • ରԠ͍ͯ͠Ε͹ػೳΛONʹ͢Δ͚ͩ(͓खܰ)
    • ྑ͘΋ѱ͘΋Ӆṭ͞Ε͍ͯΔ(ௐࠪ͸ࠔ೉)
    • ΞϓϦέʔγϣϯ࣮૷
    • OSɺγεςϜίʔϧ΁ͷཧղ
    • ಛʹϛυϧ΢ΣΞͷ࣮૷Λҙࣝ͢Δ
    • OS͕ϦιʔεΛ෼ࢄ͠΍͍͢ίʔυΛॻ͘(೉͍͠)

    View Slide

  18. 4
    ϩʔϧຖͰͷ෼ࢄ

    View Slide

  19. %BUB$FOUFS
    %BUB$FOUFS
    6TFS
    1SPYZ
    8FC
    -PBE#BMBODFS
    4FSWFS
    8FC
    %#
    ଎͍ ஗͍

    View Slide

  20. 6TFS
    1SPYZ 8FC %#
    ଎͍ ஗͍
    %#.4
    ΫΤϦΩϟογϡ
    ಈతϖʔδ
    Ωϟογϡ
    ੩తϑΝΠϧ

    View Slide

  21. ϩʔϧຖͷෛՙ෼ࢄٕज़
    • Ϣʔβʹ͍ۙͱ͜ΖͰฦ͍ͯ͘͠
    • جຊతʹ͸Ωϟογϡ
    • ࢖͍Ͳ͜ΖΛݟۃΊΔ
    • ΩϟογϡʹཔΓա͗ͳ͍
    • Ωϟογϡ͕ώοτ͠ͳͯ͘ഁ୼
    • ߏ੒΍࣮૷͕ແཧ͠ա͗ͳ͍ఔ౓ʹ࢖͏

    View Slide

  22. 5
    αʔόຖͷෛՙ෼ࢄ

    View Slide

  23. %BUB$FOUFS
    %BUB$FOUFS
    6TFS
    1SPYZ
    8FC
    -PBE#BMBODFS
    4FSWFS
    8FC
    %#
    ଎͍ ஗͍

    View Slide

  24. αʔόຖͷෛՙ෼ࢄ
    • ෛՙ෼ࢄٕज़Λ࣮ݱ͢Δʹ͸…
    • ෼ࢄγεςϜͷߟ͑ํΛࢀߟʹ͢Δ
    • ౰વͱ͍͑͹౰વ͕ͩ…
    • ಛʹαʔόͷෛՙ෼ࢄͰ͸ద༻͠΍͍͢

    View Slide

  25. • ن໛ಁաੑ
    • εέʔϥϏϦςΟ
    • Ґஔಁաੑ
    • Ϧιʔεͷ৔ॴΛҙࣝͤͣಉ͡ํ๏ͰΞΫηε
    • Կ͔͠Βͷ໊લղܾͷ࢓૊Έ͕ඞཁ
    • ো֐ಁաੑ
    • ো֐͕ൃੜͯ͠΋มΘΓͳ͘ΞΫηεՄೳ
    • ো֐Λݕ஌͢Δ࢓૊Έ͕ඞཁ

    View Slide

  26. DNSϥ΢ϯυϩϏϯ
    • ൺֱత༰қʹҐஔಁաੑΛ࣮ݱ
    • ෼ࢄઌϊʔυͷϔϧενΣοΫ͸ͳ͍
    • ΫϥΠΞϯτ࣮૷͕ීٴ
    • ΫϥΠΞϯτͷ઀ଓઌΛ௚઀෼ࢄͤ͞Δ͜ͱ͕Մೳ
    FYBNQMFDPN


    View Slide

  27. ϩʔυόϥϯα
    • L4ͳΒIP,ϙʔτͰҐஔಁաੑ͕͋Δ
    • ෼ࢄઌϊʔυͷϔϧενΣοΫ͕Մೳ
    • ωοτϫʔΫͷ੍ݶΛड͚Δ



    View Slide

  28. Proxy
    • HAProxyͱ͔NginxͳͲ͕ίωΫγϣϯΛऴ୺͠෼ࢄ
    • ऴ୺͠ͳ͍L7ϩʔυόϥϯα΋͋Δ͕ॲཧෛՙ͕ߴ͍
    • ϔϧενΣοΫ΋Ͱ͖ɺҐஔಁաੑ΋ߴ͍
    IUUQXXXFYBNQMFDPN


    1SPYZ

    View Slide

  29. ෼ࢄઌϊʔυͷϔϧενΣοΫ
    • ϔϧενΣοΫ
    • Proxy,LBͳͲ͕෼ࢄઌϊʔυΛ؂ࢹ
    • ໰୊͕͋ΔϊʔυΛ෼ࢄઌϊʔυϦετ͔Β࡟আ
    IUUQXXXFYBNQMFDPN


    1SPYZ

    View Slide

  30. ෼ࢄઌϊʔυͷϔϧενΣοΫ
    • ϔϧενΣοΫ
    • Proxy,LBͳͲ͕෼ࢄઌϊʔυΛ؂ࢹ
    • ໰୊͕͋ΔϊʔυΛ෼ࢄઌϊʔυϦετ͔Β࡟আ
    IUUQXXXFYBNQMFDPN


    1SPYZ
    Ͳ͏΍ͬͯ
    ໰୊ͬͯԿ
    ϔϧενΣοΫ͢Δ૷ஔ͕
    ނোͨ͠Β

    View Slide

  31. ϔϧενΣοΫ೉͍͠໰୊
    • ࣮૷ɺઃܭڞʹ೉͍͠
    • ͲͷϨΠϠʔ·Ͱ࣮૷͢Δ͔
    • ICMPͰL3νΣοΫ?
    • L7ͰHTTPνΣοΫ?

    View Slide

  32. ϔϧενΣοΫ೉͍͠໰୊
    • Ԡ౴͸ਖ਼͍͠ͷ͔?
    • OKͱฦ͍ͯ͠Δϊʔυ͸ຊ౰ʹOK͔ʁԠ౴͸ਖ਼
    ͍͠ͷ͔ʁ
    • Ϗβϯνϯক܉໰୊
    • Gossip Protocol
    • ϥϯμϜʹྡ઀ϊʔυΛબͼ৘ใΛ఻͑Δ
    • ϥϯμϜʹબΜͩෳ਺ϊʔυ͔ΒϔϧενΣοΫ

    View Slide

  33. ϩʔυόϥϯαͷ଱ো֐ੑ
    • VRRPͱ͔Α͘࢖ΘΕΔ
    • ৑௕Խٕज़Ͱ͋Γɺෛՙ෼ࢄٕज़Ͱ͸ͳ͍
    • Ұ୆͸ϗοτελϯόΠঢ়ଶ(ॲཧ͸͍ͯ͠ͳ͍)
    7331

    View Slide

  34. ΫϥελγεςϜ
    • ༷ʑͳύλʔϯ͕͋Δ͕ྫ͑͹…
    • ෛՙ෼ࢄΛ͢ΔϦʔμ
    • ͦΕҎ֎ͷϊʔυʹॲཧΛ෼ࢄ
    • Ϧʔμ͕ނো࣌͸৽ͨͳϦʔμΛબग़
    • ίϯηϯαεΞϧΰϦζϜ

    View Slide

  35. ෛՙ෼ࢄٕज़ͷબͼํͱ
    ·ͱΊ

    View Slide

  36. ෛՙ෼ࢄٕज़ͷબͿͱ͖ʹߟ͑Δ͜ͱ
    • ෛՙ෼ࢄٕज़͸૊Έ߹Θͤͯ࢖͏
    • ඞཁҎ্ʹෳࡶʹ͠ͳ͍
    • ෛՙ෼ࢄ͕ඞཁͳͷ͔࠶ߟ͢Δ

    View Slide

  37. ෛՙ෼ࢄٕज़͸૊Έ߹Θͤͯ࢖͏
    • αʔό಺ͷෛՙ෼ࢄٕज़
    • RFSΛ༗ޮʹͯ͠soft irqΛϚϧνίΞε
    έʔϧ
    • auto NUMAΛ༗ޮʹ͢Δ
    • Prefork,eventܕϛυϧ΢ΣΞͰίωΫγϣ
    ϯΛ͞͹͘

    View Slide

  38. ෛՙ෼ࢄٕज़͸૊Έ߹Θͤͯ࢖͏
    • ϩʔϧຖͷෛՙ෼ࢄٕज़
    • ProxyͰ੩తϑΝΠϧΛฦ͢
    • ΩϟογϡαʔόʹಈతϖʔδΛΩϟογϡͤ͞Δ
    • ώοτ͢Ε͹ฦ͢
    • ώοτ͠ͳ͍ͳΒDBʹ໰͍߹ΘͤΔ
    • DBαʔόͰ͸ΫΤϦΩϟογϡΛ༗ޮʹ͢Δ

    View Slide

  39. ෛՙ෼ࢄٕज़͸૊Έ߹Θͤͯ࢖͏
    • αʔόෛՙ෼ࢄٕज़
    • LBΛಋೖ͢Δ
    • Ґஔಁաੑͷ֬อ
    • DNS
    • ো֐ಁաੑͷ֬อ
    • Gossip ProrocolͰϔϧενΣοΫͱϊʔυ؅ཧ
    • ίϯηϯαεΞϧΰϦζϜͰϦʔμબग़

    View Slide

  40. ඞཁҎ্ʹෳࡶʹ͠ͳ͍
    • ෳࡶͰ͋Δ͜ͱ͸ѱ
    • ίετͷ૿Ճ
    • αʔόඅ༻ͷ૿Ճ
    • ؅ཧίετͷ૿Ճ
    • ো֐ൃੜ཰ͷ૿Ճ

    View Slide

  41. ෛՙ෼ࢄ͕ඞཁͳͷ͔࠶ߟ͢Δ
    • ෛՙΛݮΒ͢
    • ΞϧΰϦζϜɺSQLΫΤϦվળ
    • վળग़དྷͨͱ͖ͷݟฦΓ͕େ͖͍
    • ॲཧ଎౓Λ͋͛Δ
    • ίετ͕ݟ߹͏ͳΒεέʔϧΞοϓ
    • ଴ͪߦྻཧ࿦
    • ͦΕͰ΋ͩΊͳΒෛՙΛ෼ࢄ͢Δ

    View Slide

  42. ·ͱΊ
    • ෛՙ෼ࢄٕज़͸૊Έ߹ΘͤΔ
    • Ϧιʔεɺϩʔϧɺαʔό
    • ֤ʑͷ෼ࢄٕज़ͷಁաੑΛߟ͑Δ
    • Ґஔಁաੑɺো֐ಁաੑͳͲ
    • ෛՙ෼ࢄΛ͢΂͖͔Λߟ͑Δ
    • ෛՙ෼ࢄ͠ͳͯ͘ࡁΉͳΒͦΕ͕Ұ൪

    View Slide