Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
少数組織で開発する大規模サービス
Search
TVer Inc.
PRO
July 21, 2022
Technology
4
5.1k
少数組織で開発する大規模サービス
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 iOSチームの共通認識の作り方 - Findy Job LT iOSアプリ開発の裏側 開発組織が向き合う課題とこれから
techtver
PRO
0
880
20240710_HR SUCCESS SUMMIT 2024_テーマセッション「エンジニア採用2.0」登壇資料(株式会社TVer_香坂)
techtver
PRO
0
60
採用応募者の個人情報保護の取扱いについて_株式会社TVer
techtver
PRO
0
430
月間4.5億回再生を超える大規模サービス TVer iOSアプリのリアーキテクチャ戦略 - iOSDC2024
techtver
PRO
1
11k
成長し続けるTVerサービスを支える オブザーバビリティとカスタマーサポート
techtver
PRO
5
5.5k
Change Tracking でデプロイを記録してパフォーマンスへの影響を分析しやすくしよう
techtver
PRO
1
230
採用人事の立場で行う採用広報・技術広報の裏側 〜TVerがエンジニア採用を本格化するために継続し続けたこと〜
techtver
PRO
2
710
株式会社TVer 会社紹介資料
techtver
PRO
9
83k
採用人事の立場から、採用広報の立ち上げや技術広報の促進をしている話
techtver
PRO
0
1.1k
Other Decks in Technology
See All in Technology
5min GuardDuty Extended Threat Detection EKS
takakuni
0
180
Tech-Verse 2025 Global CTO Session
lycorptech_jp
PRO
0
1k
Delegating the chores of authenticating users to Keycloak
ahus1
0
130
How Community Opened Global Doors
hiroramos4
PRO
1
130
Tech-Verse 2025 Keynote
lycorptech_jp
PRO
0
1.2k
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
210
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
2
1.2k
Witchcraft for Memory
pocke
1
650
20250625 Snowflake Summit 2025活用事例 レポート / Nowcast Snowflake Summit 2025 Case Study Report
kkuv
1
360
Microsoft Build 2025 技術/製品動向 for Microsoft Startup Tech Community
torumakabe
2
320
Github Copilot エージェントモードで試してみた
ochtum
0
130
AIとともに進化するエンジニアリング / Engineering-Evolving-with-AI_final.pdf
lycorptech_jp
PRO
0
140
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
RailsConf 2023
tenderlove
30
1.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
234
140k
4 Signs Your Business is Dying
shpigford
184
22k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
Become a Pro
speakerdeck
PRO
28
5.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Six Lessons from altMBA
skipperchong
28
3.9k
How STYLIGHT went responsive
nonsquared
100
5.6k
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