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

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

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

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

5e811ea39e141c433cdd961bbaa03122?s=128

masayoshi

July 04, 2016
Tweet

Transcript

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

  2. ຊ೔ͷൃද • ࣗݾ঺հ • ෛՙ෼ࢄͷ֓ཁ • αʔό಺Ϧιʔεຖͷෛՙ෼ࢄ • ϩʔϧຖʹෛՙ෼ࢄ •

    αʔόຖͷෛՙ෼ࢄ • ෛՙ෼ࢄٕज़ͷબͼํͱ·ͱΊ
  3. 1 ࣗݾ঺հ

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

  6. • େֶ • ωοτϫʔΫܥͷݚڀ • SDN(Software-Defined Networking) • ΞϧόΠτͰαʔό؂ࢹۀ຿ •

    ࢓ࣄ • ωοτϫʔΫ͕த৺ • αʔϏε͕Քಇ͍ͯ͠Δαʔό΋ݟΔ
  7. 2 ෛՙ෼ࢄٕज़ͷ֓ཁ

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

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

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

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

    ஗͍
  12. αʔό಺Ϧιʔεͷෛՙ෼ࢄٕज़ • ϋʔυ΢ΣΞػೳ • Hyper-ThreadingɺRAID0ͳͲ • ϋʔυ΢ΣΞΛҙࣝͨ͠OSͷෛՙ෼ࢄػೳ • NUMAɺRSS/RFS/RPSͳͲ •

    OSΛҙࣝͨ͠ΞϓϦέʔγϣϯͷ࡞Γํ • fork()ɺclone()ͳͲͷγεςϜίʔϧ
  13. ϝϞϦίϯτϩʔϥ /6."/PEF ϝϞϦίϯτϩʔϥ /6."/PEF σʔλ

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

  15. ϓϩηε εϨου ϓϩηε GPSL DMPOF ϓϩηε TFMFDU • fork(), clone()

    • task_tܕߏ଄ମΛෳ੡͢Δ • task_tܕߏ଄ମΛεέδϡʔϦϯάͯ͠CPUʹׂ౰ • select(), epoll() • ϑΝΠϧσΟεΫϦϓλ(fd)Λ؂ࢹ͢Δ(IOଟॏԽ) • ಡΈॻ͖Ͱ͖Δfd͕͋Ε͹fdΛฦ͢
  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
  17. Ϧιʔεຖͷෛՙ෼ࢄٕज़ • ϋʔυ΢ΣΞػೳͱϋʔυ΢ΣΞΛҙࣝͨ͠OSػೳ • ରԠ͍ͯ͠Ε͹ػೳΛONʹ͢Δ͚ͩ(͓खܰ) • ྑ͘΋ѱ͘΋Ӆṭ͞Ε͍ͯΔ(ௐࠪ͸ࠔ೉) • ΞϓϦέʔγϣϯ࣮૷ •

    OSɺγεςϜίʔϧ΁ͷཧղ • ಛʹϛυϧ΢ΣΞͷ࣮૷Λҙࣝ͢Δ • OS͕ϦιʔεΛ෼ࢄ͠΍͍͢ίʔυΛॻ͘(೉͍͠)
  18. 4 ϩʔϧຖͰͷ෼ࢄ

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

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

    ੩తϑΝΠϧ
  21. ϩʔϧຖͷෛՙ෼ࢄٕज़ • Ϣʔβʹ͍ۙͱ͜ΖͰฦ͍ͯ͘͠ • جຊతʹ͸Ωϟογϡ • ࢖͍Ͳ͜ΖΛݟۃΊΔ • ΩϟογϡʹཔΓա͗ͳ͍ •

    Ωϟογϡ͕ώοτ͠ͳͯ͘ഁ୼ • ߏ੒΍࣮૷͕ແཧ͠ա͗ͳ͍ఔ౓ʹ࢖͏
  22. 5 αʔόຖͷෛՙ෼ࢄ

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

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

  25. • ن໛ಁաੑ • εέʔϥϏϦςΟ • Ґஔಁաੑ • Ϧιʔεͷ৔ॴΛҙࣝͤͣಉ͡ํ๏ͰΞΫηε • Կ͔͠Βͷ໊લղܾͷ࢓૊Έ͕ඞཁ

    • ো֐ಁաੑ • ো֐͕ൃੜͯ͠΋มΘΓͳ͘ΞΫηεՄೳ • ো֐Λݕ஌͢Δ࢓૊Έ͕ඞཁ
  26. DNSϥ΢ϯυϩϏϯ • ൺֱత༰қʹҐஔಁաੑΛ࣮ݱ • ෼ࢄઌϊʔυͷϔϧενΣοΫ͸ͳ͍ • ΫϥΠΞϯτ࣮૷͕ීٴ • ΫϥΠΞϯτͷ઀ଓઌΛ௚઀෼ࢄͤ͞Δ͜ͱ͕Մೳ FYBNQMFDPN

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

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

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

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

    1SPYZ Ͳ͏΍ͬͯ ໰୊ͬͯԿ ϔϧενΣοΫ͢Δ૷ஔ͕ ނোͨ͠Β
  31. ϔϧενΣοΫ೉͍͠໰୊ • ࣮૷ɺઃܭڞʹ೉͍͠ • ͲͷϨΠϠʔ·Ͱ࣮૷͢Δ͔ • ICMPͰL3νΣοΫ? • L7ͰHTTPνΣοΫ?

  32. ϔϧενΣοΫ೉͍͠໰୊ • Ԡ౴͸ਖ਼͍͠ͷ͔? • OKͱฦ͍ͯ͠Δϊʔυ͸ຊ౰ʹOK͔ʁԠ౴͸ਖ਼ ͍͠ͷ͔ʁ • Ϗβϯνϯক܉໰୊ • Gossip

    Protocol • ϥϯμϜʹྡ઀ϊʔυΛબͼ৘ใΛ఻͑Δ • ϥϯμϜʹબΜͩෳ਺ϊʔυ͔ΒϔϧενΣοΫ
  33. ϩʔυόϥϯαͷ଱ো֐ੑ • VRRPͱ͔Α͘࢖ΘΕΔ • ৑௕Խٕज़Ͱ͋Γɺෛՙ෼ࢄٕज़Ͱ͸ͳ͍ • Ұ୆͸ϗοτελϯόΠঢ়ଶ(ॲཧ͸͍ͯ͠ͳ͍) 7331

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

    ίϯηϯαεΞϧΰϦζϜ
  35. ෛՙ෼ࢄٕज़ͷબͼํͱ ·ͱΊ

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

  37. ෛՙ෼ࢄٕज़͸૊Έ߹Θͤͯ࢖͏ • αʔό಺ͷෛՙ෼ࢄٕज़ • RFSΛ༗ޮʹͯ͠soft irqΛϚϧνίΞε έʔϧ • auto NUMAΛ༗ޮʹ͢Δ

    • Prefork,eventܕϛυϧ΢ΣΞͰίωΫγϣ ϯΛ͞͹͘
  38. ෛՙ෼ࢄٕज़͸૊Έ߹Θͤͯ࢖͏ • ϩʔϧຖͷෛՙ෼ࢄٕज़ • ProxyͰ੩తϑΝΠϧΛฦ͢ • ΩϟογϡαʔόʹಈతϖʔδΛΩϟογϡͤ͞Δ • ώοτ͢Ε͹ฦ͢ •

    ώοτ͠ͳ͍ͳΒDBʹ໰͍߹ΘͤΔ • DBαʔόͰ͸ΫΤϦΩϟογϡΛ༗ޮʹ͢Δ
  39. ෛՙ෼ࢄٕज़͸૊Έ߹Θͤͯ࢖͏ • αʔόෛՙ෼ࢄٕज़ • LBΛಋೖ͢Δ • Ґஔಁաੑͷ֬อ • DNS •

    ো֐ಁաੑͷ֬อ • Gossip ProrocolͰϔϧενΣοΫͱϊʔυ؅ཧ • ίϯηϯαεΞϧΰϦζϜͰϦʔμબग़
  40. ඞཁҎ্ʹෳࡶʹ͠ͳ͍ • ෳࡶͰ͋Δ͜ͱ͸ѱ • ίετͷ૿Ճ • αʔόඅ༻ͷ૿Ճ • ؅ཧίετͷ૿Ճ •

    ো֐ൃੜ཰ͷ૿Ճ
  41. ෛՙ෼ࢄ͕ඞཁͳͷ͔࠶ߟ͢Δ • ෛՙΛݮΒ͢ • ΞϧΰϦζϜɺSQLΫΤϦվળ • վળग़དྷͨͱ͖ͷݟฦΓ͕େ͖͍ • ॲཧ଎౓Λ͋͛Δ •

    ίετ͕ݟ߹͏ͳΒεέʔϧΞοϓ • ଴ͪߦྻཧ࿦ • ͦΕͰ΋ͩΊͳΒෛՙΛ෼ࢄ͢Δ
  42. ·ͱΊ • ෛՙ෼ࢄٕज़͸૊Έ߹ΘͤΔ • Ϧιʔεɺϩʔϧɺαʔό • ֤ʑͷ෼ࢄٕज़ͷಁաੑΛߟ͑Δ • Ґஔಁաੑɺো֐ಁաੑͳͲ •

    ෛՙ෼ࢄΛ͢΂͖͔Λߟ͑Δ • ෛՙ෼ࢄ͠ͳͯ͘ࡁΉͳΒͦΕ͕Ұ൪