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
ISUCON大反省会
Search
takashabe
November 26, 2015
Technology
2k
0
Share
ISUCON大反省会
社内のISUCON大反省会で話した資料です。
takashabe
November 26, 2015
More Decks by takashabe
See All by takashabe
より良いターミナルでの生活を求めて
takashabe
0
70
OpenCensusでcustom context propagationとexporterを書いた話 / OpenCensus with custom context propagation and exporter
takashabe
0
1.8k
pubsub with concurrent
takashabe
1
950
社内ISUCONを開催した話
takashabe
0
1.7k
gitのブランチ戦略
takashabe
8
6.1k
サルでもわかるgit
takashabe
0
1.6k
playで複数DBする
takashabe
0
1.6k
MySQLで高トラフィックに立ち向かう
takashabe
0
1.8k
GitHubの良さ
takashabe
2
2.3k
Other Decks in Technology
See All in Technology
続 運用改善、不都合な真実 〜 物理制約のない運用改善はほとんど無価値 / 20260518-ssmjp-kaizen-no-value-without-physical-constraints
opelab
2
220
そのSLO 99.9%、本当に必要ですか? 〜優先度付きSLOによる責任共有の設計思想〜 / Is that 99.9% SLO really necessary? Design philosophy of shared responsibility through prioritized SLOs
vtryo
0
730
"うちにはまだ早い"は本当? ─ 小さく始めるPlatform Engineering入門
harukasakihara
6
580
Tachikawa.any 運営挨拶
daitasu
0
170
ボトムアップ限界を越える - 20チームを束る "Drive Map" / Beyond Bottom-Up: A 'Drive Map' for 20 Teams
kaonavi
0
220
Gaussian Splattingの実用化 - 映像制作への展開
gpuunite_official
0
190
O'Reilly Infrastructure & Ops Superstream: Platform Engineering for Developers, Architects & the Rest of Us
syntasso
0
150
可視化から活用へ — Mesh化・Segmentation・アライメントの研究動向
gpuunite_official
0
200
Swift Sequence の便利 API 再発見
treastrain
1
280
20260513_生成AIを専属DSに_AI分析結果の検品テクニック_ハンズオン_交通事故データ
doradora09
PRO
0
230
鹿野さんに聞く!CSSの最新トレンド Ver.2026
tonkotsuboy_com
6
3.1k
写真で見るAWS Summit Singapore 2026
k_adachi_01
0
110
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.5k
Music & Morning Musume
bryan
47
7.2k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
The Limits of Empathy - UXLibs8
cassininazir
1
330
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
250
Docker and Python
trallard
47
3.8k
Paper Plane (Part 1)
katiecoart
PRO
0
7.5k
Everyday Curiosity
cassininazir
0
210
How STYLIGHT went responsive
nonsquared
100
6.1k
Between Models and Reality
mayunak
4
290
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Transcript
ISUCONେলձ 2015/11/13 Mynet Inc. Takashi Abe
ͩΕʁ • @takashabe • ISUCON5ຊબ9ҐͰࢂഊ͠·ͨ͠ • ΞΠίϯˠ
Agenda • ISUCONͱ • ४උ • ͱରࡦ • ײ
None
“͓ͱͳΔWebαʔϏεΛܾΊ ΒΕͨϨΪϡϨʔγϣϯͷதͰݶ ք·ͰߴԽΛਤΔνϡʔχϯά ότϧɺͦΕ͕ISUCONͰ͢ɻ” - http://isucon.net/
ϨΪϡϨʔγϣϯ • WebΞϓϦέʔγϣϯͷϨεϙϯε݁Ռ͕ม ΘΒͳ͍͜ͱ • ଞνʔϜͷΛ͠ͳ͍͜ͱ
WebΞϓϦέʔγϣϯͷߏཁૉ • OS • RHELܥ, Debianܥ • ݴޠ • Perl,
Ruby, PHP, Python, go, Scala, Java, Node.js • ϛυϧΣΞ • MySQL, PostgreSQL, Redis, Memcached • Nginx, Apache, Varnish • ϋʔυΣΞ • Mem, HDD, SSD
ݴޠɺϛυϧΣΞͷબ • ݴޠෳͷࢀߟ࣮͔Βࣗ༝ʹબग़དྷΔ • ݴޠͷ༏ྼ͚ͩͰউ͕ܾͪ·Βͳ͍ • DB, Webαʔόͷࡌͤସ͑OK • PostgreSQL
-> MySQL • Apache -> Nginx • ͳΜͳΒOSࡌͤସ͑ͯྑ͍
શͯΛͿͬյ͢ݖར͕͋Δ
༧બͱຊબ
༧બ • ΦϯϥΠϯ • 2ʙ3ਓ1 • IaaS • AWS, GCPͳͲ
ຊબ • ΦϑϥΠϯ • LINEձ • ༧બΛউͬͨνʔϜ • ΦϯϓϨ্ͷVM͕ఏڙ͞ΕΔ •
NHNςίϥε
४උ
ͬͨ͜ͱ • ༧બ2ϲ݄લ͔ΒISUCON෦Λ࡞ͬͯि2Ͱ׆ ಈͨ͠ • աڈΛࢀߟճʹԊͬͯखΛಈ͔͢ • Θ͔Βͳ͍ͷΛௐͨΓ
աڈΛղ͘ • MySQL͔ΒRedisʹࡌͤସ͑ • ΦϯϝϞϦ • Apache͔ΒNginxʹࡌͤସ͑ • ΠϕϯτۦಈͰܰྔ •
ΫΤϦνϡʔχϯά • indexΛషΔ, index͕ΘΕΔΑ͏ʹҙࣝ • MySQL, Nginxͷύϥϝʔλνϡʔχϯά • ΩϟογϡΛ૿͢ • ίʔυ্ͷνϡʔχϯά • ͳϧʔϓͷഉআͳͲͳͲ
ൿͷλϨ • ͱΓ͋͑ͣೖ͢Δͷ • sshपΓͷઃఆɺzshɺϓϩϑΝΠϦϯάπʔϧ • ࣄલʹ༻ҙͨ͠ઃఆϑΝΠϧ • nginx.conf, my.cnf
• αʔόߏɺαʔϏεಛੑʹΑͬͯௐ͕ඞཁ
ௐͨ͜ͱλϨgithubͷ issueͰڞ༗
None
None
ͱରࡦ
༧બ • ্Ґ20νʔϜҐ͕ຊબग़Մೳ • 1ҐʹͳΔඞཁͳ͍ • جຊʹ࣮ʹΕಥഁग़དྷΔ(ଟ) • ࣄલʹ༻ҙ͞ΕΔOS, ݴޠ,
ΠϯϑϥͳͲͷ ใ͕ެ։͞ΕΔ
ISUCON5ͷ༧બ • ࣄલʹ͔͍ͬͯͨ͜ͱ • ग़νʔϜ270͘Β͍ • Ubuntu • Perl, Ruby,
PHP, Python, go, Scala, Java, Node.js͕༻ҙ͞ΕΔ༧ఆ • Node.js४උ͕ؒʹ߹Θͣμϝͩͬͨ • ΠϯϑϥGCP(ϕʔεΠϝʔδ͕༻ҙ͞Ε͍ͯΔͷͰ֤ࣗ༻ҙ)
ΞϓϦέʔγϣϯ • mixiͷΑ͏ͳSNS • ༑ͩͪొ͋ͱ
αʔόߏ • Ubuntu 15.04 • systemd • MySQL • Nginx
• 4CPU / 4GB Mem • 1
ਐΊํ • ϓϩϑΝΠϦϯά • ϘτϧωοΫमਖ਼ • ϓϩϑΝΠϦϯά • ϘτϧωοΫमਖ਼ •
… • ࠶ىಈςετ
ϓϩϑΝΠϦϯά • NginxͷΞΫηεϩά • kataribe • MySQLͷεϩʔΫΤϦϩά • pt-query-digest
ϘτϧωοΫ • ͍ϖʔδ • ͍ݪҼ • N+1ΫΤϦ • ΫΤϦύϑΥʔϚϯε
ϘτϧωοΫͷ௵͠ํ • ݪҼʹΑΔ͕… • N+1ΫΤϦ • ϧʔϓͰΫΤϦΛ͍͛ͯΔ • joinͳͲͰ1ΫΤϦͰࡁ·ͤΔΑ͏ʹ͢Δ •
ΫΤϦࣗମ͕ॏ͍ • औಘ͢ΔσʔλΛݮΒ͢ • LIMIT OFFSETͳΫΤϦΛwhereͰߜΓࠐΉͳͲ
࠶ىಈςετ • ڝٕऴྃޙʹӡӦଆͰ࠶ىಈͯ͠࠷ऴείΞ ΛऔΔ • ࠶ىಈޙʹඞཁͳͷ্ཱ͕͕͍ͪͬͯͳ͍ ͱ٧Ή
ΩϟογϡͷΥʔϜΞοϓ • MySQL(innoDB)ΫΤϦ݁ՌΛϝϞϦ্ʹόοϑΝ͠ ͯ͘ΕΔ • ࠶ىಈޙόοϑΝ͕ແ͍ͷͰύϑΥʔϚϯε͕ग़ͳ ͍ • select *
from user; • innodb_buffer_pool_dump_at_shutdown, innodb_buffer_pool_load_at_startup
ͦΜͳײ͡Ͱண࣮ʹϘτϧωο ΫΛղফ͍͚ͯ͠༧બಥഁ Ͱ͖·͢(ؤுΕ)
ISUCON5ͷຊબ • ෳߏ • ༧બͰߦͬͨΑ͏ͳDBνϡʔχϯάطʹ ͍ྃͯ͠Δঢ়ଶ • ֎෦APIʹΞΫηε͢Δ
ΞϓϦέʔγϣϯ • Ϣʔβ͕ෳͷαʔϏε(API)Λొͯ͠ɺͦ ͔͜Β݁ՌΛऔಘ͢ΔΑ͏ͳͭ • API݁ՌΛϕϯνϚʔΫʹฦ͢͜ͱ͕ग़དྷͨ ͰείΞ͕ग़Δ
ಛ • ༧બ΄Ͳ୯७Ͱͳ͍ • αʔϏεಛੑʹ߹ͬͨνϡʔχϯά͕ٻΊΒ ΕΔ
APIϦΫΤετͷฒྻԽ • γʔέϯγϟϧͰϦΫΤετ͢ΔͷͰͳ͘ɺ ฒྻʹϦΫΤετΛૹΔΑ͏ʹ͢Δ • goͱ͔Node.js͕༗རͩͬͨ • ※ ༏উνʔϜPerl
API݁ՌͷΩϟογϡ • APIϨεϙϯεΛΩϟογϡͯ͠͠·͏ • Ϩεϙϯε݁Ռ͕සൟʹมΘΔΑ͏ͳͷ TTLΛ͘, ٯʹશ͘มΘΒͳ͍ͷ͘ • ΩϟογϡΛಡΉͱ͖ʹN+1ʹͳΒͳ͍Α ͏ɺmset/mgetΛ͏
ෳͰॲཧ͢Δ • NginxͳͲͰόϥϯγϯάͯ͠3શͯͰॲཧ ग़དྷΔΑ͏ʹ͢Δ
HTTPϔομΛಡΜͰదͳઃ ఆΛೖΕΔ • Last-Modified • if-Modified-SinceϔομΛ͚ͯAPIʹ͍߹ΘͤΔͱଈ࠲ʹ 304͕ฦͬͯ͘Δ༷ͩͬͨ • ී௨ʹ͍߹ΘͤΔͱ෦Ͱ500ms sleep͍ͯ͠ΔAPIͩͬͨ
• Accept-Encoding: gzip • Nginxͷgzip_staticͰ௨৴ྔΛݮΒͤͨ
ຊબͰΩϟογϡΛҰ෦ઃఆ͠ ͯෳߏʹ͚ͨͩ͠ͰऴΘͬ ͯ͠·͍ࢂഊ͠·ͨ͠(չ͍͠)
ײ
ྑ͔ͬͨ • νϡʔχϯάͷצॴ͕͔ΔΑ͏ʹͳͬͨ • ϛυϧΣΞͷΈʹৄ͘͠ͳͬͨ • ࣗͷ࣮ྗͷແ͕͞վΊ͔ͯͬͨ • ࠷ߴʹָ͔ͬͨ͠ •
ѱ͔ͬͨ • ಛʹແ͠
དྷ(͠։࠵͞ΕΕ)ੋ ඇࢀՃ͠·͠ΐ͏!!!
དྷ·Ͱͯͳ͍ʁ
ࣾISUCONΔͧʂʂ̍
։࠵࣌ͱ͔ • 12্݄०ʙத० • 4࣌ؒ • 1ʙ2ਓ1νʔϜ • ࢀߟ࣮༧ఆ:PHP, Ruby,
Python, Go, Java, Scala
“ISUCONࢀՃલͱࢀՃޙʹ࠷ ଟ͘ͷͷΛ࣋ͪؼͬͨਓ͜ ͕ͦউऀͱݴ͑ΔͰ͠ΐ͏ɻ” - http://tagomoris.hatenablog.com/entry/2015/07/10/131140