Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Webサービスの品質とは何か?アラート地獄と監視の失敗、サービスレベル目標設計 から学んだ3つの答え
takuya542
September 07, 2018
Technology
4
5.6k
Webサービスの品質とは何か?アラート地獄と監視の失敗、サービスレベル目標設計 から学んだ3つの答え
Webサービスの品質とは何か?アラート地獄と監視の失敗、サービスレベル目標設計 から学んだ3つの答え
takuya542
September 07, 2018
Tweet
Share
More Decks by takuya542
See All by takuya542
takuya542
0
840
takuya542
1
940
takuya542
0
2k
takuya542
0
600
takuya542
0
75
takuya542
0
440
takuya542
0
370
takuya542
0
190
takuya542
0
2.4k
Other Decks in Technology
See All in Technology
yoshiki0705
0
210
nwiizo
1
130
ganariya
0
300
natsusan
0
200
papix
0
220
oracle4engineer
0
2.7k
kekeke_47
0
410
takuros
3
620
yosuke_furukawa
PRO
48
16k
indigo13love
2
340
muras
0
120
shirayanagiryuji
0
2.2k
Featured
See All Featured
shlominoach
176
7.4k
sferik
610
54k
paulrobertlloyd
71
1.4k
pedronauck
652
110k
malarkey
393
60k
caitiem20
308
17k
jrom
114
7.1k
addyosmani
310
21k
mojombo
358
62k
jeffersonlam
328
15k
matthewcrist
73
7.5k
chrislema
231
16k
Transcript
Copyright © 2009-2018 eureka, inc. All rights reserved. Takuya Onda
/ eureka, Inc. 2018-09-07 Builderscon Tokyo WebαʔϏεͷ࣭ͱԿ͔ʁ ΞϥʔτࠈͱࢹͷࣦഊɺαʔϏεϨϕϧඪઃܭ ͔ΒֶΜͩ3ͭͷ͑
Introduction ▪ Takuya Onda – eureka, Inc. – SRE team
Head
None
About Us - IAC/Match Group
Agenda ▪ WebΞϓϦέʔγϣϯࢹʹ·ͭΘΔٕज़τϨϯυ ▪ ࢹͷతͱɺݱͷ՝ͱ ▪ ΤϨΧͰͷࣦഊ / ཱͯ͠ࣄྫͷհ ▪
ࢹͷஈ֊త৽ɾ࣮ྫհ
8FCΞϓϦέʔγϣϯࢹʹ ·ͭΘΔٕज़τϨϯυ
ύϒϦοΫΫϥυͷ಄ ▪ ΑΓૣ͘ɺڧྗͳϚγϯϦιʔεͷௐୡ͕༰қʹ ▪ αʔόΛ͍ࣺͯΔલఏͷΞʔΩςΫνϟ
ࢹπʔϧͷॆ࣮ ▪ SaaSܕαʔόʔࢹαʔϏε ▪ ΠϯςάϨʔγϣϯͷॆ࣮
DevOpsɾSRE ▪ ߴ͍։ൃੜ࢈ੑͱ҆ఆӡ༻ͷཁٻ ▪ Culture, Automation, Lean, Measurement, Sharing
γεςϜͷෳࡶԽ ▪ ϚΠΫϩαʔϏεɾSPAɾσόΠεͷଟ༷Խ ▪ ඇػೳཁ݅ͷࢹͷχʔζ
͜Μͳܦݧ͋Γ·ͤΜ͔ʁ
▪ ʮ4UBUVT͕૿͑ͯ·͢ʯ – ຖ͜ͷ࣌ؒͰͯΔΑͳɺɺ – ͑Β͍ਓʮ͜ͷΞϥʔτେৎͳͷʁʯ ▪ ʮ%#ͷίωΫγϣϯ͕YYYΛ͑·ͨ͠ʯ – ͑ɺͲ͏͢Ε͍͍ͷʁࠓϐʔΫλΠϜͩΑʁ
– εύΠΫʁϝϯςೖΕΔʁͱΓ͋͑ͣ؍ɺɺʁ ▪ ʮ999ͷΤϥʔ͕ൃੜ͠·ͨ͠ʯ – ੲ͔Β͍Δਓʮ͜Εແࢹͯ͠0,ʯ – ࠷ۙೖͬͨਓʮʜʂʁʂʁʯ Ξϥʔτ͋Δ͋Δ
Ξϥʔτ͋Δ͋Δ ▪ ຊʹҟৗͳͷ͔Θ͔Βͳ͍ ▪ Ξϥʔτ͕ߦಈʹ݁ͼ͔ͭͳ͍ ▪ ਖ਼͍͠ํʹ͔͍ͬͯΔ͔Θ͔Βͳ͍ (࣭ͱ?)
γεςϜΛࢹ͢Δతͱ ▪ Ϣʔβʔͷຬ͢ΔੑೳཁٻʹԠ͍͑ͨ ▪ ͦͷͨΊʹɺଈ࣌ʹγεςϜҟৗΛݕ͍ͨ͠ ▪ ҟৗʹଈ࠲ʹରԠ͠ɺҟৗൃੜظؒΛ࠷খԽ͍ͨ͠
γεςϜΛࢹ͢Δతͱ ▪ Ϣʔβʔͷຬ͢ΔੑೳཁٻʹԠ͍͑ͨ ▪ ͦͷͨΊʹɺଈ࣌ʹγεςϜҟৗΛݕ͍ͨ͠ ▪ ҟৗʹଈ࠲ʹରԠ͠ɺҟৗൃੜظؒΛ࠷খԽ͍ͨ͠ ϢʔβͷٻΊΔ࣭ʹԠ͑Δͷ͕Ձ ࢹతͷͨΊͷखஈ
ΞΫγσϯτฏৗͨΕ By SRE Workbook ▪ ࣦഊͷίετΛ͑ΔͨΊʹૣΊʹಈ͘ͷ͕େࣄ ▪ MTTRʢฏۉ෮چ࣌ؒ)͕͍΄Ͳ։ൃऀෛ୲খ͍͞ ▪ ൃݟޙʹͳΔ΄Ͳम෮͕͍͠
ΤϨΧͰͷࢹͷࣦഊྫ
ΤϨΧͰͷࢹͷࣦഊ ▪ Ξϥʔτ͕ߦಈʹ݁ͼ͔ͭͳ͍ ▪ ࠓରԠ͖͢ͳͷ͔அͰ͖ͳ͍
Ξϥʔτ͕ߦಈʹ݁ͼ͔ͭͳ͍ ▪ 1ɿͱΓ͋͑ͣಈ͍ͯΔ ▪ 2ɿৗʹҟৗ ▪ 3ɿԿͰ͖ͳ͍
Ξϥʔτ͕ߦಈʹ݁ͼ͔ͭͳ͍ ▪ 1ɿͱΓ͋͑ͣಈ͍ͯΔ ▪ 2ɿৗʹҟৗ ▪ 3ɿԿͰ͖ͳ͍ • ϐʔΫλΠϜʹϩʔΞϕ͕ۤ͘͠ͳΔDB •
DynamoͷΩϟύγςΟ͕ΓΘ͔ͣ • ຖ࣌CPU͕ுΓ͘ϝʔϧ৴αʔό
Ξϥʔτ͕ߦಈʹ݁ͼ͔ͭͳ͍ ▪ 1ɿͱΓ͋͑ͣಈ͍ͯΔ ▪ 2ɿৗʹҟৗ ▪ 3ɿԿͰ͖ͳ͍ • ຖ٧·ΔδϣϒΩϡʔ •
ৗʹྲྀΕͯΔΞϓϦέʔγϣϯΤϥʔϩά • σϓϩΠͷͨͼൃੜ͢ΔΤϥʔ
Ξϥʔτ͕ߦಈʹ݁ͼ͔ͭͳ͍ ▪ 1ɿͱΓ͋͑ͣಈ͍ͯΔ ▪ 2ɿৗʹҟৗ ▪ 3ɿԿͰ͖ͳ͍ • 5xxΤϥʔ૿͑ͯΔ͚ͲԿ͜Εʁ(༷ࢠݟ) •
ετϨʔδܥͷανϡϨʔγϣϯ • ߏ࠶ݱੑ͕ͳ͍SPOFͳαʔό
ࠓରԠ͖͔͢அͰ͖ͳ͍ ▪ ݁ہ͜ΕϢʔβӨڹ͋Μͷʁ ▪ ͲΕ͘Β͍Өڹ͋Μͷʁ ▪ ͦͦఆྔԽͰ͖Μͷʁ ▪ ͜Ε߃ٱରԠ͠ͳ͍ͱϚζΠͷʁ ▪
ࣄۀࢪࡦΑΓ༏ઌ͢Μͷʁ
ࣾͷงғؾʹӨڹ ΞϥʔτݟΖͬͯݴ͏͚Ͳҙຯͳ͘Ͷʁ ͏ͪͷγεςϜɺຊʹେৎͳͷʁʁ Ͳ͏ͤΈΜͳؾʹͯ͠ͳ͍͍͍͠ ࠶ൃࢭɺ͍ͭԿมΘΒͳ͍͡ΌΜ
Ͳ͏ཱ͔͔ͬͯͪͬͨ
ํ ▪ 1ɿఆྔඪΛઃఆ͢Δ ▪ 2ɿΞϥʔτ = ଈ࠲ΞΫγϣϯͱ͢Δ ▪ 3ɿશମΛγϯϓϧʹཧ͢Δ ▪
4ɿࢹ͕ϥΫͳΞʔΩςΫνϟʹ͢Δ ▪ 5ɿҟৗݕͱύϑΥʔϚϯεඪΛ۠ผ͢Δ
1ɿఆྔඪΛઃఆ͢Δ ▪ αʔϏεϨϕϧࢦඪ (SLI) Λఆٛ ▪ αʔϏεϨϕϧඪ (SLO)Λઃఆ ▪ SLOΛΞϥʔτᮢͱλεΫ༏ઌͷج४ʹ
1ɿఆྔඪΛઃఆ͢Δ ▪ αʔϏεϨϕϧࢦඪ (SLI) Λఆٛ ▪ αʔϏεϨϕϧඪ (SLO)Λઃఆ ▪ SLOΛΞϥʔτᮢͱλεΫ༏ઌͷج४ʹ
• SLI = ޭϦΫΤετ / ૯ϦΫΤετ • SLO = SLI > 99.95 (ظؒɿ1िؒ)
2ɿΞϥʔτ = ଈ࠲ΞΫγϣϯͱ͢Δ ▪ ຊʹΞΫγϣϯ͕ඞཁͳͷ͚ͩΞϥʔτ໐Β͢ ▪ ଈ࠲ʹରԠ͕ՄೳͳΞʔΩςΫνϟʹม͍͑ͯ͘ • SLOະୡͷཁҼͱͳΔͷ •
ରԠʹ͔͔࣌ؒΔܥ (ετϨʔδܥͱ͔)
2ɿΞϥʔτ = ଈ࠲ʹΞΫγϣϯ͕ඞཁͳࣄͱ͢Δ ▪ ຊʹΞΫγϣϯ͕ඞཁͳͷ͚ͩΞϥʔτ໐Β͢ ▪ ଈ࠲ʹରԠ͕ՄೳͳΞʔΩςΫνϟʹม͍͑ͯ͘ • ଈ࠲ʹαʔόϦιʔεΛ૿ڧ /
ަͰ͖Δ • LB / API / Batch / DB / Cache / etc,,
3ɿશମΛγϯϓϧʹཧ͢Δ ▪ πʔϧͷ౷Ұ ▪ ࣭ͷఆٛᮢΛҰݩԽ • ࢹʹར༻͢ΔπʔϧΛ͠΅Δ • ࢹઃఆΛίʔυԽ͢Δ
3ɿશମΛγϯϓϧʹཧ͢Δ ▪ πʔϧͷ౷Ұ ▪ ࣭ͷఆٛᮢΛҰݩԽ • SLI / SLOΛ౷Ұ •
Threshold / Rate / Change / Anomaly
4ɿࢹ͕ϥΫͳΞʔΩςΫνϟʹ͢Δ ▪ αʔόͷަ͕Χϯλϯ ▪ ࣗલओٛΛΊΔ ▪ ࣄۀͱӡ༻(ࢹίετ)Λൺྫͤ͞ͳ͍
4-1ɿࢹ͕ϥΫ ~ αʔόަ͕Χϯλϯ ▪ ҟৗͷ͋Δαʔό͙ࣺͯ͢Δ – ίʔυ͔ΒϏϧυ͞ΕͨΠϝʔδ͕͙͢ೖՄೳͳঢ়ଶ Scheduling Rotate API
Worker
4-2ɿࢹ͕ϥΫ ~ ࣗલओٛΛΊΔ ▪ ڊਓ(AWS)ͷݞʹΔɻࢹରΛݮΒ͢ – εέʔϧΞτ/ Ξοϓ͕ϥΫ & ϑΣΠϧΦʔόཧෆཁ
S3 Aurora Dynamo ElastiCache SQS
4-3ɿࢹ͕ϥΫ ~ ࣄۀͱࢹίετΛൺྫͤ͞ͳ͍ ▪ ಉ͡ϓϩϏδϣχϯάϓϩηεͱٕज़ελοΫ – ٕज़ߏͷΏΒ͗Λ࡞Βͳ͍ Pairs JP Pairs
GL Capacity = LL Capacity = M
5ɿҟৗݕͱύϑΥʔϚϯεඪΛ۠ผ͢Δ ▪ ҟৗݕͱඪୡͷ؍ଌDurationΛ͚Δ ▪ αʔϏεΛ͑ͳ͍ͱ͍ͮΒ͍Λ۠ผ͢Δ • ҟৗɿΞϥʔτʹΑΔݕ(within 1min) • ඪɿఆظతͳݕࠪ(within
1week)
5ɿҟৗݕͱύϑΥʔϚϯεඪΛ۠ผ͢Δ ▪ ҟৗݕͱඪୡͷ؍ଌDurationΛ͚Δ ▪ αʔϏεΛ͑ͳ͍ͱ͍ͮΒ͍Λ۠ผ͢Δ • ͑ͳ͍ɿϩάΠϯ/ ݕࡧͰ͖ͳ͍ͳͲ • ͍ͮΒ͍ɿαʔϏεମײ͕͍
/ ॏ͍
ํ(࠶ܝ) ▪ 1ɿఆྔඪΛઃఆ͢Δ ▪ 2ɿΞϥʔτ = ଈ࠲ΞΫγϣϯͱ͢Δ ▪ 3ɿશମΛγϯϓϧʹཧ͢Δ ▪
4ɿࢹ͕ϥΫͳΞʔΩςΫνϟʹ͢Δ ▪ 5ɿҟৗݕͱύϑΥʔϚϯεඪΛ۠ผ͢Δ
ࢹͱΞʔΩςΫνϟΛ৽͠·ͨ͠
ࢹΛ৽
ࢹɾରԠΛஈ֊తʹਐԽ ▪ ҟৗΛΕΔ(ݟΕΔ) ▪ ҟৗΛݕͰ͖Δ ▪ ҟৗʹରԠͰ͖Δ ▪ ҟৗ͕ࣗಈͰम෮͢Δ
ҟৗΛΕΔ(ݟΕΔ) ▪ Datadog ▪ StackDriver Loggin
Metrics Aggregate AWS Integration DatadogʹΑΔϗετϕʔεࢹ &Integration
StackDriver LoggingʹΑΔϩάՄࢹԽͱϨϙʔτੜ Metrics / Log Monitoring Alert Slack call you
Log Aggregation Sync to DWH Generate Performance Report Hosting Report Dev & SRE
StackDriver LoggingʹΑΔϩάՄࢹԽͱϨϙʔτੜ Metrics / Log Monitoring Alert Slack call you
Log Aggregation Sync to DWH Generate Performance Report Hosting Report Dev & SRE • Ξϥʔτ & ଈ࣌ରԠ • Windowɿ1
StackDriver LoggingʹΑΔϩάՄࢹԽͱϨϙʔτੜ Metrics / Log Monitoring Alert Slack call you
Log Aggregation Sync to DWH Generate Performance Report Hosting Report Dev & SRE • ύϑΥʔϚϯεৼฦ • Windowɿ1िؒ
StackDriver LoggingʹΑΔϩάՄࢹԽͱϨϙʔτੜ Metrics / Log Monitoring Alert Slack call you
Log Aggregation Sync to DWH Generate Performance Report Hosting Report Dev & SRE • ύϑΥʔϚϯεৼฦ • Windowɿ1िؒ Ϩϙʔτൈਮ(Ұ෦)ɾϨΠςϯγώετάϥϜ
StackDriver LoggingʹΑΔϩάՄࢹԽͱϨϙʔτੜ Metrics / Log Monitoring Alert Slack call you
Log Aggregation Sync to DWH Generate Performance Report Hosting Report Dev & SRE • ύϑΥʔϚϯεৼฦ • Windowɿ1िؒ Ϩϙʔτൈਮ(Ұ෦)ɾRest EndpointผϦΫΤετϘϦϡʔϜਪҠ
ҟৗΛݕͰ͖Δ ▪ ֎ܗࢹ (αʔϏεࢹ)ʹΑΔΞϥʔτ ▪ ϦιʔεࢹʹΑΔΞϥʔτ ▪ ύϑΥʔϚϯεʹΑΔΞϥʔτ ▪ ϩάࢹʹΑΔΞϥʔτ
ҟৗΛݕͰ͖Δ ▪ ֎ܗࢹ (αʔϏεࢹ)ʹΑΔΞϥʔτ ▪ ϦιʔεࢹʹΑΔΞϥʔτ ▪ ύϑΥʔϚϯεʹΑΔΞϥʔτ ▪ ϩάࢹʹΑΔΞϥʔτ
• ଈରԠඞཁ • SSLηοτͰ(͔͔࣌ؒΔ)
ҟৗΛݕͰ͖Δ ▪ ֎ܗࢹ (αʔϏεࢹ)ʹΑΔΞϥʔτ ▪ ϦιʔεࢹʹΑΔΞϥʔτ ▪ ύϑΥʔϚϯεʹΑΔΞϥʔτ ▪ ϩάࢹʹΑΔΞϥʔτ
• εςʔτϨεϨΠϠݟͳ͍(ࣺͯΔ) • ετϨʔδܥݟΔ(ରԠʹ͔͔࣌ؒΔ)
ҟৗΛݕͰ͖Δ ▪ ֎ܗࢹ (αʔϏεࢹ)ʹΑΔΞϥʔτ ▪ ϦιʔεࢹʹΑΔΞϥʔτ ▪ ύϑΥʔϚϯεʹΑΔΞϥʔτ ▪ ϩάࢹʹΑΔΞϥʔτ
• Latencyલिൺ or લ࣌ؒൺͰͷมԽ • RequestࣦഊSLO x Status CodeͰݟΔ
ҟৗΛݕͰ͖Δ ▪ ֎ܗࢹ (αʔϏεࢹ)ʹΑΔΞϥʔτ ▪ ϦιʔεࢹʹΑΔΞϥʔτ ▪ ύϑΥʔϚϯεʹΑΔΞϥʔτ ▪ ϩάࢹʹΑΔΞϥʔτ
• લिൺ or લ࣌ؒൺͰͷมԽ • ৗ࣌ྲྀΕΔܥͳΒAnomaly detection͕٢
ҟৗʹରԠͰ͖Δ ▪ Ϧιʔεͷ૿ڧɺަɺϩʔϧόοΫΛ༰қʹ ▪ োൃੜ࣌ͷௐࠪίετΛԼ͛Δ
Ϧιʔεͷ૿ڧɺަɺϩʔϧόοΫΛ༰қʹ͢Δ Scale Out / Discard Scale Up Add Shard Scale
Out Scale Up Vertical Split
Ϧιʔεͷ૿ڧɺަɺϩʔϧόοΫΛ༰қʹ͢Δ Scale Out / Discard Scale Up Add Shard Scale
Out Scale Up Vertical Split • ؆୯ & ϦʔυλΠϜແ͘Ϧιʔε૿ͤΔ • ҟৗܥΛ؆୯ʹΓͤΔΑ͏ʹ • ετϨʔδܥ͕ΩϞ.ࣄલʹ༧ߦ࿅शΛ
ҟৗ͕ࣗಈͰम෮͢Δ ▪ ΦʔτώʔϦϯά ▪ ࠞಱ(ΧΦε)ͷೖ
ҟৗ͕ࣗಈͰम෮͢Δ ▪ ΦʔτώʔϦϯά ▪ ࠞಱ(ΧΦε)ͷೖ • ҟৗϗετͷΓ͠ϑΣΠϧΦʔό • ετϨʔδܥ͕ΩϞ •
ఆظతͳආ܇࿅
ҟৗ͕ࣗಈͰम෮͢Δ ▪ ΦʔτώʔϦϯά ▪ ࠞಱ(ΧΦε)ͷೖ • ҙਤతͳোͷೖ • ΦʔτώʔϦϯάͷڧ੍ࢼݧ &
ৗԽ • ઓ͍͜Ε͔Βͩͥɺɺʂ
·ͱΊ
ࠓͷͳ͠ ▪ WebΞϓϦέʔγϣϯࢹʹ·ͭΘΔٕज़τϨϯυ ▪ ࢹͷతͱɺݱͷ՝ͱ ▪ ΤϨΧͰͷࣦഊ / ཱͯ͠ࣄྫͷհ ▪
ϞχλϦϯάͷஈ֊తਐԽɾ࣮ྫհ
·ͱΊ ▪ ࢹͷతMTTRΛ࠷খԽ࣭͠ཁٻΛຬͨ͢ࣄ ▪ ΞϥʔτରԠͰ͖ͳ͚Εҙຯ͕ͳ͍ ▪ αʔϏε࣭ͷඪΛఆΊΔ͠ ▪ ࢹϨεͳΞʔΩςΫνϟΛࢦ͢͠ ▪
Ξϥʔτ + ఆظతͳ࣭νΣοΫΛDev / OpsͰ
·ͱΊ ▪ γεςϜʑ & ෳࡶԽ͍ͯ͘͠ ▪ Γ͍ͨ͜ͱͨ͘͞Μ͋Δʂ ▪ ΤϨΧSREνʔϜͷϝϯόʔΛืूதͰ͢ʂ
CONFIDENTIAL Thank you :) Thank you :)
Any Questions??