Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ISUCON7 まとめ
Search
changkita
January 08, 2018
Programming
40
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ISUCON7 まとめ
ISUCON7の予選のまとめ
changkita
January 08, 2018
More Decks by changkita
See All by changkita
仮想通貨こわい
kitah
0
46
強化学習
kitah
0
97
ISUCON5 まとめ
kitah
0
76
Other Decks in Programming
See All in Programming
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
golang-bob.pdf
iwatsukayura
0
130
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.1k
最近”作らせてる” ローカルAIアプリの話
akit37
0
470
カツオ、ご期待ください
suneo3476
0
190
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
350
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
360
HTML-in-Canvasで作る未来のWeb UI表現
clockmaker
5
5.1k
S3 TablesのIcebergデータに、AIエージェントからアクセスしてみた / 20261016developersio2026joetsu-accessing-iceberg-in-s3tables-via-agent
kasacchiful
PRO
0
150
R8 の設定見直しでアプリサイズ削減
andpad
0
220
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
Featured
See All Featured
My Coaching Mixtape
mlcsv
0
360
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
Un-Boring Meetings
codingconduct
0
460
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
Automating Front-end Workflow
addyosmani
1369
210k
Building an army of robots
kneath
307
47k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
500
Faster Mobile Websites
deanohume
310
32k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
ISUCON7ͷ·ͱΊ νʔϜ ʮத͕গ͍͠ఔԦࠃʯ
ISUCON • Iikanjini Speed Up Contestͷུ • ͓ͱͳΔWebαʔϏεΛܾΊΒΕͨϨΪϡ ϨʔγϣϯͷதͰݶք·ͰߴԽΛਤΔνϡʔ χϯάότϧ
• ࠓճISUCON7ʹࢀՃ͠·ͨ͠
ࠓճͷΞϓϦέʔγϣϯ • νϟοτΞϓϦέʔγϣϯ(ͱ͍͏إΛͯ͠ը ૾৴͕ϘτϧωοΫ) • N+1ը૾ͷΞοϓϩʔυɺ؆୯ͳϦΞ ϧλΠϜཁૉͳͲ • ༧બ͔Βαʔόʔ͕3͋ͬͨ
੩తϑΝΠϧͱը૾ϑΝΠϧͷΩϟογϡ • ݩʑ੩తϑΝΠϧը૾CDNܦ༝ͷΞΫη εͳͷͰ”Cache-Control: public, max- age=3600”Λ͚ΕࣗྗͰ৴͢Δඞཁ ͳ͍ɺͱ͍͏ʹ͢Δ༧ఆͩͬͨΒ͍͠
੩తϑΝΠϧͱը૾ϑΝΠϧͷΩϟογϡ • ϕϯνϚʔΧʔҰఆͷϖʔεͰϢʔβΛ૿ ͢ͷͰɺΩϟογϡ͕ͳ͍ɺ͋Δ͍Ϣʔβʔ ୯ҐͷΩϟογϡͰϢʔβʔʹൺྫͨ͠ μϯϩʔυଳҬ͕ඞཁʹͳΓɺޙ͙͢ʹ ଳҬΛανͬͯ͠·͏ • ανΔ :
saturation()
੩తϑΝΠϧͱը૾ϑΝΠϧͷΩϟογϡ • Ϣʔβʔ͕૿͑ͯμϯϩʔυଳҬΛα νΒͤͳ͍ͨΊʹɺCDNʹΑΔΩϟογϡ ͕ޮ͍͍ͯΔͱ͍͏લఏʹͯ͠Ϣʔβʔ͕ ૿͑ͯը૾1ͭ͋ͨΓͷμϯϩʔυ͕૿ ͑ͳ͍ઃܭ͕ඞཁͩͬͨ
CDN(ίϯςϯπσϦόϦʔωοτϫʔΫ) • ΣϒίϯςϯπΛΠϯλʔωοτͰ৴͢ ΔͨΊʹ࠷దԽ͞ΕͨωοτϫʔΫͷ͜ͱ • αʔόʔΛҰՕॴʹஔ͘ͷͰͳ͘ɺཧతɾ όοΫϘʔϯతʹࢄͤ͞Δ͜ͱͰɺෛՙΛ ݮΒ͢
DBͷը૾σʔλΛϑΝΠϧʹग़ྗ • ը૾DBͷimageςʔϒϧʹೖ͍ͬͯͨͷͰɺ ͦΕΛ੩తϑΝΠϧͱͯ͠ग़ྗ͠ɺnginxͰ৴ ͢Δํ๏͕είΞ্ҐνʔϜͰͱΒΕ͍ͯͨ • ಉ͡༰ͷը૾͕ಉ͡ϑΝΠϧ໊Ͱॏෳొ͞ Ε͓ͯΓɺແବʹDB͔Βͷऔಘ͕ൃੜ͍ͯͨ͠ ͜ΕɺLIMIT 1Λ͚Εେৎ
DBͷը૾σʔλΛϑΝΠϧʹग़ྗ
cache-control • Ϩεϙϯε/ϦΫΤετʹରͯ͠Ωϟογϡͷ ৼΔ͍Λ੍ޚ͢ΔͨΊͷࢦࣔΛࢦఆ͢Δͨ Ίʹར༻͞ΕΔ • ͍͔ʹը૾ΛΩϟογϡͤͯ͞αʔόʔ͔Β σʔλΛฦ͞ͳ͍Α͏ʹ͢Δ͔
εςʔλείʔυ304 (Not Modified) • 3xxϦμΠϨΫτ • 304ະߋ৽Λද͢ • Ωϟογϡͷ༗ޮແޮͷ֬ೝ͖ϦΫΤετ ʹରͯ͠ɺ༗ޮͰ͋Δ߹ʹฦ͢εςʔλε
ίʔυ
cache-control • public • max-age
cache-control • public • ڞ༗Ωϟογϡʹอ࣋ͯ͠ ྑ͍͜ͱΛࢦࣔ͢Δ
ڞ༗Ωϟογϡ • ෳͷϢʔβ͕࠶༻͢ΔͨΊʹϨεϙϯε Λอଘ͢ΔΩϟογϡ
cache-control • max-age • max-age͕1Ҏ্ͷ߹ɺ ͦͷඵΫϥΠΞϯτ ϦΫΤετΛߦΘͳ͍
cache-control • add_header Cache-Control “public, max- age=31536000”; • /js//css/ʹ͍ͭͯಉ༷ʹ
cache-control • immutable : ࢦఆ͢ΔͱΩϟογϡΛ immutable(ෆม)ʹͰ͖ɺϒϥβΩϟογϡ ͕freshͰ͋ΕϦϩʔυ࣌Ͱώοτͤ͞ΔΑ ͏ʹͳΔ • Ϧϩʔυ࿈ൃ͞ΕͯແବͳϦΫΤετΛ͛Δ
• ࠓճ͋·Γؔͳ͔༷ͬͨ
cache-control • etag : Ωϟογϡ͞Ε͍ͯΔίϯϙʔωϯτͷ ༗ޮੑΛݕূ͢ΔΈ • ෳαʔόʔͰetag͕ҰகͤͣʹΩϟογϡ ͕ΘΕΔՄೳੑ͕ۃʹ͘ͳͬͯ͠·͏ •
؆୯ʹճආ͢Δʹetag = off;ͱͯ͠ແޮʹ͠ ͯ͠·͏ͷ͕ྑ͍
Ωϟογϡศར͚ͩͲා͍ • ϑϦϚΞϓϦ͕CDNͷ༻ѲΛؒҧ͑ͨ ͨΊɺձһใΛCDNʹΩϟογϡͯ͠͠· ͍ɺݸਓใ͕࿙Ӯͨ͠ • “private”Ͱͳ͘ɺ“no-cache”Λͬͨͨ Ίɺϖʔδ͕Ωϟογϡ͞Εͯ͠·͍ͬͯͨ
cache-control
GET /fetchͱGET /message • ΤϥʔλΠϜΞτ͕ͳ͍߹ɺຖඵ৽ن Ϣʔβʔ͕ొͯ͘͠Δ • ϝοηʔδͷߘϢʔβʔʹൺྫ͢Δ ͕ɺड৴2ʹൺྫ͢Δ •
ϘτϧωοΫΛ௵ͯ͠ϝοηʔδͷྲྀྔΛ্ ͍͚͛ͯείΞ͕͕͋ΔઃܭΒ͍͠
GET /fetchͱGET /message • “GET /fetch”ʹείΞ͕ͳ͘ɺ ”GET /message”ʹड৴ϝοηʔδʹՃ ࢉ͞ΕΔͱ͜Ζ͕ϙΠϯτ
GET /fetchͱGET /message • ΫϥΠΞϯτ”GET /fetch”ΛϙʔϦϯά͍ͯ͠ ͯɺӾཡதͷνϟϯωϧʹ৽ணϝοηʔδ͕͋ Δͱ”GET /message”ΛݺΜͰ৽ணϝοηʔδΛ ड৴͢Δ
• “GET /fetch”ͷϨεϙϯεΛ͍͘Βվળͯ͠ɺ ৽ணϝοηʔδ͕ͳ͍ͱείΞ্͕Βͳ͍
GET /fetchͱGET /message • Ӿཡதͷνϟϯωϧʹ৽ணϝοηʔδ͕1݅͋ Δঢ়ଶͰ͙͢ʹฦͯ͠ɺ”GET /message”Ͱ 1ͱͦ͜ʹؚ·ΕΔ1ϝοηʔδͷ1Ͱ̼ 2ϦΫΤετͰ2͔͠Ք͛ͳ͍
GET /fetchͱGET /message • “GET /fetch”ΛλΠϜΞτʹͳΒͳ͍ൣғͰ Θ͟ͱͯͭ͘͜͠ͱͰɺ”GET /message” 1ϦΫΤετͰे݅ͷϝοηʔδΛऔಘͰ ͖ΔΑ͏ʹͳΓɺ2ϦΫΤετͰेՔ͛Δ
Α͏ʹͳΔ
GET /fetchͱGET /message • “GET /fetch”ͱ”GET /message”N+1ΫΤϦ COUNTΫΤϦͳͲॏ͍ͨॲཧ • ୯ʹॲཧΛܰ͘͢Δ͚ͩͰͳ͘ɺແବʹݟ
͑Δ”sleep”ͷҙຯʹؾ͍͍ͮͯΕείΞ Ξοϓʹͭͳ͕͍ͬͯͨ
ল • ͬͱϨΪϡϨʔγϣϯΛख़ಡ͢Δඞཁ͕͋ͬ ͨ • ϓϩϑΝΠϦϯάπʔϧΛงғؾͰ͍ͬͯͨײ ͕͋ͬͨ • ͦͦͷࣝෆ •
͕Կͯ͠ͳ͍(ϩάͱ͔͔͠ݟͯͳ͍)
དྷʹ͚ͯ • աڈͷISUCONͰͷେࣄͳϙΠϯτΛ͔ͬ͠ Γͱԡ͑͞ɺʮ͋ͬʂ͜ΕνϟϨϯ̋Ͱͬ ͨͭͩʯతͳࢥ͍ग़͕͠Ͱ͖ΔΑ͏ʹͨ͠ ͍ • ࣌ؒ͋Γͦ͏ͳͷͰΏͬ͘ΓࣝΛ͑ͨ ͍