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

少数組織で開発する大規模サービス

 少数組織で開発する大規模サービス

2022/07/21
Developers Summit 2022 Summer

イベントURL :
https://event.shoeisha.jp/devsumi/20220721

3ed35dce7bdede37814ccbb952cbf026?s=128

TVer Inc.
PRO

July 21, 2022
Tweet

More Decks by TVer Inc.

Other Decks in Technology

Transcript

  1. গ਺૊৫Ͱ։ൃ͢Δେن໛αʔϏε גࣜձࣾ TVer / Ճզ وࢤ (SRE) גࣜձࣾ TVer /

    ಺ւ ܙհ (Backend)
 2022/07/21
 Developers Summit 2022 Summer
  2. ͜ͷηογϣϯʹ͍ͭͯ ຊ೔͓࿩͢Δ͜ͱ • TVerϦχϡʔΞϧʹ͓͚ΔϞχλϦϯάվળ • গਓ਺Ͱ։ൃͱվળΛߦ͏ͨΊͷ
 New Relic׆༻ํ๏

  3. ࣗݾ঺հ ɾՃզ وࢤ (@TAKA_0411) ɾגࣜձࣾTVer
 ɹαʔϏεࣄۀຊ෦ SRE ɾझຯ͸α΢φͱήʔϜͱVTuber ɾϗʔϜα΢φ͸ߔޱԹઘ تָཬ

  4. ΞδΣϯμ • TVerͷ঺հ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •

    ·ͱΊ
  5. ΞδΣϯμ • TVerͷ঺հ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •

    ·ͱΊ
  6. TVerͷ঺հ

  7. TVerͷ঺հ [TVer] 2022 ೥ 3 ݄ͷಈը࠶ੜ਺͕ 2 ԯ 5 ઍສճ/݄Λಥഁ!


    https://tver.co.jp/news/20220426-1.html
  8. TVerͷ঺հ TVerͷ ٕज़ελοΫ

  9. TVerͷٕज़ελοΫ ※ϑϩϯτΤϯυɺTVΞϓϦɺϞόΠϧΞϓϦέʔγϣϯ͸
 ֎෦ͷڠྗձࣾͷ͓ੈ࿩ʹͳ͓ͬͯΓ·͢

  10. TVerͷ঺հ TVerͷ ΠϯϑϥετϥΫνϟ

  11. TVerͷΠϯϑϥετϥΫνϟ WebαʔϏεͱͯ͠ͷTVer΍ ൪૊࿈ಈγεςϜ౳Ͱ 
 Քಇ͍ͯ͠ΔϚΠΫϩαʔϏε

  12. TVer (WebαʔϏε) ͷΠϯϑϥετϥΫνϟ

  13. ΞδΣϯμ • TVerͷ঺հ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •

    ·ͱΊ
  14. αʔϏεϦχϡʔΞϧʹ͍ͭͯ

  15. αʔϏεϦχϡʔΞϧʹ͍ͭͯ [TVer] ςϨϏίϯςϯπͷࢹௌମݧ΍޿ࠂମݧͷ޲্Λ໨ࢦ͢ ʮTVer IDʯͷఏڙΛ։࢝
 https://tver.co.jp/news/20220404-1.html

  16. αʔϏεϦχϡʔΞϧʹ͍ͭͯ γεςϜͷมߋ఺ • Πϯϑϥͷ಺੡Խ • όοΫΤϯυͷ࡮৽ • ϞχλϦϯάͷ࡮৽

  17. αʔϏεϦχϡʔΞϧʹ͍ͭͯ γεςϜͷมߋ఺ • Πϯϑϥͷ಺੡Խ • όοΫΤϯυͷ࡮৽ • ϞχλϦϯάͷ࡮৽ɹ←ࠓճ͸͜͜ͷ࿩ ϦχϡʔΞϧΛػʹ New

    Relic OneΛϑϧ׆༻
  18. ϞχλϦϯάͷ࡮৽ ϞχλϦϯάͷ࡮৽ • ੹຿ͷ੔ཧ • ಋೖ͢Δػೳͷऔࣺબ୒ • μογϡϘʔυͱσʔλͷ׆༻

  19. ϞχλϦϯάͷ࡮৽ ϞχλϦϯάͷ࡮৽ • ੹຿ͷ੔ཧ • ಋೖ͢Δػೳͷऔࣺબ୒ • μογϡϘʔυͱσʔλͷ׆༻

  20. ϞχλϦϯάͷ࡮৽ Before (ʙ2021೥12݄) ʮNew RelicΛ ยखؒ ͰݟΔͷ͕ͭΒ͍ʂʯ Backend ৘γε Πϯϑϥ

    New Relic पΓͷରԠ New Relic पΓͷରԠ New Relic पΓͷରԠ APIͷ։ൃ Fargateݕূ ෛՙςετ ΞΧ΢ϯτ ઃܭͱ੔උ ίετࢼࢉ ͓Αͼܖ໿ ֤෦ॺ͔Β ͷ໰͍߹Θ ͤରԠ νϡʔχϯά CI/CD੔උ ཁ݅੔ཧ ΞϓϦ΍ϑϩ ϯτΤϯυͱ ͷௐ੔ Πϯϑϥߏங ͱCDKपΓͷ ੔උ
  21. After (2022೥1݄ʙ) ϞχλϦϯάͷ࡮৽ SRE (ࢲ) New RelicपΓͷλεΫ ·Δ͝ͱҾ͖ड͚·͢Ͷ ΈΜͳ ͡Ό͋ϦʔυΑΖ͘͠ʂ

    
 ଞͷλεΫਐΊΔͶ
  22. ࠷ۙ ϞχλϦϯάͷ࡮৽ Backend SRE μογϡϘʔυͰ 
 ͜ΜͳϝτϦΫε͕ݟ ͍ͨΜ͚ͩͲʙ ͜ͷ৔߹ʹ͸Ξϥʔτ ඈ͹ͯ͠ཉ͍͠ΑͶ

    ΍Γ͍ͨࣄΛԕྀͤͣʹ૬ஊɾ࣮ݱͰ͖Δମ੍΁ ◦◦ͱ͍͏஋ΛΩʔʹ͠ ͯΤϥʔΛௐ͍ࠪͨ͠ ͱࢥͬͯΔΘ͚Α ΍Γ·͢
  23. ϞχλϦϯάͷ࡮৽ ϞχλϦϯάͷ࡮৽ • ੹຿ͷ੔ཧ • ಋೖ͢Δػೳͷऔࣺબ୒ • μογϡϘʔυͱσʔλͷ׆༻

  24. ϞχλϦϯάͷ࡮৽ NRU101 New Relic One ೖ໳
 https://newrelic.com/jp/resources/presentations/nru101_20211027

  25. ϞχλϦϯάͷ࡮৽ ࣗ෼ͷཧ૝ • MELTΛશͯຬ͍ͨͨ͠ ◦ Metrics, Events, Logs, Traces •

    ΤϥʔௐࠪͷͨΊʹ Traces(APM)Λಋೖ͍ͨ͠
  26. ϞχλϦϯάͷ࡮৽ ݱ࣮ • New RelicͷGo Agent(APM)ͷ ಋೖ͕एׯ໘౗ • APMͷΦʔόʔϔου͕ෆ҆ •

    pprofͰྑ͘ͳ͍ʁ • ͍ͬͯ͏͔ࠓඞཁͳΜ͚ͩͬʁ ϦϦʔε·Ͱ͋ͱ2ϲ݄ɾɾɾ
  27. ϞχλϦϯάͷ࡮৽ ͱΓ͋͑ͣ New Relic Go Agent Λ ඞཁ࠷খݶͷՕॴʹ͚ͩಋೖͨ͠

  28. ϞχλϦϯάͷ࡮৽

  29. ϞχλϦϯάͷ࡮৽ Dev (Backend)ɹɹOps (SRE) ಋೖ݁Ռ • EchoͷIntegrationΛઃఆ͢Δͩ ͚Ͱେ෯ʹՄࢹԽͰ͖ͨ • Τϥʔൃੜ࣌ͷτϦΞʔδ͕


    Մೳʹͳͬͨ • ࠷খݶͷ࿑ྗͰ࠷େͷޮՌΛಘ Δ͜ͱ͕Ͱ͖ͨ
  30. ϞχλϦϯάͷ࡮৽ গ਺૊৫ × New Relic One • ػೳ͕๛෋ͰΦʔϧΠϯϫϯ • ಋೖͷϋʔυϧ͕௿͍

    • υΩϡϝϯτɾαϙʔτɾίϛϡχςΟ͕ॆ࣮ • ͱΓ͋͑ͣಋೖ͢Δ͚ͩͰେ෯ʹՄࢹԽͰ͖Δ ಋೖɾӡ༻ͷίετ͕࠷খݶͰࡁΜͩ
  31. ϞχλϦϯάͷ࡮৽ ϞχλϦϯάͷ࡮৽ • ੹຿ͷ෼ׂ • ಋೖ͢Δػೳͷऔࣺબ୒ • μογϡϘʔυͱσʔλͷ׆༻

  32. ϞχλϦϯάͷ࡮৽ ΫϥΠΞϯτͷಉ࣌઀ଓ਺΍Ϋϥογϡ཰ͷϝτϦΫε

  33. ϞχλϦϯάͷ࡮৽ ि1ͰϞόΠϧΞϓϦͷΫϥογϡ΍ωοτϫʔΫΤϥʔΛௐࠪ͠ɺ޿ࣾ͘಺ʹڞ༗

  34. ϞχλϦϯάͷ࡮৽ μογϡϘʔυͱσʔλͷ׆༻ • ඞཁͳϝτϦΫεͰμογϡϘʔυΛ੔උ • ϑϩϯτΤϯυ͔ΒόοΫΤϯυ·ͰΧόʔ • Τϥʔ܏޲Λௐࠪͯࣾ͠಺ʹڞ༗ • APIͷվળʹAPMΛ׆༻

  35. ࣗݾ঺հ ɾ಺ւ ܙհ (@voidofglans) ɾגࣜձࣾTVer αʔϏεࣄۀຊ෦ ɹϦʔυ ΤϯδχΞ ɾ޷͖ͳ΋ͷ:୸ՐͰম͍ͨϗϧϞϯ ɾಸྑࡏॅͷԕִۈ຿த

    ɾNFCຒΊࠐΜͩΓ͢Δͷ͕޷͖
  36. ΞδΣϯμ • TVerͷ঺հ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •

    ·ͱΊ
  37. ϦϦʔε४උฤ • ϑΣʔζʹΑͬͯNew Relicͷ࢖͍෼͚ • গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ

  38. ϦϦʔε४උฤ • ϑΣʔζʹΑͬͯNew Relicͷ࢖͍෼͚ • গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ

  39. ϑΣʔζʹΑͬͯNew Relicͷ࢖͍෼͚ APMಋೖޙͷϦϦʔε·ͰͷϑΣʔζ • 2ϲ݄લ • 1ϲ݄લ • 2िؒલ

  40. ϑΣʔζʹΑͬͯNew Relicͷ࢖͍෼͚(2ϲ݄લ • ΍Δ΂͖͜ͱ͸όά௵͠ • ओʹར༻ͨ͠ػೳ ◦ Errors Inbox ◦

    Errors ◦ NRQL • 4xx/5xxܥΤϥʔͷ಺༰Λ෼ੳ ◦ 4xx: ΫϥΠΞϯτ͕૝ఆ͍ͯ͠ͳ͍ύϥϝʔλ͕ͳ͍͔ ◦ 5xx: ૝ఆ͍ͯ͠ͳ͍ॲཧ΍λΠϜΞ΢τ͕ͳ͍͔
  41. ϑΣʔζʹΑͬͯNew Relicͷ࢖͍෼͚(1ϲ݄લ • ΍Δ΂͖͜ͱ͸ෛՙࢼݧʹΑΔϘτϧωοΫௐࠪ • ओʹར༻ͨ͠ػೳ ◦ Transactions ◦ Go

    Runtime ◦ CloudWatch Metrics • ߴෛՙ࣌ͷΞϓϦέʔγϣϯશମͷڍಈΛ෼ੳ ◦ TransactionsͰͷSlowest΍95percentileͳͲΛࢦඪʹ ◦ ϝϞϦϦʔΫ΍ɺ์ஔ͞Εͨgoroutineͷଘࡏ ◦ GC AllocationʹΑΔஅଓతͳੑೳྼԽ
  42. ϑΣʔζʹΑͬͯNew Relicͷ࢖͍෼͚(2िؒલ • ΍Δ΂͖͜ͱ͸ཁٻੑೳͷୡ੒ • ओʹར༻ͨ͠ػೳ ◦ Transactions ◦ CloudWatch

    Metrics • શମΛ௨ͨ͠ෛՙࢼݧͰͷ҆ఆύϑΥʔϚϯε ◦ 10msҎ্͔͔ΔAPI ◦ ֤ϛυϧ΢ΣΞ΁ͷΫΤϦ΍઀ଓͷ਺ ◦ ॻ͖ࠐΈܥAPIͰͷLock,Waitͷ෼෍
  43. ϦϦʔε४උฤ • ϑΣʔζʹΑͬͯNew Relicͷ࢖͍෼͚ • গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ

  44. গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ ૣ͘ߦ͖͚ͨΕ͹ɺͻͱΓͰߦ͚ɻ ԕ͘·Ͱߦ͖͚ͨΕ͹ɺΈΜͳͰߦ͚ɻ If you want to go fast, go

    alone. If you want to go far, go together.
  45. গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ ͓͚ͬʂ ͡Ό͋ͪΐͬͱ1ਓͰߦͬͯ͘Δʂ

  46. গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ ϦϦʔε೔·Ͱʹ ΈΜͳݱ஍ू߹Ͱʂ

  47. • ͦΕͧΕ͕ͦΕͧΕͷ࠷଎Ͱ໨త஍ʹ • ੹຿ͷ໌֬ͳ෼ղ • ໌֬ͳ໨తͷڞ༗ গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ

  48. • ίέͳ͍͜ͱ͕ॏཁ • Backend/Infra/SREͦΕͧΕ͕ઐ೚ੑΛ࣋ͬͯಠཱ͠ ͨϝϯόʔ • ίϛϡχέʔγϣϯίετ͕࠷௿ݶʹ཈͑ΒΕͨ গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ

  49. গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ஍൫͸੔ͬͨ • ࣍͸ΈΜͳͰԕ͘΁ߦ͜͏

  50. ϦϦʔε४උฤ • ϑΣʔζʹΑͬͯNew Relicͷ࢖͍෼͚ • গਓ਺ͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ

  51. • Α͋͘ΔಥൃతͳεύΠΫ ◦ ஍্೾࿈ಈ΍์ૹ࿮੾ΕʹΑΔྲྀೖ ▪ 1minޙ͸͖ͬ͞·Ͱͷ10ഒҎ্ͷϦΫΤετ਺ ▪ ૿͑Δಉ࣌઀ଓ ◦ ๭ΞΠυϧࣄ຿ॴλϨϯτ༷ग़ԋ൪૊

    ◦ ϦΞϧλΠϜ഑৴൪૊ऴྃ࣌ ▪ Ϣʔβʔ͕Ұ੪ʹβοϐϯά ▪ ಉظͷͱΕͨ਺ສʙ਺ेສͷϢʔβʔΞΫγϣϯ ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ
  52. ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ

  53. • ϦϦʔεલʹSRE͕͔ͬ͠Γઐ೚ͯ͘͠Εͨ ◦ New RelicΛݟ͓͚ͯ͹Ұൠతͳࢦඪ͸શ෦ݟΕΔ ◦ ૝ఆ͞ΕΔΞΫηεύλʔϯʹ͓͚ΔMetricsͷมԽΛࣄ લʹೝࣝ͢Δ ◦ ෛՙࢼݧ/ରࡦʹूத͢Δ͜ͱ͕Ͱ͖ͨ

    ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ
  54. ΞδΣϯμ • TVerͷ঺հ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •

    ·ͱΊ
  55. ϦϦʔεޙͷվળ • ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ • ఆظతʹ࣮ࢪ͢ΔμογϡϘʔυோΊΔձ • ੹຿ͷ෼཭ʹΑΔରԠ଎౓ͷ୲อ

  56. ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ • ҆ఆՔಇ͍ͯ͠Δ͜ͱ͕ԕ໨ͰΘ͔Δ҆৺ײ

  57. ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ • σόΠε͝ͱͷ࣮૷ʹΑΔࠩҟͷݕ஌ ◦ σόΠεछผΛCustomAttributeʹ֨ೲ͢Δ ◦ ϦΫΤετ܏޲΍Τϥʔ܏޲ͷ೺Ѳ ▪ iOSΞϓϦ͚ͩಛఆͷϖʔδͰͷAPIϦΫΤετ͕ҟৗʹଟ͍ ⿌

    Ϧετදࣔ಺Ͱཁૉ͝ͱʹAPIΛݺͼग़͍ͯͨ͠ ⿌ 30min଍ΒͣͰݪҼಛఆˠ։ൃϕϯμʔ΁ͷڞ༗ ⿌ 3೔ޙͷϦϦʔεʹแؚ͠ɺແࣄղফ🎉
  58. ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ • ։ൃ౰ॳ૝ఆ͞Ε͍ͯͳ͍ϢʔβʔγφϦΦ ◦ ࢥͬͨͷͷ3ഒ͘Β͍ݕࡧػೳ͕࢖ΘΕ͍ͯΔʂʂ ◦ ࢥͬͨΑΓ΋xxͷػೳ͕࢖ΘΕͯͳ͍ʂʂ ૝ఆͱӡ༻͸ဃ཭͢Δ΋ͷ

  59. • ա৒ͳϦιʔε͕͙͢Θ͔Δ ◦ ϦϦʔεॳظ͸҆৺ΛۚͰങ͍ͬͯͨͷͰ५୔ͳϦιʔε Λ༻ҙ͍ͯͨ͠ ◦ ίετΠϯύΫτΛ࣠ʹॱ࣍Ϧιʔεͷ࠷దԽΛߦ͑ͨ ▪ ΋ͪΖΜ͜Ε΋ՄࢹԽ͞Ε͍ͯΔͷͰμϝͳ৔߹ͷݕ஌΋ਝ଎ ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ

  60. • ࡢ೔ࠓ೔ؾʹͳͬͨࢦඪΛμογϡϘʔυʹ௥Ճ • Metricsͷҧ࿨ײʹؾͮ͘ᄿ֮ͷ܇࿅ • ো֐ޙ΍τϥϒϧൃੜ࣌ͷ஌ݟͷूੵ ఆظతʹ࣮ࢪ͢ΔμογϡϘʔυோΊΔձ

  61. ੹຿ͷ෼཭ʹΑΔରԠ଎౓ͷ୲อ • ਖ਼͘͠ઐ೚ʹ೚ͤΔ ◦ த్൒୺ʹ݉຿͍ͯ͠ΔͱɺԱଌ΍ओ؍͕ೖͬͯ͠·͍͕ ͪ ◦ ໌֬ͳ੹຿ͷ෼཭ ▪ SRE͸ࣄ࣮ͱϩάΛ౉͢ͱ͜Ζʹઐ೦

  62. ΞδΣϯμ • TVerͷ঺հ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •

    ·ͱΊ
  63. ·ͱΊ • 1ਓͰ๊͑ࠐΉͷ͸Α͘ͳ͍ • ૣ͘΍ΔͨΊʹ͸੹຿Λ໌֬ʹ෼ղ͢Δඞཁ͕͋Δ • Ͱ΋΍ͬͺΓΈΜͳͰૣ͘ԕ͘΁ߦ͖͍ͨʂʂ

  64. ·ͱΊ • ແࣄϦϦʔεˍ҆ఆӡ༻͕࢝·ͬͨ🎉 • NewRelicΛ։ൃ؀ڥͰ΋׆༻ ◦ ։ൃ࣌ͷόάτϥοΩϯά ◦ ՝୊؅ཧͱͷ࿈ܞ ◦

    QAνʔϜʹΑΔNewRelicͰͷࣄ࣮ڞ༗ • ։ൃ૊৫ͷϦϑΝΫλϦϯάΛ࢝Ί͍͖ͯ·͢ ◦ ࠓ·Ͱͷ୲຿Λ਺ਓνʔϜͰ୲౰ ◦ ઐ೚νʔϜʹΑΔεϧʔϓοτΛ୲อͨ͠։ൃ૊৫
  65. None
  66. None