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
0
1.9k
ISUCON大反省会
社内のISUCON大反省会で話した資料です。
takashabe
November 26, 2015
Tweet
Share
More Decks by takashabe
See All by takashabe
より良いターミナルでの生活を求めて
takashabe
0
55
OpenCensusでcustom context propagationとexporterを書いた話 / OpenCensus with custom context propagation and exporter
takashabe
0
1.7k
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
RemoteFunctionを使ったコロケーション
mkazutaka
1
120
ViteとTypeScriptのProject Referencesで 大規模モノレポのUIカタログのリリースサイクルを高速化する
shuta13
3
210
AI時代、“平均値”ではいられない
uhyo
8
2.6k
プレイドのユニークな技術とインターンのリアル
plaidtech
PRO
1
400
AI時代の発信活動 ~技術者として認知してもらうための発信法~ / 20251028 Masaki Okuda
shift_evolve
PRO
1
100
入院医療費算定業務をAIで支援する:包括医療費支払い制度とDPCコーディング (公開版)
hagino3000
0
110
様々なファイルシステム
sat
PRO
0
260
AI機能プロジェクト炎上の 3つのしくじりと学び
nakawai
0
120
webpack依存からの脱却!快適フロントエンド開発をViteで実現する #vuefes
bengo4com
4
3.5k
20251029_Cursor Meetup Tokyo #02_MK_「あなたのAI、私のシェル」 - プロンプトインジェクションによるエージェントのハイジャック
mk0721
PRO
0
370
Zero Trust DNS でより安全なインターネット アクセス
murachiakira
0
100
もう外には出ない。より快適なフルリモート環境を目指して
mottyzzz
13
11k
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
For a Future-Friendly Web
brad_frost
180
10k
BBQ
matthewcrist
89
9.9k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6k
Statistics for Hackers
jakevdp
799
220k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
22k
Bash Introduction
62gerente
615
210k
Git: the NoSQL Database
bkeepers
PRO
431
66k
The Illustrated Children's Guide to Kubernetes
chrisshort
49
51k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
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