こんなこともあろうかと、 サーバーは予め増やして置いた 〜アクセス頻度予測を用いてサーバーを自動増減する「計画的スケーリング」その後〜 / LINE Developer Meetup #32

こんなこともあろうかと、 サーバーは予め増やして置いた 〜アクセス頻度予測を用いてサーバーを自動増減する「計画的スケーリング」その後〜 / LINE Developer Meetup #32

LINE Developer Meetup #32 https://line.connpass.com/event/83597/

C84357a21083c81c5ccd5550422abc8d?s=128

Ryo Takaishi

April 25, 2018
Tweet

Transcript

  1. ∁ੴྒ / GMO Pepabo, Inc. 2018-04-24 LINE Developer Meetup #32

    ʙΞΫηεස౓༧ଌΛ༻͍ͯαʔόʔΛࣗಈ૿ݮ͢ΔʮܭըతεέʔϦϯάʯͦͷޙʙ ͜Μͳ͜ͱ΋͋Ζ͏͔ͱɺ αʔόʔ͸༧Ί૿΍ͯ͠ஔ͍ͨ
  2. ιϑτ΢ΣΞΤϯδχΞ ∁ੴ ྒ / @r_takaishi https://repl.info/ TAKAISHI Ryo ٕज़෦ ٕज़ج൫νʔϜ

  3. ΩϟύγςΟϓϥϯχϯά

  4. μ΢ϯ͠ͳ͍ෛՙΛ͞͹͘  ແବͳ͘ద੾ͳϦιʔεΛ഑ஔ͢Δ

  5. !5 • ϐʔΫλΠϜʹ͋Θͤͯ୆਺Λܾఆ • ϝσΟΞ࿐ग़ɾΩϟϯϖʔϯ࣌ʹ͸ݸผʹ૿ઃ ΞϓϦέʔγϣϯαʔόʔͷ৔߹@minne

  6. !6 ϐʔΫλΠϜʹ͋Θͤͯ୆਺Λઃఆ͢Δ৔߹        

      ࣌ؒ             ΞΫηεස౓ʢਖ਼نԽࡁʣ αʔόʔ୆਺
  7. ΞΫηε͕গͳ͍࣌ؒ͸αʔόʔ ୆਺Λ͍͍ײ͡ʹݮΒ͍ͨ͠

  8. ΞΫηε͕ଟ͍࣌ؒ͸ͦΕΛࡹ͚ ΔΑ͏ͳαʔόʔ୆਺ʹ͍ͨ͠

  9. ෛՙʹԠͯ͡ Φʔτεέʔϧ͢Ε͹͍͍

  10. !10 • ϐʔΫ࣌ͷෛՙ͸ॠؒతʹൃੜ͢ΔͨΊɺݕ஌ͯ͠ ͔ΒͷεέʔϧΞ΢τͰ͸ؒʹ߹Θͳ͍ • αʔόʔͷىಈʙαʔϏεΠϯʹ͔͔ΔλΠϜϥά • Ծ૝Ϛγϯͷىಈ • ىಈ࣌ʹ࠷৽ͷΞϓϦέʔγϣϯίʔυΛσϓϩΠ

    ෛՙΛݕ஌ͯ͠Φʔτεέʔϧ͢Δख๏
  11. ͳ͔ͳ͔೉͍͠ʜ

  12. ͱࢥ͍ͬͯͨΒɺ೥ͷ಄ʹ

  13. ͍͍΋ͷ͋ΔΑ…ʂ

  14. ࡾ୐ݚڀॴһʹΑΔ ఏҊख๏

  15. ΞΫηεස౓༧ଌΛ༻͍ͨ ܭըతεέʔϦϯά

  16. ͜Ε·Ͱ஝ੵ͖ͯͨ͠ ΞΫηεϩάΛ࢖ͬͯ ະདྷͷΞΫηεස౓Λ༧ଌ͢Δ

  17. ࣄલʹΞΫηεස౓͕Θ͔Ε͹ɺ ඞཁͳαʔόʔ୆਺΋Θ͔Δ

  18. • minneͰ͸ΞΫηεϩάɾߦಈϩάΛอଘ͍ͯ͠Δ • ྫ͑͹աڈ1ϲ݄ؒɺ1࣌ؒ୯ҐͷΞΫηεස౓͕Θ͔Δ • ͜ͷ࣌ܥྻσʔλΛ༻͍ͯɺະདྷͷΞΫηεස౓Λ༧ଌ͢Δ • ࣄલʹΞΫηεස౓͕Θ͔Ε͹ɺॲཧՄೳͳ୆਺ʹ૿ݮͰ͖Δ !18 Ͳ͏͍͏΋ͷ͔ͬ͘͟Γ

  19. • minneͰ͸ΞΫηεϩάɾߦಈϩάΛอଘ͍ͯ͠Δ • ྫ͑͹աڈ1ϲ݄ؒɺ1࣌ؒ୯ҐͷΞΫηεස౓͕Θ͔Δ • ͜ͷ࣌ܥྻσʔλΛ༻͍ͯɺະདྷͷΞΫηεස౓Λ༧ଌ͢Δ • ࣄલʹΞΫηεස౓͕Θ͔Ε͹ɺॲཧՄೳͳ୆਺ʹ૿ݮͰ͖Δ !19 Ͳ͏͍͏΋ͷ͔ͬ͘͟Γ

    ࠓ೔࿩͢ͷ͸ɺಛʹ͜ͷ෦෼
  20. !20 ϩάऩू෦෼͕ؾʹͳΔํ͸εϥΠυΛνΣοΫʂ IUUQTTQFBLFSEFDLDPNNPOPDISPNFHBOFQFQBCPMPHJOGSBTUSVDUVSFCJHGPPU

  21. !21 ༧ଌʹ͍ͭͯؾʹͳΔํ͸ϖύݚϒϩάΛνΣοΫʂ IUUQTSBOEQFQBCPDPNBSUJDMFJPUNJZBLFZ

  22. ͱ͍͏Θ͚Ͱ ࡞͍ͬͯͧ͘

  23. !23 • ΞΫηεස౓༧ଌ܅ʢϖύݚʣ • αʔόʔ୆਺ܭࢉɾ૿ݮ܅ʢminneʣ ඞཁͳίϯϙʔωϯτ͸Կ͔ʁ

  24. !24 ͜Ε͕ܭըతεέʔϦϯάͷߏ੒ͩʂ cron Redis ΞΫηεස౓༧ଌ܅ (Sidekiq) IaaS API Endpoint ༧ଌΞΫηε਺ͷऔಘ

    ఆظ࣮ߦ αʔόʔ୆਺ܭࢉɾ૿ݮ܅ (hakata) ඞཁαʔόʔ୆਺Λܭࢉɾ૿ݮ ༧૝ΞΫηεස౓Λอଘ
  25. !25 ܭըతεέʔϦϯάͷྲྀΕ ࣌ ࣌ ࣌ ࣌ ຖ೔0࣌ա͗ɿ 1೔෼ͷΞΫηεස౓Λ༧ଌ͢ΔΑ ຖ࣌40෼࣌ա͗ɿ ࣍ͷ1࣌ؒͷΞΫηεස౓༧ଌ͔Βαʔόʔ୆਺Λ૿ݮ͢ΔΑ

  26. • ༧ଌΞΫηεස౓(ϦΫΤετ਺/࣌)Λϕʔεͱ͢Δ • αʔόʔ͕ৗʹҰఆͷεϧʔϓοτ(rpm)Λอͭ୆਺Λ໨ࢦ͢ • εϧʔϓοτظ଴஋(rpm)͸NewRelicͷϝτϦΫε͔Βࢉग़ !26 ඞཁαʔόʔ਺ͷܭࢉ ඞཁ୆਺༧ଌΞΫηεස౓εϧʔϓοτظ଴஋

  27. !27 • ༧ଌΞΫηεස౓ɿ60,000 ϦΫΤετ/࣌ • εϧʔϓοτظ଴஋ɿ1,000 rpm αʔόʔ୆਺ܭࢉͷྫ ඞཁ୆਺༧ଌΞΫηεස౓εϧʔϓοτظ଴஋ 

      
  28. • ʮΞΫηεස౓༧ଌʯͱʮϦιʔεྔܭࢉɾ૿ݮʯͷ2͕ͭඞཁ • ΞΫηεස౓༧ଌ͸1೔ʹ1ճ • Ϧιʔε૿ݮͷλΠϛϯά͸1࣌ؒʹ1ճ • Ϧιʔεྔܭࢉ͸༧ଌ஋ͱεϧʔϓοτظ଴஋Λݩʹܭࢉ !28 ܭըతεέʔϦϯάͷઃܭ·ͱΊ

  29. ධՁɾ՝୊

  30. !30 ΞϓϦέʔγϣϯαʔόʔͷCPU࢖༻཰ ܭըతεέʔϧɿແޮ ܭըతεέʔϧɿ༗ޮ

  31. !31 ΞϓϦέʔγϣϯαʔόʔ୆਺ͷભҠ ܭըతεέʔϧɿແޮ ܭըతεέʔϧɿ༗ޮ

  32. ݁ߏ͍͍͔Μ͡ʹಈ͍͕ͨʜ

  33. ͍͔ͭ͘՝୊΋

  34. !34 • ༧ଌͷਫ਼౓௿ԼʹΑΔϦιʔεෆ଍ • ༧ଌʹݱΕͳ͍ΞΫηε΁ͷରԠ • εέʔϧΞ΢τ͕ؒʹ߹Θͳ͍έʔε ՝୊

  35. ͜͜·Ͱ͸೥ͷ࿩

  36. ผ࡞ۀͷͨΊɺ Ұ࣌తʹఀࢭ͍ͯͨ͠

  37. ݄ࠒ͔Βվળʹணख

  38. εέʔϧΞ΢τ ͕ؒʹ߹Θͳ͍໰୊

  39. !39 • αʔόʔىಈ࣌ʹΞϓϦέʔγϣϯͷίʔυΛऔಘɾ ల։͓ͯ͠ΓɺϘτϧωοΫͱͳ͍ͬͯΔ • ࠷৽Πϝʔδ ≠ ࠷৽ΞϓϦ • ΞϓϦͷϥΠϑαΠΫϧ

    ≠ αʔόʔͷϥΠϑαΠΫϧ ͳͥɺεέʔϧΞ΢τ͕ؒʹ߹Θͳ͍ͷ͔ʁ
  40. !40 ϥΠϑαΠΫϧ CentOS minimal www www build minimal image build

    www image image lifecycle server lifecycle install puppet apply puppet deploy minne-app launch www server www deploy minne-app terminate www server deleted release minne-app
  41. !41 • ࠷৽ΞϓϦ = ࠷৽ΠϝʔδΛ໨ࢦ͢ • ϦϦʔε࣌ʹΠϝʔδΛϏϧυ͠ɺ࠷৽ͷΞϓϦΛ ؚΉΑ͏ʹ͢Δ ϦϦʔε࣌ʹΠϝʔδΛϏϧυ͢Δ

  42. !42 • baseΠϝʔδͷϏϧυ • wwwΠϝʔδͷϏϧυ • wwwΠϝʔδͷݕࠪ • αʔόʔͱͯ͠ىಈ͢Δͷ͔ʁ •

    ىಈͨ͠ޙɺͪΌΜͱ֤ϓϩηε͕ಈ͍ͯΞΫηεͰ͖Δ͔ʁ ΠϝʔδϏϧυʹඞཁͳ΋ͷ͸…ʁ
  43. !43 ͍͍͔Μ͡ʹΠϝʔδΛϏϧυͯ͘͠ΕΔ΍ͭ hakata workflow - build - push - verify

    notify run खݩ͔Βssh࣮ͯ͠ߦ ΞϓϦͷϦϦʔε࣌ʹϏϧυ IaaCͷϦϦʔε࣌ʹϏϧυ
  44. ࣮૷ͯ͠ɺಈ࡞Λ֬ೝ ࠷৽ΞϓϦ࠷৽Πϝʔδ✨

  45. ܭըతεέʔϦϯάΛ࠶Քಇͯ͠ɺ վળ͞Ε͔ͨݕূͨ͠

  46. ܭըతεέʔϦϯάΛ࠶Քಇͯ͠ɺ վળ͞Ε͔ͨݕূͨ͠

  47. !47 • ΠϝʔδͷࣗಈϏϧυʹࢥͬͨΑΓ͕͔͔࣌ؒͬͨ • ࠶Քಇ͠Α͏ͱͨ͠Β͍Ζ͍Ζಈ͔ͣbug fix ࠶Քಇ͸͜ͷMeetupʹؒʹ߹Θͣ…

  48. ࠓޙʹ͝ظ଴͍ͩ͘͞ʂ

  49. ·ͱΊ

  50. !50 • ΞΫηεස౓༧ଌΛ༻͍ɺΞΫηε͕૿͑ΔલʹΦʔ τεέʔϧ • ϖύݚͱ࿈ܞɾ෼୲͠ɺ࣮ݱ • ࢼݧӡ༻͠ɺ՝୊Λચ͍ग़ͨ͠ • ͕ɺվળ·Ͱ͸Ͱ͖ͣ…

    ·ͱΊ
  51. Α͔ͬͨ͜ͱ

  52. !52 • ϖύݚͱ࿈ܞ͠ɺ৽ٕज़Λ࣮ࡍͷαʔϏεʹಋೖ • Φʔτεέʔϧʹ͍ͭͯͷ஌ݟΛಘΔ͜ͱ͕Ͱ͖ͨ Α͔ͬͨ͜ͱ

  53. !53 • ࢓૊Έͷ൚༻Խ • ࠓճ͸IaaS্Ͱ࡞͕ͬͨɺ࢓૊Έࣗମ͸ଞͰ΋࢖͑Δ • ྫɿKubernetesͷΑ͏ͳίϯςφج൫΁ͷల։ • ༧ଌʹݱΕͳ͍ΞΫηε΁ͷରԠ •

    ෛՙΛτϦΨʔͱͨ͠εέʔϧΞ΢τ ࠓޙ΍͍͖͍ͬͯͨ͜ͱ
  54. We are hiring! ϗεςΟϯάαʔϏεͰ৽ٕज़Λ׆༻ ΢ΣϒαʔϏεͷ4JUF3FMJBCJMJUZ&OHJOFFSJOH શࣾతͳٕज़ج൫Λ͕ͬͭΓ ࣄۀΛࠩผԽͰ͖Δٕज़Λ࡞Γग़͍ͨ͠ FUDʜ