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.8k
ISUCON大反省会
社内のISUCON大反省会で話した資料です。
takashabe
November 26, 2015
Tweet
Share
More Decks by takashabe
See All by takashabe
より良いターミナルでの生活を求めて
takashabe
0
34
OpenCensusでcustom context propagationとexporterを書いた話 / OpenCensus with custom context propagation and exporter
takashabe
0
1.6k
pubsub with concurrent
takashabe
1
860
社内ISUCONを開催した話
takashabe
0
1.6k
gitのブランチ戦略
takashabe
8
5.8k
サルでもわかるgit
takashabe
0
1.4k
playで複数DBする
takashabe
0
1.6k
MySQLで高トラフィックに立ち向かう
takashabe
0
1.8k
GitHubの良さ
takashabe
2
2.2k
Other Decks in Technology
See All in Technology
Perlの生きのこり - エンジニアがこの先生きのこるためのカンファレンス2025
kfly8
2
270
いまからでも遅くない!コンテナでWebアプリを動かしてみよう!コンテナハンズオン編
nomu
0
150
Potential EM 制度を始めた理由、そして2年後にやめた理由 - EMConf JP 2025
hoyo
2
2.7k
Ruby on Railsで持続可能な開発を行うために取り組んでいること
am1157154
3
160
ウォンテッドリーのデータパイプラインを支える ETL のための analytics, rds-exporter / analytics, rds-exporter for ETL to support Wantedly's data pipeline
unblee
0
130
OPENLOGI Company Profile
hr01
0
60k
【詳説】コンテンツ配信 システムの複数機能 基盤への拡張
hatena
0
260
役員・マネージャー・著者・エンジニアそれぞれの立場から見たAWS認定資格
nrinetcom
PRO
3
6.1k
設計を積み重ねてシステムを刷新する
sansantech
PRO
0
170
データベースの負荷を紐解く/untangle-the-database-load
emiki
2
520
OPENLOGI Company Profile for engineer
hr01
1
20k
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
190
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
46
2.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
Scaling GitHub
holman
459
140k
Thoughts on Productivity
jonyablonski
69
4.5k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.5k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Agile that works and the tools we love
rasmusluckow
328
21k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
GraphQLとの向き合い方2022年版
quramy
44
14k
Bash Introduction
62gerente
611
210k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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