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
APIへのアクセスが急増して慌てた話 / We Should Know our Applica...
Search
Takeshi Nakamoto
July 04, 2018
Programming
0
730
APIへのアクセスが急増して慌てた話 / We Should Know our Application Performance
Takeshi Nakamoto
July 04, 2018
Tweet
Share
More Decks by Takeshi Nakamoto
See All by Takeshi Nakamoto
JJUG-2018-Fall-MF2
tksh_n6o
0
550
Other Decks in Programming
See All in Programming
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
6
670
rails newと同時に型を書く
aki19035vc
5
610
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
180
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
200
毎日13時間もかかるバッチ処理をたった3日で60%短縮するためにやったこと
sho_ssk_
1
500
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
360
103 Early Hints
sugi_0000
1
330
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
410
GitHubで育つ コラボレーション文化 : ニフティでのインナーソース挑戦事例 - 2024-12-16 GitHub Universe 2024 Recap in ZOZO
niftycorp
PRO
0
1.1k
為你自己學 Python
eddie
0
500
Monixと常駐プログラムの勘どころ / Scalaわいわい勉強会 #4
stoneream
0
320
テストコード書いてみませんか?
onopon
2
290
Featured
See All Featured
Optimizing for Happiness
mojombo
376
70k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
850
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
Learning to Love Humans: Emotional Interface Design
aarron
274
40k
We Have a Design System, Now What?
morganepeng
51
7.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Building Adaptive Systems
keathley
38
2.3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
BBQ
matthewcrist
85
9.4k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Transcript
APIͷΞΫηε͕ٸ૿ͯ͠߄ͯͨ 2018/06/29 Minami Aoyama Night#6 தຊ ࢤ 1
ࣗݾհ தຊࢤʢͳ͔ͱ͚ͨ͠ʣ גࣜձࣾϚωʔϑΥϫʔυʢʙʣ αʔόʔαΠυΤϯδχΞʢ+BWBʣ ੩Ԭݝॣ౦܊ઘொࡏॅ 2
ઘொ ɾࡾౡӺʙాொӺ࣌ؒ ͩ͜·ͷΈ ɾࢠҭͯࢧԉΛܝ͍͛ͯΔ ग़ੜ͕੩Ԭݝτοϓ ɾڈʮ͞Θ͔ʯ͕Ͱ͖·ͨ͠ 3
ຊͷ༰ ˔ ϚωʔϑΥϫʔυͱΞάϦήʔγϣϯγεςϜͷհ ˔ ಥવͷෛՙ૿ͰγεςϜ͕ࢭ·Γ͔͚ͨ࣌ʹͨ͜͠ͱ ˔ ࢭ·Βͳ͍Α͏ʹ͢ΔͨΊʹͨ͜͠ͱ ˔ ·ͱΊ 4
ຊͷ༰ ˔ ϚωʔϑΥϫʔυͱΞάϦήʔγϣϯγεςϜͷհ ˔ ಥવͷෛՙ૿ͰγεςϜ͕ࢭ·Γ͔͚ͨ࣌ʹͨ͜͠ͱ ˔ ࢭ·Βͳ͍Α͏ʹ͢ΔͨΊʹͨ͜͠ͱ ˔ ·ͱΊ 5
ϚωʔϑΥϫʔυʹ͍ͭͯ ʮ͓ۚΛલɻਓੜΛͬͱલɻʯͱ͍͏ϛογϣϯʹͱ͖ͮɺ ݸਓ๏ਓɺͯ͢ͷਓͷ͓ۚͷ՝Λղܾ͢ΔαʔϏεΛఏڙ͍ͯ͠·͢ɻ 6
ΞΧϯτΞάϦήʔγϣϯͱ ిࢠϚωʔ EC ূ݊ ۜߦ ɾߴɺೖग़ۚ໌ࡉ 0000-0000-0000-0000 0000-0000-0000-0000 ΫϨδοτΧʔυ ɾ໌ࡉɺར༻ߴ
ɾҾམɾֹ ɾϙδγϣϯ ɾߪೖཤྺ ɾར༻ཤྺ Ϗδωε ɾച্ใ 7
ΞάϦήʔγϣϯγεςϜͷߏ ΞάϦ%# ΞάϦ ϓϩμΫτ܈ ֤ۚ༥ػؔ : σʔλͷྲྀΕ … BEFORE 8
ΞάϦήʔγϣϯγεςϜͷߏ ΞάϦ%# ΞάϦ ϓϩμΫτ܈ ֤ۚ༥ػؔ : σʔλͷྲྀΕ … BEFORE ͍Ζ͍ΖπϥΠʜ
9
ΞάϦήʔγϣϯγεςϜͷߏ ΞάϦ%# ΞάϦ ϓϩμΫτ܈ ֤ۚ༥ػؔ : σʔλͷྲྀΕ AFTER ΞάϦ API
"1*ܦ༝ʹ౷Ұ … 10
ΞάϦήʔγϣϯγεςϜͷߏ ΞάϦ%# ΞάϦ ϓϩμΫτ܈ ֤ۚ༥ػؔ : σʔλͷྲྀΕ AFTER ΞάϦ API
… ࠓճίίͷ 11
ຊͷ༰ ˔ ϚωʔϑΥϫʔυͱΞάϦήʔγϣϯγεςϜͷհ ˔ ಥવͷෛՙ૿ͰγεςϜ͕ࢭ·Γ͔͚ͨ࣌ʹͨ͜͠ͱ ˔ ࢭ·Βͳ͍Α͏ʹ͢ΔͨΊʹͨ͜͠ͱ ˔ ·ͱΊ 12
ಥવͷ503 ˔ ಥαʔϏε͔ΒΞϥʔτ͕͘ΔʢΤϥʔϖʔδΛฦ͢ʣ ˓ ͜ͷ࣌ͰΞάϦ"1*ͷύϑΥʔϚϯε͕ྼԽ͍ͯ͠Δೝࣝͳ͠ ˔ ଞͷ։ൃऀ͕ௐࠪͯ͠ɺΞάϦ"1*͕Ϋοι͍ͱ࿈བྷ͕͋Δ ˓ ͜ͷ࣌ͰॳΊͯμογϡϘʔυΛ֬ೝ ˔
ݟͨ͜ͱͷͳ͍άϥϑΛ֬ೝ ˓ ୈҰใ͔Β΄Ͳܦա -PBE"WFSBHF 13
ॳಈͷল ˔ ϦϦʔε࡞ۀͳͲΛ͍ͯ͠ͳ͍ͷͰͳ͍ͱࢥ͍͜ΜͰ͍ͨ ˓ ͔ͤͬ͘༻ҙ͍ͯ͠ΔμογϡϘʔυ͢Βݟͯͳ͔ͬͨ 14
ௐࠪ & ϦϦʔε ˔ /FX3FMJD%BUB%PHΛݟͯ%#ίωΫγϣϯपΓͰ٧·ͬͯͦ͏ ˓ %#ෛՙΛ্͛ͳ͍Α͏ߜͬͯಈ͔͍ͯͨ͠ ˔ ͍ͬͨΜϓʔϧΛ૿͢ϦϦʔεΛߦ͏ ˔
ϦϦʔε͕ྃ͠ɺ"1*͕ਖ਼ৗʹϨεϙϯεΛฦ͢Α͏ʹͳΔ ˓ ͨͩɺϦϦʔεͷӨڹͱ͍͏ΑΓɺෛՙͷϐʔΫΛա͗ͨ͜ͱ͕େ͖͔ͬͨ ˔ ୈҰใ͔Β࣌ؒ΄ͲͰฏৗ௨Γͷঢ়ଶʹͳͬͨ 15
ෆதͷ͍ ˔ "1.ʢ/FX3FMJDʣΛ͍ͬͯͨͷͰͱΓ͋͑ͣͷରԠ͕Ͱ͖ͨ ˔ ϝτϦΫεϞχλϦϯάʢ%BUB%PHʣ͍ͯͨ͠ͷͰ ޙ͔ΒͲΜͳঢ়ଶͩͬͨͷ͔Λ؍͢Δ͜ͱ͕Ͱ͖ͨ ˔ Ϩεϙϯε͘ͳ͕ͬͨɺશʹఀࢭ͠ͳ͔ͬͨ 16
ෛՙ૿ͷݪҼ ˔ .'͕৽͘͠࿈ܞΛ։࢝ͨ͠αʔϏε͔Βͷྲྀೖ૿ ˓ ࿈ܞઌͷϢʔβʔ͚ʹΩϟϯϖʔϯ͕ߦΘΕ͍ͯͨ ˓ ࣄલͷڞ༗͕ͪΌΜͱͰ͖ͯͳ͔ͬͨ ˔ ௨ৗ࣌ͷഒ΄ͲͷϦΫΤετ૿ ˓
ϐʔΫ࣌ͷഒ 17
ຊͷ༰ ˔ ϚωʔϑΥϫʔυͱΞάϦήʔγϣϯγεςϜͷհ ˔ ಥવͷෛՙ૿ͰγεςϜ͕ࢭ·Γ͔͚ͨ࣌ʹͨ͜͠ͱ ˔ ࢭ·Βͳ͍Α͏ʹ͢ΔͨΊʹͨ͜͠ͱ ˔ ·ͱΊ 18
·ͣௐࠪɺͷલʹ ˔ ࣮͜ͷલʹߴෛՙʹͳΓαʔϏε͕ෆ҆ఆʹͳ͍ͬͯͨ ˔ ϦΫΤετ૿ՃʹΑΓɺ%#͕͘ͳΓɺͭΒΕͯ"1*͘ͳͬͨ ˔ εϩʔΫΤϦվળ ˔ ࢭΊͯྑ͍ॲཧΛࢭΊΔ ˔
"1*αʔόʔ૿͞ͳ͍ͱ -PBE"WFSBHF 19
DataDogͷμογϡϘʔυ 20
·ͣௐࠪ ˔ /FX3FMJD%BUB%PHΞϓϦέʔγϣϯϩάΛ֬ೝ ˓ %#ͷෛՙͦΜͳͰͳ͍ ˓ "1*αʔόʔͷ$16ෛՙ͕ߴ͔ͬͨ ˓ ίωΫγϣϯϓʔϧ͔ΒίωΫγϣϯΛऔಘ͢Δ͕ͪ࣌ؒଟ͔ͬͨ ˔
αʔόʔͷੑೳ͕͋·Γߴ͘ͳ͔ͬͨͷͰॲཧ͖͠Εͳ͔ͬͨͱ݁ ˓ εέʔϧΞοϓͱಉ࣌ʹɺ૿͢ 21
ࠓޙͲ͏͢Δ͔ ˔ ΩϟϯϖʔϯͳͲ͕͋Δͱ͖͋Β͔͡Ί࿈བྷͯ͠Β͏ ˔ ͕ͩɺࣄલʹڞ༗ͯ͠ΒͬͨϦΫΤετ૿ʹ͑ΒΕΔͷ͔ʁʁ ˔ ͦ͏ͩɺෛՙςετ͠Α͏ 22
ෛՙςετ ˔ϦΫΤετϩάΛ࠶ੜͯ͠ͷαʔόʔʹෛՙΛ͔͚Δ ˔ෛՙΛ͔͚ΔαʔόʔͷΛ૿ͯ͠ϦΫΤετ૿Λ࠶ݱ͢Δ ˔͖͍͠Λ୳͢ ˓ͲΕ͘Β͍ͷϦΫΤετͳΒීஈͲ͓ΓॲཧͰ͖Δͷ͔ ˓ෛՙ͕૿͑ͨͱ͖ʹͲͷϦιʔε͕࠷ॳʹݶքʹͳΔͷ͔ ˔ςετछྨߦͬͨ ˓%#ίωΫγϣϯͷͱ͖ʹͲΕ͚ͩॲཧͰ͖Δ͔ ˓%#ίωΫγϣϯͷͱ͖ʹͲΕ͚ͩॲཧͰ͖Δ͔ 23
ෛՙςετ GitHub - tsenart/vegeta: HTTP load testing tool and library
˔ બΜͩཧ༝ ˓ ϦΫΤετϩάΛ࠶ੜͰ͖Δʢ؆୯ʂʣ ˓ ͙͑͢ΔʢόΠφϦஔ͚ͩ͘ʂʣ ˓ $-*Ͱૢ࡞Ͱ͖ΔʢεΫϦϓτͰ੍ޚͰ͖Δʂʣ 24
ෛՙςετ ˔ ؒʹຊ൪αʔόʔͰςετ ˓ ࣮ࡍͷαʔόʔͰੑೳΛݟ͔ͨͬͨ ˔ ෛՙΛͩΜͩΜ૿͍ͯ͘͠ • ݁Ռ%BUB%PHͰޙ͔Β֬ೝ ˓
͍͢͝ศརͩͬͨ vegeta API vegeta vegeta … 25
ෛՙςετ 100 0 CPUར༻ 26
ෛՙςετ • ҆ఆͯ͠ॲཧͰ͖ΔϦΫΤετͷ্ݶΛΔͨΊͷςετ ◦ ஈ֊తʹෛՙΛ૿͢ ◦ Ϩεϙϯε͕ѱԽͨ͠Βऴྃ 100 0 CPUར༻
27
ෛՙςετ • DBίωΫγϣϯ1ͭͰ҆ఆͯ͠ॲཧͰ͖ΔϦΫΤετͷ্ݶΛΔͨΊͷςετ ◦ ஈ֊తʹෛՙΛ૿͢ ◦ Ϩεϙϯε͕ѱԽͨ͠Βऴྃ 100 0 CPUར༻
28
ෛՙςετͷͦͷޙ ˔ ίωΫγϣϯͰॲཧͰ͖ΔϦΫΤετ͕ग़ͨ ˔ ίωΫγϣϯͭ͋ͨΓͰॲཧͰ͖ΔϦΫΤετ͕ग़ͨ ˓ ίωΫγϣϯͷϦΫΤετΛॲཧͰ͖͍ͯͳ͍ ˔ %#·ͩ༨༟͕͋Γͦ͏ ˓
ͬͺΓ$16͕ϘτϧωοΫͬΆ͍ ˓ αʔόʔͷεέʔϧΞοϓ ˓ ແବͳίʔυ͕ͳ͍͔ௐࠪ 29
ͦͷޙͰͬͨ͜ͱ ˔ ෛՙςετͰܾΊ͖͍ͨ͠ʹԠͨ͡Ξϥʔτ ˔ ίʔυͷݟ͠ ˓ ϨεϙϯελΠϜ͕ʹ ˔ %#ͷ ˔
ෛՙςετճ ˓ தʹΦϯϥΠϯͰ࣮ࢪ ˓ εϧʔϓοτഒʹͳͬͯͨ ˔ ল ˓ ٸʹϦΫΤετ͕૿͑ͨܦݧ͕ॳΊͯͩͬͨ 30
ຊͷ༰ ˔ ϚωʔϑΥϫʔυͱΞάϦήʔγϣϯγεςϜͷհ ˔ ಥવͷෛՙ૿ͰγεςϜ͕ࢭ·Γ͔͚ͨ࣌ʹͨ͜͠ͱ ˔ ࢭ·Βͳ͍Α͏ʹ͢ΔͨΊʹͨ͜͠ͱ ˔ ·ͱΊ 31
·ͱΊ ˔ ΞϓϦέʔγϣϯͷੑೳΛ۩ମతͳͰѲ͢Δ ˓ ҆ఆՔಇ͢ΔͷͲͷ͘Β͍͔ ˓ ҆ఆՔಇ͠ͳ͘ͳΔϘτϧωοΫԿͳͷ͔ ˔ αʔϏεଆͷΠϕϯτΛѲ͓ͯ͘͠ʢίϛϡχέʔγϣϯʣ ˓
όοΫΤϯυಛʹ ˔ γεςϜঢ়ଶΛՄࢹԽ͓ͯ͘͠ͱେมศར 32
Thank you! 33