CloudNative Days Spring 2021 ONLINE でお話したときの資料です https://event.cloudnativedays.jp/cndo2021/talks/201
SLOࡦఆͱΞϥʔτઃఆ·Ͱͷ͍ಓͷΓαΠϘζגࣜձ্ࣾԬ ਅ (@ueokande)CloudNative Days Spring 2021 Online
View Slide
Me• ্Ԭ ਅ (@ueokande)• αΠϘζͰDevOpsͯ͠·͢• kintone.comͷ։ൃɾӡ༻• ٳOSSΛ࡞ͬͨΓจॻΛॻ͍ͨΓ2
kintone• ۀγεςϜΛ؆୯ʹ࡞ΕΔB2B͚αʔϏε• ࠃ֎18,000+ࣾͰಋೖ• USࢢ͚ʹʮkintone.comʯͱ͍͏ϒϥϯυͰల։ͯ͠AWS্Ͱӡ༻3
ࠓ͢͜ͱ• US͚kintoneͷ SLO ͱ Ξϥʔτ ʹؔ͢ΔऔΓΈ• kintone.comΛAWS্Ͱϩʔϯν͔ͯ͠ΒݱࡏʹࢸΔ·ͰɺSLOɾΞϥʔτΛԿ͔ݟ͖ͯ͠·ͨ͠• Ͳ͏͍ͬͨ؍Ͱվળͯ͠ɺͦͷ݁ՌͲ͏ͳ͔ͬͨΛ͓͠·͢4
ҎલͷSLOͱΞϥʔτ5
SLO/SLI/SLA͓͞Β͍6݅Λຬͨͤͳ͍ͱ͖ԿΛ͢Δ͔ͷ߹ҙαʔϏεͷ৴པੑͷࢦ͖͢ඪSLOService Level ObjectiveSLIService Level IndicatorSLAService Level AgreementαʔϏεͷ৴པੑΛද͢ࢦඪྫ: 30ؒͷϦΫΤετޭ99.9% ྫ: 30ؒͷϦΫΤετޭ ྫ: ϦΫΤετޭ99%ΛԼճΕશֹฦۚ
ҎલͷkintoneͷSLOͱΞϥʔτ• kintone͕ར༻Ͱ͖Δ͔൱͔ʢՔಇʣʹணͨ͠SLO• ੑೳɾεϧʔϓοτͳͲɺػೳ໘Ϣʔβʔࢹͷࢦඪͳ͔ͬͨ• ͦΕʹجͮ͘Ξϥʔτઃఆ͍ͯ͠ͳ͍7
༗༻ͳSLO͕ͳ͍ͱ…• దͳSLOࢦඪ͕ͳ͘Ξϥʔτֻ͚ʹ͍͘• ۓٸରԠ͕ඞཁ͔ɺνϡʔχϯάඪɺλεΫͷ༏ઌ͕ܾΊʹ͍͘8ὸʮͳΜ͔LJOUPOFͷද͕ࣔΊͬͪΌ͍Μ͚ͩͲʯ
SLOɾΞϥʔτΛݟ͖͔͚ͬ͢• ࠃͷࣗࣾΠϯϑϥͰఏڙ͍ͯͨ͠US൛kintoneΛAWSʹ͓Ҿӽ͠• ΞʔΩςΫνϟΛ৽͠ɺSLOɾΞϥʔτγεςϜݟ͢νϟϯε9
SLOɾΞϥʔτ (v1)10
SLOɾΞϥʔτ (v1)• AWS൛kintone.comͷϩʔϯνલʹSLOͱΞϥʔτΛઃఆ• ओཁͳػೳʢAPIʣʹର͢Δ͚ࣾͷSLO• ҎલͷSLOʹج͖ͮɺμϯλΠϜΛߟྀͨ͠SLOΛઃఆ11Ϩίʔυߋ৽ɺΞϓϦ࡞ɺ…
• μϯλΠϜʹجͮ͘SLOΛܾΊΔSLO (v1) ͷྫ• API͝ͱͷμϯλΠϜΛఆٛ12͋ΔAPI͕5ΟϯυͰ͍ͣΕ͔ͷج४Λ͑ΕμϯλΠϜ• ΟϯυͷΤϥʔ݅N݅Ҏ্ɺΤϥʔϨʔτ͕M%Ҏ্• ΟϯυͷԠ࣌ؒXύʔηϯλΠϧ͕YඵҎ্͋ΔAPIͷ݄ؒՔಇ͕99.9%
μϯλΠϜͱSLO• APIͷ݄ؒՔಇ͕99.9% = ݄ؒμϯλϜ43135min.30day× × ××× ×× ××××××× ××× × ×× ×200500ΤϥʔόδΣοτ
Ξϥʔτ (v1)• μϯλΠϜͷఆٛʹج͍ͮͨΞϥʔτΛͦΕͧΕͷAPIʹઃఆ145ΟϯυͰ͍ͣΕ͔ͷᮢʹୡ͢ΔͱΞϥʔτ• ΟϯυͷΤϥʔ݅N݅Ҏ্ɺΤϥʔϨʔτ͕M%Ҏ্• ΟϯυͷԠ࣌ؒXύʔηϯλΠϧ͕YඵҎ্
݁Ռ• SLOɾΞϥʔτ (v1) Λ͠Β͘ӡ༻ͯ͠՝͕͍͔ͭ͘ݟ͔ͭͬͨ• Ξϥʔτ͕աහ͗͢Δ• Ξϥʔτج४ͷఆ͕ٛᐆດʹͳΔ• γϯϓϧ͡Όͳ͍15
աහ͗͢ΔΞϥʔτʛΞϥʔτ (v1) ͷ݁Ռ• Ξϥʔτͷج४͕ඇৗʹաහͩͬͨ• ϦΫΤετͷগͳ͍ػೳεύΠΫͰݦஶ• աහա͗ΔΞϥʔτνʔϜϝϯόʔͷ݈߁ঢ়ଶʹӨڹ͢Δ16
Ξϥʔτج४͕ᐆດʹʛΞϥʔτ (v1) ͷ݁Ռ• ʮաහ͗͢ΔΞϥʔτʯͷ࣍ͷΞΫγϣϯᮢͷ؇• ϩʔϯνޙ͠Β͘ɺΞϥʔτͷௐΛ܁Γฦͨ͠• ௐΛ܁Γฦ͍ͯ͠Δͱʮ͜ͷᮢͲ͏͍͏ࠜڌͰܾΊ͚ͨͬʁʯͱɺج४ͷҙਤ͕Θ͔Βͳ͘ͳΔ͜ͱ17
γϯϓϧ͡Όͳ͍ʛΞϥʔτ (v1) ͷ݁Ռ• ՔಇܭࢉͷͨΊʹμϯλΠϜͱ͍͏֓೦Λಋೖ• μϯλΠϜɺͲΕ͘Β͍αʔϏεΛར༻Ͱ͖ͳ͘ͳ͔ͬͨͷίϛϡχέʔγϣϯʹ༗༻• ҰํͰSLO࣮ͷूܭ͕ෳࡶͩͬͨΓɺΞϥʔτ͕ෳࡶʹ18
SLOͱΞϥʔτͷݟ͠• SLOɾΞϥʔτ͕ਖ਼͘͠ػೳͯ͠ͳ͍͜ͱʹؾ͘• ਖ਼͘͠ͳ͍SLOϢʔβʔʹՁΛಧ͚ΒΕͳ͍• ਖ਼͘͠ͳ͍ΞϥʔτϝϯόʔͷϞνϕʔγϣϯʹؔΘΔ• SLOɾΞϥʔτΛࠜຊతʹݟ͢͜ͱʹ (v2)19
SLOɾΞϥʔτ (v2)20
The Site Reliability Workbook• Site Reliability Engineeringͷଓฤ• ΑΓ࣮ફతͳӡ༻ํ๏ʹϑΥʔΧε• ͜ͷຊΑΓSLOͱΞϥʔτΛݟ͠21
ͳͥSLO͕ඞཁ͔ʁ• SLOΛܾΊΔ͜ͱͰσʔλυϦϒϯͳίϛϡχέʔγϣϯ͕Ͱ͖Δ• ͜Εো͔൱͔• ύϑΥʔϚϯενϡʔχϯάͷج४• λεΫͷ༏ઌ• ৴པੑػೳͰ͋Γސ٬ʹಧ͚ΒΕΔՁ22SLO: ։ൃɺSREɺεςʔΫϗϧμʔͰ߹ҙ͢ΔҰ؏ͨ͠ඪ
SLO (v2)• SLO (v1) ͷলΛͱʹSLO (v2) Λ࠶ઃఆ• ʮkintoneΛշదʹ͑Δ͔ʯߟ͑ͯج४Λߟ͑Δ• ΤϥʔϨʔτɾϨεϙϯελΠϜΛݸʑʹγϯϓϧͳSLOΛઃఆ23• ͋ΔAPIͷɺ1ϲ݄ͷϦΫΤετޭ͕M%• ͋ΔAPIͷɺ1ϲ݄ͷϦΫΤετͷX%͕Ԡ࣌ؒYඵະຬ
μογϡϘʔυʹΑΔSLOୡͷՄࢹԽ• Ҏલ (v1) ݄ʹSLOͷ࣮Λܭࢉ͢Δ͚ͩͩͬͨ• ݄ͷ్தͰΓͷΤϥʔόδΣοτ֬ೝͰ͖ͳ͔ͬͨ• ৽͍͠SLOݱࡏͷୡΛμογϡϘʔυ্ʹՄࢹԽ24
SLOμογϡϘʔυͷڞ༗• ΈΜͳ͕ݟ͑ΔॴʹݱࡏͷSLO࣮Λදࣔ25
SLOͱΞϥʔτ• ͳͥγεςϜʹΞϥʔτ͕ඞཁ͔ʁ• োΛ͍ͪૣ͘ؾ͖͍ͨ = SLOΛҧ͢Δલʹम෮͍ͨ͠• SRE߹ҙͨ͠ΤϥʔόδΣοτΛશྗͰकΔ͖• ΤϥʔόδΣοτΛ͍ΔલʹোΛݕͰ͖ΔΞϥʔτ͕ඞཁ26
όʔϯϨʔτʹجͮ͘ΞϥʔτʛΞϥʔτ (v2)• όʔϯϨʔτ1 = SLOͷظؒͰΤϥʔόδΣοτΛ͍Δ• ΤϥʔόδΣοτΛ͍ΔͷোΛؾ͘ΞϥʔτΛֻ͚Δ27ͨͱ͑30όʔϯϨʔτ: ΤϥʔόδΣοτͷফඅΛද͢ࢦඪ
όʔϯϨʔτͱΤϥʔόδΣοτͷؔ28όʔϯϨʔτ215ͰΤϥʔόδΣοτΛ͍ΔόʔϯϨʔτ103ͰΤϥʔόδΣοτΛ͍ΔΤϥʔόδΣοτফඅྔ0%20%40%60%80%100%ܦա0 5 10 15 20 25 30όʔϯϨʔτ130ͰΤϥʔόδΣοτΛ͍Δ
• SRWBʹҎԼͷ2ͭͷόʔϯϨʔτ͔Βελʔτ͢ΔͱΑ͍ͱ͋Δ• SLO͕1ϲ݄ϦΫΤετޭ99.9%ͷͱ͖ͷΞϥʔτͷྫόʔϯϨʔτʹجͮ͘Ξϥʔτͷᮢ29ΤϥʔόδΣοτফඅྔΟϯυ όʔϯϨʔτ2% 1H 14.45% 6H 6APIͷ1࣌ؒͷΤϥʔϨʔτ > (14.4 * 0.001)APIͷ6࣌ؒͷΤϥʔϨʔτ > (6 * 0.001)
SLOɾΞϥʔτ (v2) ͷ݁Ռ• ΤϥʔόδΣοτΛ͍Βͣʹ͙͢ʹऩଋ͢ΔোʢGCʹΑΔԆͳͲʣͰؒى͜͞ΕΔ͜ͱ͕ݮͬͨ• μογϡϘʔυʹΑΓνʔϜͰSLOͷҙ͕ࣝߴ·ΓɺΞϥʔτͱͷؔੑΘ͔Γ͘͢ͳͬͨ• γϯϓϧͳSLOͰෳࡶͳ࣮ίϛϡχέʔγϣϯίετ͕ݮͬͨ30
Lesson LearnedSLOɾΞϥʔτվળ͔Βͷֶͼ
୭ͷͨΊͷSLO͔• SLOΛୡ͢Δ͜ͱͰͤʹͳΔਓʢϢʔβʔʣ͕͍Δͣ• ӡ༻ͷಓ۩͚ͩͰͳ͘ɺͦͷഎܠʹαʔϏεͷར༻ऀ͕͍Δ• ϢʔβϏϦςΟ৴པੑΛߟྀͯ͠SLOΛݟͦ͏32
γϯϓϧͰ͋Ε• ෳࡶͳSLOίϛϡχέʔγϣϯͰোͱͳΔ• ޱ಄Ͱਓʹઆ໌Ͱ͖Δ͘Β͍ͷγϯϓϧ͕͞େࣄ• ෛ࠴ʹͳΔલʹSLOΛৼΓସ͑ΕΔΑ͏ʹ͠Α͏33
ΈΜͳ͕ݟ͑ΔॴʹՄࢹԽ• ݟ͑Δॴಋઢ͕ͳ͍ͱ୭ҙࣝ͠ͳ͍• ՄࢹԽʹΑΓɺϝϯόʔશһ͕SLOΛҙࣝ͢Δ͜ͱ͕૿͑ͨ• ݱࡏνʔϜͰμογϡϘʔυΛݟΔձΛ2िؒʹ1ճ։࠵34
σʔλʹجͮ͘ίϛϡχέʔγϣϯ• λεΫͷ༏ઌSLOʹج͍ܾͮͯΊΒΕΔΑ͏ʹ• ։ൃɺSREɺεςʔΫϗϧμʔؒͰҰ؏ͨ͠ඪΛઃఆͰ͖Δ• νϡʔχϯάΛ͢Δͱ͖ɺצʹཔΒͣσʔλͰஅ͠Α͏35
͜Ε͔ΒͷνϟϨϯδ• kintoneͷ։ൃνʔϜͷSLOΛΊΔ׆ಈ• SLOະୡͳͷʹΞʔΩςΫνϟతʹνϡʔχϯά͕͍͠έʔε• Ϣʔβʔͷ͍ํ࣍ୈͰ༻ҙʹSLOΛഁΕΔέʔε36
·ͱΊ• SLOʹΑͬͯҰ؏ͨ͠σʔλυϦϒϯͳίϛϡχέʔγϣϯ͕Ͱ͖Δ• ఆظతSLOɾΞϥʔτͷվળͰͷֶͼ͕͋ͬͨ• ୭ͷͨΊͷSLO͔ʁ• γϯϓϧͰ͋Ε• ΈΜͳ͕ݟ͑ΔॴͰՄࢹԽ• σʔλʹجͮ͘ίϛϡχέʔγϣϯ• ͜Ε͔ΒSLOΛ͍͍ͬͯͧ͘💪37