Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
少数組織で開発する大規模サービス
TVer Inc.
PRO
July 21, 2022
Technology
3
800
少数組織で開発する大規模サービス
2022/07/21
Developers Summit 2022 Summer
イベントURL :
https://event.shoeisha.jp/devsumi/20220721
TVer Inc.
PRO
July 21, 2022
Tweet
Share
More Decks by TVer Inc.
See All by TVer Inc.
TVerのサービスリニューアルにおける 信頼性向上への取り組み
techtver
PRO
0
4.3k
月間動画再生数2億回を支える TVerのオブザーバビリティ
techtver
PRO
2
410
TVer における New Relic One の活用と目指す姿
techtver
PRO
0
490
Other Decks in Technology
See All in Technology
ジョブ管理システムをAWS Step Functionsに移行する時の勘所
non97
0
490
ログ集約基盤をCloudWatchからOpenSearchに変えてみた
yuhta28
0
130
インフラのテストに VPC Reachability Analyzer は外せないという話
nulabinc
PRO
2
710
Settlement simulation testing to ensure correct settlement processing
applepine1125
2
1.1k
#awsbasics [LT] サーバレスECにおける Step Functions の使い方
miu_crescent
0
830
漫画で使えそうな背景画像をblenderを使って作ってみた!
nokonoko1203
1
280
セキュアなTerraformの使い方 ~ 機密情報をコードに含めず環境構築するにはどうしたらいいの?
harukasakihara
9
1.5k
Continuous Architecture Design for Modernization
humank
0
160
2022 COSCUP - GKE Backend Cluster 除雷分享
brentchang
0
120
フィンテック養成勉強会#24
finengine
0
330
Azure DevOps Online Vol.6 - 業務で必要なCIをみんなで考えよう
kkamegawa
0
250
Power BI のうらがわ
hanaseleb
1
130
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
31
6.8k
Faster Mobile Websites
deanohume
294
28k
Streamline your AJAX requests with AmplifyJS and jQuery
dougneiner
127
8.5k
Typedesign – Prime Four
hannesfritz
34
1.4k
BBQ
matthewcrist
74
7.9k
Code Reviewing Like a Champion
maltzj
506
37k
Build The Right Thing And Hit Your Dates
maggiecrowley
19
1.2k
Intergalactic Javascript Robots from Outer Space
tanoku
260
25k
Building Better People: How to give real-time feedback that sticks.
wjessup
344
17k
Web Components: a chance to create the future
zenorocha
303
40k
Writing Fast Ruby
sferik
612
57k
Debugging Ruby Performance
tmm1
65
10k
Transcript
গ৫Ͱ։ൃ͢ΔେنαʔϏε גࣜձࣾ TVer / Ճզ وࢤ (SRE) גࣜձࣾ TVer /
ւ ܙհ (Backend) 2022/07/21 Developers Summit 2022 Summer
͜ͷηογϣϯʹ͍ͭͯ ຊ͓͢Δ͜ͱ • TVerϦχϡʔΞϧʹ͓͚ΔϞχλϦϯάվળ • গਓͰ։ൃͱվળΛߦ͏ͨΊͷ New Relic׆༻ํ๏
ࣗݾհ ɾՃզ وࢤ (@TAKA_0411) ɾגࣜձࣾTVer ɹαʔϏεࣄۀຊ෦ SRE ɾझຯαφͱήʔϜͱVTuber ɾϗʔϜαφߔޱԹઘ تָཬ
ΞδΣϯμ • TVerͷհ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •
·ͱΊ
ΞδΣϯμ • TVerͷհ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •
·ͱΊ
TVerͷհ
TVerͷհ [TVer] 2022 3 ݄ͷಈը࠶ੜ͕ 2 ԯ 5 ઍສճ/݄Λಥഁ!
https://tver.co.jp/news/20220426-1.html
TVerͷհ TVerͷ ٕज़ελοΫ
TVerͷٕज़ελοΫ ※ϑϩϯτΤϯυɺTVΞϓϦɺϞόΠϧΞϓϦέʔγϣϯ ֎෦ͷڠྗձࣾͷ͓ੈʹͳ͓ͬͯΓ·͢
TVerͷհ TVerͷ ΠϯϑϥετϥΫνϟ
TVerͷΠϯϑϥετϥΫνϟ WebαʔϏεͱͯ͠ͷTVer ൪࿈ಈγεςϜͰ Քಇ͍ͯ͠ΔϚΠΫϩαʔϏε
TVer (WebαʔϏε) ͷΠϯϑϥετϥΫνϟ
ΞδΣϯμ • TVerͷհ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •
·ͱΊ
αʔϏεϦχϡʔΞϧʹ͍ͭͯ
αʔϏεϦχϡʔΞϧʹ͍ͭͯ [TVer] ςϨϏίϯςϯπͷࢹௌମݧࠂମݧͷ্Λࢦ͢ ʮTVer IDʯͷఏڙΛ։࢝ https://tver.co.jp/news/20220404-1.html
αʔϏεϦχϡʔΞϧʹ͍ͭͯ γεςϜͷมߋ • ΠϯϑϥͷԽ • όοΫΤϯυͷ৽ • ϞχλϦϯάͷ৽
αʔϏεϦχϡʔΞϧʹ͍ͭͯ γεςϜͷมߋ • ΠϯϑϥͷԽ • όοΫΤϯυͷ৽ • ϞχλϦϯάͷ৽ɹ←ࠓճ͜͜ͷ ϦχϡʔΞϧΛػʹ New
Relic OneΛϑϧ׆༻
ϞχλϦϯάͷ৽ ϞχλϦϯάͷ৽ • ͷཧ • ಋೖ͢Δػೳͷऔࣺબ • μογϡϘʔυͱσʔλͷ׆༻
ϞχλϦϯάͷ৽ ϞχλϦϯάͷ৽ • ͷཧ • ಋೖ͢Δػೳͷऔࣺબ • μογϡϘʔυͱσʔλͷ׆༻
ϞχλϦϯάͷ৽ Before (ʙ202112݄) ʮNew RelicΛ ยखؒ ͰݟΔͷ͕ͭΒ͍ʂʯ Backend γε Πϯϑϥ
New Relic पΓͷରԠ New Relic पΓͷରԠ New Relic पΓͷରԠ APIͷ։ൃ Fargateݕূ ෛՙςετ ΞΧϯτ ઃܭͱඋ ίετࢼࢉ ͓Αͼܖ ֤෦ॺ͔Β ͷ͍߹Θ ͤରԠ νϡʔχϯά CI/CDඋ ཁ݅ཧ ΞϓϦϑϩ ϯτΤϯυͱ ͷௐ Πϯϑϥߏங ͱCDKपΓͷ උ
After (20221݄ʙ) ϞχλϦϯάͷ৽ SRE (ࢲ) New RelicपΓͷλεΫ ·Δ͝ͱҾ͖ड͚·͢Ͷ ΈΜͳ ͡Ό͋ϦʔυΑΖ͘͠ʂ
ଞͷλεΫਐΊΔͶ
࠷ۙ ϞχλϦϯάͷ৽ Backend SRE μογϡϘʔυͰ ͜ΜͳϝτϦΫε͕ݟ ͍ͨΜ͚ͩͲʙ ͜ͷ߹ʹΞϥʔτ ඈͯ͠ཉ͍͠ΑͶ
Γ͍ͨࣄΛԕྀͤͣʹ૬ஊɾ࣮ݱͰ͖Δମ੍ ◦◦ͱ͍͏ΛΩʔʹ͠ ͯΤϥʔΛௐ͍ࠪͨ͠ ͱࢥͬͯΔΘ͚Α Γ·͢
ϞχλϦϯάͷ৽ ϞχλϦϯάͷ৽ • ͷཧ • ಋೖ͢Δػೳͷऔࣺબ • μογϡϘʔυͱσʔλͷ׆༻
ϞχλϦϯάͷ৽ NRU101 New Relic One ೖ https://newrelic.com/jp/resources/presentations/nru101_20211027
ϞχλϦϯάͷ৽ ࣗͷཧ • MELTΛશͯຬ͍ͨͨ͠ ◦ Metrics, Events, Logs, Traces •
ΤϥʔௐࠪͷͨΊʹ Traces(APM)Λಋೖ͍ͨ͠
ϞχλϦϯάͷ৽ ݱ࣮ • New RelicͷGo Agent(APM)ͷ ಋೖ͕एׯ໘ • APMͷΦʔόʔϔου͕ෆ҆ •
pprofͰྑ͘ͳ͍ʁ • ͍ͬͯ͏͔ࠓඞཁͳΜ͚ͩͬʁ ϦϦʔε·Ͱ͋ͱ2ϲ݄ɾɾɾ
ϞχλϦϯάͷ৽ ͱΓ͋͑ͣ New Relic Go Agent Λ ඞཁ࠷খݶͷՕॴʹ͚ͩಋೖͨ͠
ϞχλϦϯάͷ৽
ϞχλϦϯάͷ৽ Dev (Backend)ɹɹOps (SRE) ಋೖ݁Ռ • EchoͷIntegrationΛઃఆ͢Δͩ ͚Ͱେ෯ʹՄࢹԽͰ͖ͨ • Τϥʔൃੜ࣌ͷτϦΞʔδ͕
Մೳʹͳͬͨ • ࠷খݶͷ࿑ྗͰ࠷େͷޮՌΛಘ Δ͜ͱ͕Ͱ͖ͨ
ϞχλϦϯάͷ৽ গ৫ × New Relic One • ػೳ͕๛ͰΦʔϧΠϯϫϯ • ಋೖͷϋʔυϧ͕͍
• υΩϡϝϯτɾαϙʔτɾίϛϡχςΟ͕ॆ࣮ • ͱΓ͋͑ͣಋೖ͢Δ͚ͩͰେ෯ʹՄࢹԽͰ͖Δ ಋೖɾӡ༻ͷίετ͕࠷খݶͰࡁΜͩ
ϞχλϦϯάͷ৽ ϞχλϦϯάͷ৽ • ͷׂ • ಋೖ͢Δػೳͷऔࣺબ • μογϡϘʔυͱσʔλͷ׆༻
ϞχλϦϯάͷ৽ ΫϥΠΞϯτͷಉ࣌ଓΫϥογϡͷϝτϦΫε
ϞχλϦϯάͷ৽ ि1ͰϞόΠϧΞϓϦͷΫϥογϡωοτϫʔΫΤϥʔΛௐࠪ͠ɺࣾ͘ʹڞ༗
ϞχλϦϯάͷ৽ μογϡϘʔυͱσʔλͷ׆༻ • ඞཁͳϝτϦΫεͰμογϡϘʔυΛඋ • ϑϩϯτΤϯυ͔ΒόοΫΤϯυ·ͰΧόʔ • ΤϥʔΛௐࠪͯࣾ͠ʹڞ༗ • APIͷվળʹAPMΛ׆༻
ࣗݾհ ɾւ ܙհ (@voidofglans) ɾגࣜձࣾTVer αʔϏεࣄۀຊ෦ ɹϦʔυ ΤϯδχΞ ɾ͖ͳͷ:ՐͰম͍ͨϗϧϞϯ ɾಸྑࡏॅͷԕִۈத
ɾNFCຒΊࠐΜͩΓ͢Δͷ͕͖
ΞδΣϯμ • TVerͷհ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •
·ͱΊ
ϦϦʔε४උฤ • ϑΣʔζʹΑͬͯNew Relicͷ͍͚ • গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ
ϦϦʔε४උฤ • ϑΣʔζʹΑͬͯNew Relicͷ͍͚ • গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ
ϑΣʔζʹΑͬͯNew Relicͷ͍͚ APMಋೖޙͷϦϦʔε·ͰͷϑΣʔζ • 2ϲ݄લ • 1ϲ݄લ • 2िؒલ
ϑΣʔζʹΑͬͯNew Relicͷ͍͚(2ϲ݄લ • Δ͖͜ͱόά௵͠ • ओʹར༻ͨ͠ػೳ ◦ Errors Inbox ◦
Errors ◦ NRQL • 4xx/5xxܥΤϥʔͷ༰Λੳ ◦ 4xx: ΫϥΠΞϯτ͕ఆ͍ͯ͠ͳ͍ύϥϝʔλ͕ͳ͍͔ ◦ 5xx: ఆ͍ͯ͠ͳ͍ॲཧλΠϜΞτ͕ͳ͍͔
ϑΣʔζʹΑͬͯNew Relicͷ͍͚(1ϲ݄લ • Δ͖͜ͱෛՙࢼݧʹΑΔϘτϧωοΫௐࠪ • ओʹར༻ͨ͠ػೳ ◦ Transactions ◦ Go
Runtime ◦ CloudWatch Metrics • ߴෛՙ࣌ͷΞϓϦέʔγϣϯશମͷڍಈΛੳ ◦ TransactionsͰͷSlowest95percentileͳͲΛࢦඪʹ ◦ ϝϞϦϦʔΫɺ์ஔ͞Εͨgoroutineͷଘࡏ ◦ GC AllocationʹΑΔஅଓతͳੑೳྼԽ
ϑΣʔζʹΑͬͯNew Relicͷ͍͚(2िؒલ • Δ͖͜ͱཁٻੑೳͷୡ • ओʹར༻ͨ͠ػೳ ◦ Transactions ◦ CloudWatch
Metrics • શମΛ௨ͨ͠ෛՙࢼݧͰͷ҆ఆύϑΥʔϚϯε ◦ 10msҎ্͔͔ΔAPI ◦ ֤ϛυϧΣΞͷΫΤϦଓͷ ◦ ॻ͖ࠐΈܥAPIͰͷLock,Waitͷ
ϦϦʔε४උฤ • ϑΣʔζʹΑͬͯNew Relicͷ͍͚ • গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ
গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ ૣ͘ߦ͖͚ͨΕɺͻͱΓͰߦ͚ɻ ԕ͘·Ͱߦ͖͚ͨΕɺΈΜͳͰߦ͚ɻ If you want to go fast, go
alone. If you want to go far, go together.
গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ ͓͚ͬʂ ͡Ό͋ͪΐͬͱ1ਓͰߦͬͯ͘Δʂ
গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ ϦϦʔε·Ͱʹ ΈΜͳݱू߹Ͱʂ
• ͦΕͧΕ͕ͦΕͧΕͷ࠷Ͱతʹ • ͷ໌֬ͳղ • ໌֬ͳతͷڞ༗ গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ
• ίέͳ͍͜ͱ͕ॏཁ • Backend/Infra/SREͦΕͧΕ͕ઐੑΛ࣋ͬͯಠཱ͠ ͨϝϯόʔ • ίϛϡχέʔγϣϯίετ͕࠷ݶʹ͑ΒΕͨ গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ
গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ൫ͬͨ • ࣍ΈΜͳͰԕ͘ߦ͜͏
ϦϦʔε४උฤ • ϑΣʔζʹΑͬͯNew Relicͷ͍͚ • গਓͰεϐʔυײΛམͱ͞ͳ͍ͨΊʹ • ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ
• Α͋͘ΔಥൃతͳεύΠΫ ◦ ্࿈ಈ์ૹΕʹΑΔྲྀೖ ▪ 1minޙ͖ͬ͞·Ͱͷ10ഒҎ্ͷϦΫΤετ ▪ ૿͑Δಉ࣌ଓ ◦ ΞΠυϧࣄॴλϨϯτ༷ग़ԋ൪
◦ ϦΞϧλΠϜ৴൪ऴྃ࣌ ▪ Ϣʔβʔ͕Ұ੪ʹβοϐϯά ▪ ಉظͷͱΕͨສʙेສͷϢʔβʔΞΫγϣϯ ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ
ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ
• ϦϦʔεલʹSRE͕͔ͬ͠Γઐͯ͘͠Εͨ ◦ New RelicΛݟ͓͚ͯҰൠతͳࢦඪશ෦ݟΕΔ ◦ ఆ͞ΕΔΞΫηεύλʔϯʹ͓͚ΔMetricsͷมԽΛࣄ લʹೝࣝ͢Δ ◦ ෛՙࢼݧ/ରࡦʹूத͢Δ͜ͱ͕Ͱ͖ͨ
ύϑΥʔϚϯεɾνϡʔχϯά/ෛՙରࡦ
ΞδΣϯμ • TVerͷհ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •
·ͱΊ
ϦϦʔεޙͷվળ • ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ • ఆظతʹ࣮ࢪ͢ΔμογϡϘʔυோΊΔձ • ͷʹΑΔରԠͷ୲อ
ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ • ҆ఆՔಇ͍ͯ͠Δ͜ͱ͕ԕͰΘ͔Δ҆৺ײ
ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ • σόΠε͝ͱͷ࣮ʹΑΔࠩҟͷݕ ◦ σόΠεछผΛCustomAttributeʹ֨ೲ͢Δ ◦ ϦΫΤετΤϥʔͷѲ ▪ iOSΞϓϦ͚ͩಛఆͷϖʔδͰͷAPIϦΫΤετ͕ҟৗʹଟ͍ ⿌
ϦετදࣔͰཁૉ͝ͱʹAPIΛݺͼग़͍ͯͨ͠ ⿌ 30minΒͣͰݪҼಛఆˠ։ൃϕϯμʔͷڞ༗ ⿌ 3ޙͷϦϦʔεʹแؚ͠ɺແࣄղফ🎉
ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ • ։ൃॳఆ͞Ε͍ͯͳ͍ϢʔβʔγφϦΦ ◦ ࢥͬͨͷͷ3ഒ͘Β͍ݕࡧػೳ͕ΘΕ͍ͯΔʂʂ ◦ ࢥͬͨΑΓxxͷػೳ͕ΘΕͯͳ͍ʂʂ ఆͱӡ༻ဃ͢Δͷ
• աͳϦιʔε͕͙͢Θ͔Δ ◦ ϦϦʔεॳظ҆৺ΛۚͰങ͍ͬͯͨͷͰ५ͳϦιʔε Λ༻ҙ͍ͯͨ͠ ◦ ίετΠϯύΫτΛ࣠ʹॱ࣍Ϧιʔεͷ࠷దԽΛߦ͑ͨ ▪ ͪΖΜ͜ΕՄࢹԽ͞Ε͍ͯΔͷͰμϝͳ߹ͷݕਝ ԣஅతʹՄࢹԽ͞ΕͨMetricsͷԸܙ
• ࡢࠓؾʹͳͬͨࢦඪΛμογϡϘʔυʹՃ • Metricsͷҧײʹؾͮ͘ᄿ֮ͷ܇࿅ • োޙτϥϒϧൃੜ࣌ͷݟͷूੵ ఆظతʹ࣮ࢪ͢ΔμογϡϘʔυோΊΔձ
ͷʹΑΔରԠͷ୲อ • ਖ਼͘͠ઐʹͤΔ ◦ த్ʹ͍݉ͯ͠ΔͱɺԱଌओ؍͕ೖͬͯ͠·͍͕ ͪ ◦ ໌֬ͳͷ ▪ SREࣄ࣮ͱϩάΛ͢ͱ͜Ζʹઐ೦
ΞδΣϯμ • TVerͷհ • αʔϏεϦχϡʔΞϧʹ͍ͭͯ • ϦϦʔε४උฤ • ϦϦʔεޙͷվળ •
·ͱΊ
·ͱΊ • 1ਓͰ๊͑ࠐΉͷΑ͘ͳ͍ • ૣ͘ΔͨΊʹΛ໌֬ʹղ͢Δඞཁ͕͋Δ • ͰͬͺΓΈΜͳͰૣ͘ԕ͘ߦ͖͍ͨʂʂ
·ͱΊ • ແࣄϦϦʔεˍ҆ఆӡ༻͕࢝·ͬͨ🎉 • NewRelicΛ։ൃڥͰ׆༻ ◦ ։ൃ࣌ͷόάτϥοΩϯά ◦ ՝ཧͱͷ࿈ܞ ◦
QAνʔϜʹΑΔNewRelicͰͷࣄ࣮ڞ༗ • ։ൃ৫ͷϦϑΝΫλϦϯάΛ࢝Ί͍͖ͯ·͢ ◦ ࠓ·Ͱͷ୲ΛਓνʔϜͰ୲ ◦ ઐνʔϜʹΑΔεϧʔϓοτΛ୲อͨ͠։ൃ৫
None
None