Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ISUCON大反省会
Search
takashabe
November 26, 2015
Technology
0
1.9k
ISUCON大反省会
社内のISUCON大反省会で話した資料です。
takashabe
November 26, 2015
Tweet
Share
More Decks by takashabe
See All by takashabe
より良いターミナルでの生活を求めて
takashabe
0
56
OpenCensusでcustom context propagationとexporterを書いた話 / OpenCensus with custom context propagation and exporter
takashabe
0
1.8k
pubsub with concurrent
takashabe
1
920
社内ISUCONを開催した話
takashabe
0
1.7k
gitのブランチ戦略
takashabe
8
6k
サルでもわかるgit
takashabe
0
1.5k
playで複数DBする
takashabe
0
1.6k
MySQLで高トラフィックに立ち向かう
takashabe
0
1.8k
GitHubの良さ
takashabe
2
2.2k
Other Decks in Technology
See All in Technology
21st ACRi Webinar - Univ of Tokyo Presentation Slide (Ayumi Ohno)
nao_sumikawa
0
120
Challenging Hardware Contests with Zephyr and Lessons Learned
iotengineer22
0
110
20251209_WAKECareer_生成AIを活用した設計・開発プロセス
syobochim
5
1.3k
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
250
乗りこなせAI駆動開発の波
eltociear
1
960
ML PM Talk #1 - ML PMの分類に関する考察
lycorptech_jp
PRO
1
700
Uncertainty in the LLM era - Science, more than scale
gaelvaroquaux
0
780
新 Security HubがついにGA!仕組みや料金を深堀り #AWSreInvent #regrowth / AWS Security Hub Advanced GA
masahirokawahara
1
1.3k
ログ管理の新たな可能性?CloudWatchの新機能をご紹介
ikumi_ono
0
450
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
0
190
pmconf2025 - データを活用し「価値」へ繋げる
glorypulse
0
700
eBPFとwaruiBPF
sat
PRO
4
2.5k
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Bash Introduction
62gerente
615
210k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Embracing the Ebb and Flow
colly
88
4.9k
Context Engineering - Making Every Token Count
addyosmani
9
490
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
121
20k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
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