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
よりUXに近いSLI・SLOの運用による可用性の再設計
Search
nade
May 15, 2022
Programming
8.8k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
よりUXに近いSLI・SLOの運用による可用性の再設計
SRE NEXT 2022
https://sre-next.dev/2022/schedule/#jp47
nade
May 15, 2022
More Decks by nade
See All by nade
Server-Driven UI入門: 画面のStateを直接受け取るアプローチ
kazumanagano
5
4.4k
タップルのサービス特性に合わせた設計方針を考える
kazumanagano
0
260
iOS開発におけるGitHub Actions self-hosted runnerを利用したオンプレ CI/CD のすゝめ
kazumanagano
0
170
Github Actions self-hosted runners のすゝめ
kazumanagano
0
580
モバイルアプリのオブザーバビリティを向上させるプラクティス
kazumanagano
8
5.2k
タップル モバイルアプリにE2Eテストが導入されるまでの軌跡
kazumanagano
0
140
App Size Optimization への挑戦
kazumanagano
1
1.4k
無料トライアル施策のしくじりから学ぶサブスクリプション構成 ベストプラクティス
kazumanagano
2
2.5k
モノレポで複数アプリを リリースする場合の運用戦略
kazumanagano
0
4.1k
Other Decks in Programming
See All in Programming
Claude Team Plan導入・ガイド
tk3fftk
0
250
今さら聞けない .NET CLI
htkym
0
180
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
160
VibeCodingからAgenticWorkflowへ
starfish719
0
180
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.6k
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
180
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
3.8k
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
390
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
230
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
280
What's New in Android 2026
veronikapj
0
250
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
The Invisible Side of Design
smashingmag
301
52k
The SEO Collaboration Effect
kristinabergwall1
1
510
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
480
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
480
Marketing to machines
jonoalderson
1
5.6k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
200
Raft: Consensus for Rubyists
vanstee
141
7.6k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
530
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
Transcript
ΑΓUXʹ͍ۙSLIɾSLOͷӡ ༻ʹΑΔՄ༻ੑͷ࠶ઃܭ Ӭ Ұഅ
ࣗݾհ • 2019/4ʙ λοϓϧʹiOSΤϯδχΞͱͯ͠ δϣΠϯ • 2021ΑΓSREνʔϜʹϞόΠϧΤϯδχ Ξͱͯ͠ॴଐ • ݱࡏαʔϏεͷ৴པੑΛߴΊΔϛογϣ
ϯʹऔΓΜͰ͍·͢ Ӭ Ұഅ
λοϓϧͷαʔϏεʹ͍ͭͯ https://tapple.me/ 20145݄ʹϦϦʔεͨ͠ࠃ࠷େنͷϚονϯάΞϓϦͰ͢ɻ1,000छҎ্ͷσʔτϓϥϯ͔Β૬ख Λืूͯ͠ϚονϯάͰ͖Δʮ͓Ͱ͔͚ػೳʯΛఏڙ͠ɺऩɾ৬ۀͳͲͷ͚݅ͩͰͳ͘ɺझຯΛ͖ͬ ͔͚ʹࣗΒ͘͠աͤ͝Δύʔτφʔͱग़ձ͑Δͷ͕ಛͰɺ20ͷஉঁΛத৺ʹࢧ࣋Λड͚͍ͯ·͢ɻ
• SREνʔϜʹϞ バ ΠϧΤϯ ジ χΞ(iOSɺAndroid֤1ਓ) が ઐଐ で ॴଐ͢Δܗ
• ΑΓϢʔβʔʹ͍ۙ෦ͰͷܭଌɺBFFͷਪਐͱ͍ͬͨόοΫΤϯυSRE͚ͩͰखΛ৳ͮ͠Β ͍෦ʹΞδϦςΟߴ͘औΓΊΔΑ͏ʹ͢Δత • ΠϯϑϥόοΫΤϯυͷઐੑͷ֫ಘ SREνʔϜͷMobileΤϯδχΞʹ͍ͭͯ
ࠓճͷൃද༰ SLI / SLOΛϞόΠϧΞϓϦέʔγϣϯଆͰܭଌ͞ΕΔࢦඪΛͱʹ࠶ઃܭ͠ɺΑΓUXʹ͍ۙࢦඪΛࢦ ͢औΓΈͷհ • ৴པੑΛճ෮ͤ͞ΔͨΊͷΞΫγϣϯɺΠϯγσϯτͷରॲΛఆྔతʹߦ͑ΔΑ͏ʹ • ৴པੑΛఆྔతʹѲͰ͖Δ͜ͱͰͷ҆৺ײ •
ࣄۀஅ༏ઌͷίϛϡχέʔγϣϯʹ͓͚Δڞ௨ݴޠʹ
ैདྷͷSLI/SLOͷӡ༻
όοΫΤϯυ • APIαʔόʔ, BFFαʔόʔͦΕͧΕͷϨΠςϯγΛSLIͱͯ͠ར༻ • ϞχλϦϯάɺΞϥʔτڞʹDataDogͰཧ • ҧ࣌ɺΤϥʔόδΣοτΛஶ͘͠ফඅ͢Δ߹ଈ࣌োରԠ ैདྷͷSLI/SLOͷӡ༻ —
όοΫΤϯυ — https://developers.cyberagent.co.jp/blog/archives/20354/
ΫϥΠΞϯτ ΫϥΠΞϯτଆͰಠࣗͷSLIΛӡ༻ • ΫϥογϡɺύʔεΤϥʔɺϑϨʔϜϨʔτ ैདྷͷSLI/SLOͷӡ༻ — ΫϥΠΞϯτ —
• Firebase Performance, CrashlyticsͷϩάΛར༻͠ɺϕϩγςΟΞϥʔτΛར༻ • Data PortalͰμογϡϘʔυཧ • ҧ࣌ӨڹͷൣғɺػೳͷॏཁʹԠͯ͡ΞΫγϣϯΛܾఆ
ैདྷͷSLI/SLOͷӡ༻ — ΫϥΠΞϯτ — ΠϯύΫτ ΞΫγϣϯ High ࢪࡦΛͱΊͯͰνʔϜશମͰՄೳͳݶΓϦιʔεΛͭ͗ࠐΈɺ ϗοτϑΟοΫεݕ౼ Middle ୲ͷΤϯδχΞΛΞαΠϯ্ͨ͠Ͱɺ࣍ճϦϦʔεͰඞͣରԠɻ ඞཁͰ͋ΕࢪࡦͷखͱΊΔ Low ୲ͷΤϯδχΞΛΞαΠϯ্ͨ͠Ͱɺ ։ൃϦιʔε͕ۭ͖࣍ୈదٓରԠ͢Δ
SLO͕αʔϏεͷՄ༻ੑͷஅ࣠ʹͳ͍ͬͯͳ͍ 1. emergencyϨϕϧͷΞϥʔτ͕ൃՐ 2. ΤϯδχΞ͕֤ࣗӨڹൣғʢػೳɺϢʔβʔʣௐࠪ 3. ΞΫγϣϯܾఆʢ͓ΒͤɺTwitterࠂɺࠂఀࢭɺϝϯςΠϯʣ
1. emergencyϨϕϧͷΞϥʔτ͕ൃՐ 2. SLI/SLOμογϡϘʔυͰӨڹൣғ֬ೝ 3. ӨڹͷͰ͍ͯΔSLIɺΤϥʔόδΣοτͷফඅ͔Β࣍ͷΞΫγϣϯΛܾఆ ैདྷͷSLI/SLOͷӡ༻ — ՝ᶃ — ຊདྷͷཧ ݱࡏͷӡ༻
όοΫΤϯυɺΫϥΠΞϯτʹดͨ͡ࢦඪͦΕͧΕͷΈͰՄ༻ੑΛอূͰ͖ͳ͍ αʔόʔͷSLO͕ຬͨ͞Ε͍ͯͯɺ • ૬खͷϝοηʔδ͕ݟΕ͍ͯͳ͍ → ΫϥΠΞϯτଆͰͷύʔεΤϥʔ͕ݪҼͰϨεϙϯεΛड৴Ͱ͖ͯͳ͍ •
৽نొͰ͖ͳ͍ → ֎෦SNSଆͰোൃੜɺΦϯϘʔσΟϯάϑϩʔ͕ແݶϧʔϓ • ϝοηʔδը໘Λ։͍ͨϢʔβʔͷ◦%͕ϝοηʔδͷӾཡʹޭ͍ͯ͠Δঢ়ଶ͔Θ͔Δ • ৽نొΛ։࢝ͨ͠Ϣʔβʔͷ◦%͕৽نొʹޭ͍ͯ͠Δ͔Θ͔Δ ैདྷͷSLI/SLOͷӡ༻ — ՝ᶄ — ຊདྷͷཧ ݱࡏͷӡ༻
ࢦ͢ཧঢ়ଶ • Ϣʔβʔͷظ͢ΔUXΛΧόʔ͢Δࢦඪઃఆ • SLI / SLOͷҧʹΑΔϢʔβʔӨڹѲΛ༰қʹ •
ϏδωεɺΫϥΠΞϯτɺαʔόʔؒͰαʔϏεঢ়ଶͷڞ௨ݴޠΛ࣋ͭ
ΑΓUXʹ͍ۙSLIɾSLOͷઃܭ
Ϣʔβʔͷظ͢ΔUXΛΧόʔ͢ΔSLIઃఆ ϝϯόʔ͔ΒʮαʔϏεͷՄ༻ੑʯͷٵ্͍͛ • औΓ͍ͨࢦඪɺఆٛɺܭଌํ๏ɺѱԽͨ͠߹ʹଛͳΘΕΔUXΛώΞϦϯά • ϑΥʔΧε͢ΔࢦඪɺίΞͳମݧΛ࢈ΜͰ͍ΔUXΛܾఆ͢Δ ϚΠΫϩαʔϏεͷυϝΠϯϞσϧͱ߹கͤ͞Δ
ϓϥοτϑΥʔϜͷఏڙ͢Δࢦඪͷ࠾༻ Apple, Google͕σΟϕϩούʔʹఏڙ͢ΔSLI • ϓϥοτϑΥʔϜଆͷߟ͑Δྑ͍ΞϓϦͷఆٛ • ΞϓϦετΞOSϨϕϧͰӨڹ͕͋Δ͜ͱ ◦ ASOʢApp Store
Optimizationʣ ◦ ༏ઌͯ͠ΞϯΠϯετʔϧΛଅ͞ΕΔ ◦ ΞϓϦͷόοΫάϥϯυͰͷੜଘ࣌ؒ • λοϓϧͰԼهͷࢦඪΛSLIͱͯ͠࠾༻ ◦ ΞϓϦαΠζ ◦ શମΫϥογϡʢANRʣ ◦ ىಈ࣌ؒ https://developers.cyberagent.co.jp/blog/archives/20354/
SLIҧΛ࠶ݱͨ͠ΞϓϦΛͬͨSLOܾΊ • աڈͷΠϯγσϯτ࣌ͷࢦඪɺࣄલώΞϦϯά͔Βɺ͖͍͠ʹ͋ͨΓΛ͚ͭΔ • σόοάػೳͰৄࡉͳ͖͍͠ΛௐՄೳͳΞϓϦΛ༻ҙ͠ɺ৮Γͳ͕Βٞ
࠶ఆٛͨ͠SLI όοΫΤϯυʢܧଓʣ • ϨΠςϯγʔ ΫϥΠΞϯτʢʹϓϥοτϑΥʔϜࢦඪʣ • ىಈ࣌ؒɺશମΫϥογϡɺΞϓϦαΠζ ίΞػೳʢʹػೳ͝ͱͷՄ༻ੑʣ
• ϩάΠϯɺ৽نొɺΧʔυϑϦοΫɺ ϝοηʔδɺ͓Ͱ͔͚ɺWish Մ༻ੑΛͱʹͨ͠SLIΛઃఆ ڞ௨ Ϋϥογϡ / ANR ػೳ͝ͱͷΩʔϝτϦΫε ϝοηʔδ: ಡΈࠐΈ ΧʔυϑϦοΫ: ࠶ϑϦοΫՄೳʹͳΔ·Ͱͷ࣌ؒ ɾɾɾ
ΫϥΠΞϯτଆͰͷSLI / SLOͷܭଌ
ΫϥΠΞϯτଆͰͷSLI / SLOͷܭଌ 1. ·ͣFirebase (+BigQuery) ʹ݁ͯ͠ϛχϚϜʹՔಇ • ػೳతʹेͳ͜ͱΛݕূ 2.
Monitoring, DashboardΛDataDogʹҠߦʢ͜Ε͔Βʣ • Ξϥʔτͷࣗ༝Λ্͛Δ • ଞͷϩάͰར༻ͯ͠ΔαʔϏεͱ߹ΘͤΔ
ΫϥΠΞϯτଆͰͷϞχλϦϯάπʔϧͷݕ౼ ͻͱ·ͣྉۚ໘Λߟྀ͠FirebaseΛར༻͠ɺʮӡ༻Λ։࢝ → ՝͕͋ΕϒϥογϡΞοϓʯͷํʹ 1. Firebase Crashlytics / Performance
+ BigQuery • FirebaseࣗମແྉͷͨΊBigQueryͷQuery, Active StorageͷྉۚͷΈ • Crashlytics, PerformanceطଘͰར༻͍ͯ͠ΔͨΊಋೖίετ͕͍ • BigQueryʹੵ͢Δ͜ͱͰൺֱతࣗ༝ߴ͘ར༻Ͱ͖Δ 2. DataDog RUM • طଘͷϞχλϦϯάπʔϧͱͯ͠DataDogΛར༻͍ͯ͠ΔͨΊπʔϧΛ౷ҰͰ͖Δ • ηογϣϯ୯Ґͷ՝ۚମܥͷͨΊɺࠓճྉۚ໘Ͱஅ೦ 3. New Relic One • όοΫΤϯυͰDataDogΛར༻͍ͯ͠Δ͜ͱɺྉۚ໘Λഎܠʹஅ೦
FirebaseͰߏ͢ΔϛχϚϜͳܭଌϑϩʔ Firebase ( Crashlytics + Performance ) ͷΈͰϛχϚϜͳϑϩʔ࣮ݱՄೳ • BigQueryʹExportʢϦΞϧλΠϜՄೳʣ
• BigQuery্ʹμογϡϘʔυදࣔ༻ͷதؒςʔϒϧ࡞ • Data PortalͰμογϡϘʔυදࣔ )LUHEDVH 3HUIRUPDQFH )LUHEDVH &UDVKO\WLFV 8VHU &UDVK .H\0HWULFV *RRJOH'DWD3RUWDO $XWR([SRUW %LJ4XHU\ ,QWHUPHGLDWHWDEOH %LJ4XHU\
Ξϥʔτͷઃఆͷࣗ༝ Firebase Performance • ࡞ͨ͠ࢦඪ͝ͱʹΞϥʔτͷઃఆ͕Մೳ • ͖͍͠Λ50ʙ95ύʔηϯλΠϧͷࢦఆ͕Մೳ Firebase Crashlytics •
ۙ1࣌ؒͷηογϣϯʹର͢ΔΫϥογϡ • ͖͍͠Λ0.1%ʙ1.0%ͰίϯτϩʔϧՄೳ
Ϋϥογϡϩάͷྨ https://firebase.google.com/docs/crashlytics/customize-crash-reports import UIKit import FirebaseCrashlytics final class LoginViewController: UIViewController
{ // ը໘Λදࣔ͢ΔλΠϛϯάͰCrashlyticsʹΧελϜΩʔΛઃఆ override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) Crashlytics.crashlytics().setCustomValue("login", forKey: "domain") } iOSΞϓϦͰͷϩάΠϯը໘ʹର͢Δ࣮ྫ ֤ػೳͷը໘දࣔ࣌ʹCrashlyticsʹΧελϜΩʔΛઃఆ͢Δ • ΧελϜΩʔΛͱʹBigQuery (Data Portal) ্ͰػೳυϝΠϯ͝ͱͷΫϥογϡΛूܭ • ػೳ͝ͱͷΞϥʔτઃఆͰ͖ͳ͍ͨΊɺVelocity Alert → μογϡϘʔυͰػೳӨڹ֬ೝ
ࠓޙʣϞχλϦϯάΛDataDogʹ౷Ұ ҎԼͷ؍͔ΒDataDogʹू͍ͯ͘͠ • ϞχλϦϯάͷू • Ϋϥογϡͷػೳ͝ͱͷΞϥʔτ )LUHEDVH 3HUIRUPDQFH )LUHEDVH &UDVKO\WLFV
$XWR([SRUW %LJ4XHU\ 4XHU\ SXVK IRUZRUGWRGDWDGRJ &ORXG)XQFWLRQV 'DWD'RJ &ORXG 3XE6XE WULJJHU
ӡ༻ʹ͍ͭͯ
ӡ༻ͷมԽ Πϯγσϯτൃੜ࣌ • PMɺόοΫΤϯυɺΫϥΠΞϯτϝϯόʔશһ͕ϢʔβʔӨڹΛஅ͢ΔҰ࣌ใͱͯ͠׆༻ ◦ ΤϯδχΞͷௐࠪΛͨͣͯ͠ωΫετΞΫγϣϯΛಈ͖ग़ͤΔΑ͏ʹ ྫʣશϢʔβʔͷ͓͠ΒͤɺTwitterࠂɺࠂͷఀࢭ • ِཅੑͷԼ
◦ ಛఆͷ݅ԼʢΩϟϯϖʔϯதͷΈʣʹൃੜ͢ΔύʔεΤϥʔΛ༏ઌߴ͘ΞϥʔτΛ͋͛ ΒΕΔΑ͏ʹ
ӡ༻ͷมԽ ϦϦʔεޙͷϝτϦΫε֬ೝ࣌ʹόοΫΤϯυɺΫϥΠΞϯτͷڞ௨ݴޠʹ • όοΫΤϯυɺΫϥΠΞϯτͦΕͧΕ͕શʹ͔Εͯ֬ೝ • ֬ೝՄೳͳϝτϦΫεɺμογϡϘʔυΛҰ௨Γཏతʹ֬ೝ • όοΫΤϯυɺΫϥΠΞϯτڞ௨ͷSLI /
SLO μογϡϘʔυΛ֬ೝ ◦ ௐࠪͷ߹SLIΛڞ௨ݴޠͱͯ͠ίϛϡχέʔγϣϯ • ҧ͕͋ͬͨ߹ʹؔ࿈ͷϝτϦΫεɺμογϡϘʔυΛ֬ೝ ◦ SLI / SLOಉ࣌ʹߦ͏ ݱࡏͷӡ༻ ैདྷͷӡ༻
ࠓޙͷల • ·ͩ·ͩӡ༻࢝ΊͨͯͳͷͰɺࠓޙݟΛஷΊ͍ͯ͘ • ࢦඪͦͷͷͷܧଓతͳϒϥογϡΞοϓ ◦ ࢦඪͷ͖͍͠ɺλʔήοτʢ90% → 50%ʣ ◦
ΤϥʔόδΣοτ ◦ ػೳͷΩʔϝτϦΫεͷର • DataDogͰҰؾ௨؏ͯ͠ϞχλϦϯάɺμογϡϘʔυΛཧͰ͖ΔΑ͏ʹ͢Δ • ৫ͰͷSLI / SLOͷਁಁ ◦ ݱঢ়·ͩ·ͩΤϯδχΞҎ֎ʹਁಁͰ͖ͯͳ͍
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠