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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
takashabe
November 26, 2015
Technology
2k
0
Share
ISUCON大反省会
社内のISUCON大反省会で話した資料です。
takashabe
November 26, 2015
More Decks by takashabe
See All by takashabe
より良いターミナルでの生活を求めて
takashabe
0
64
OpenCensusでcustom context propagationとexporterを書いた話 / OpenCensus with custom context propagation and exporter
takashabe
0
1.8k
pubsub with concurrent
takashabe
1
940
社内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
生成AI時代のエンジニア育成 変わる時代と変わらないコト
starfish719
0
550
Cortex Code君、今日から内製化支援担当ね。
coco_se
0
320
2026年度新卒技術研修 サイバーエージェントのデータベース 活用事例とパフォーマンス調査入門
cyberagentdevelopers
PRO
6
7.4k
終盤で崩壊させないAI駆動開発
j5ik2o
0
460
Kubernetes基盤における開発者体験 とセキュリティの両⽴ / Balancing developer experience and security in a Kubernetes-based environment
chmikata
0
230
Oracle AI Databaseデータベース・サービス: BaseDB/ExaDB-Dの可用性
oracle4engineer
PRO
1
170
NgRx SignalStore: The Power of Extensibility
rainerhahnekamp
0
190
チームで育てるAI自走環境_20260409
fuktig
0
1k
さくらのクラウドでつくるCloudNative Daysのオブザーバビリティ基盤
b1gb4by
0
150
Zero-Downtime Migration: Moving a Massive, Historic iOS App from CocoaPods to SPM and Tuist without Stopping Feature Delivery
kagemiku
0
230
暗黙知について一歩踏み込んで考える - 暗黙知の4タイプと暗黙考・暗黙動へ
masayamoriofficial
0
1.2k
システムは「動く」だけでは 足りない - 非機能要件・分散システム・トレードオフの基礎
nwiizo
25
8.1k
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
310
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Designing Experiences People Love
moore
143
24k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
250
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.8k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
68
38k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
310
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