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予選突破を支えるオペレーション技術 / Web Operations about ...
Search
Yuuki Tsubouchi (yuuk1)
August 21, 2016
Technology
1
23k
ISUCON予選突破を支えるオペレーション技術 / Web Operations about ISUCON
Kyoto.なんか#2の発表資料です。
ISUCON初出場のときに知りたかったことをまとめました。
技術だけでなく心構えのようなものも盛り込んでいます。
Yuuki Tsubouchi (yuuk1)
August 21, 2016
Tweet
Share
More Decks by Yuuki Tsubouchi (yuuk1)
See All by Yuuki Tsubouchi (yuuk1)
とあるSREの博士「過程」 / A Certain SRE’s Ph.D. Journey
yuukit
8
3.9k
eBPFを用いたAIネットワーク監視システム論文の実装 / eBPF Japan Meetup #4
yuukit
3
980
クラウドのテレメトリーシステム研究動向2025年
yuukit
3
1k
博士論文公聴会: Scaling Telemetry Workloads in Cloud Applications: Techniques for Instrumentation, Storage, and Mining / PhD Defence
yuukit
1
220
博士学位論文予備審査 / Scaling Telemetry Workloads in Cloud Applications: Techniques for Instrumentation, Storage, and Mining
yuukit
1
2k
MetricSifter:クラウドアプリケーションにおける故障箇所特定の効率化のための多変量時系列データの特徴量削減 / FIT 2024
yuukit
2
280
工学としてのSRE再訪 / Revisiting SRE as Engineering
yuukit
19
14k
Cloudless Computingの論文紹介
yuukit
2
570
#SRE論文紹介 Detection is Better Than Cure: A Cloud Incidents Perspective V. Ganatra et. al., ESEC/FSE’23
yuukit
3
2.1k
Other Decks in Technology
See All in Technology
生成AI時代におけるAI・機械学習技術を用いたプロダクト開発の深化と進化 #BetAIDay
layerx
PRO
1
1.2k
2時間で300+テーブルをデータ基盤に連携するためのAI活用 / FukuokaDataEngineer
sansan_randd
0
160
OPENLOGI Company Profile for engineer
hr01
1
38k
人に寄り添うAIエージェントとアーキテクチャ #BetAIDay
layerx
PRO
9
2.3k
AI時代の経営、Bet AI Vision #BetAIDay
layerx
PRO
1
2k
Bet "Bet AI" - Accelerating Our AI Journey #BetAIDay
layerx
PRO
4
1.8k
Amazon Inspector コードセキュリティで手軽に実現するシフトレフト
maimyyym
0
120
リリース2ヶ月で収益化した話
kent_code3
1
300
AI関数が早くなったので試してみよう
kumakura
0
300
AIに目を奪われすぎて、周りの困っている人間が見えなくなっていませんか?
cap120
1
640
僕たちが「開発しやすさ」を求め 模索し続けたアーキテクチャ #アーキテクチャ勉強会_findy
bengo4com
0
2.4k
마라톤 끝의 단거리 스퍼트: 2025년의 AI
inureyes
PRO
1
750
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
The Pragmatic Product Professional
lauravandoore
36
6.8k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Into the Great Unknown - MozCon
thekraken
40
2k
Adopting Sorbet at Scale
ufuk
77
9.5k
Music & Morning Musume
bryan
46
6.7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Facilitating Awesome Meetings
lara
54
6.5k
Faster Mobile Websites
deanohume
308
31k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Code Review Best Practice
trishagee
69
19k
Transcript
ISUCON༧બಥഁΛࢧ͑Δ ΦϖϨʔγϣϯٕज़ id:y_uuki Kyoto.ͳΜ͔ #2
ISUCON ͓ͱͳΔWebαʔϏεΛܾΊΒΕͨϨΪϡϨʔγϣ ϯͷதͰݶք·ͰߴԽΛਤΔνϡʔχϯάότϧ
ISUCONॳग़ͷͱ͖ʹ ͕ࣗΓ͔ͨͬͨ͜ͱ
w/id:motemen id:Songmu ຊઓग़ => ࢂഊ
w/id:astj id:ntakanashi ༧બ શମ5Ґ ຊઓग़ => ࢂഊ
None
͘͡ 1. ISUCONͰΔ͜ͱ 2. ISUCONͷߟ͑ํ 3. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ (جຊฤ) 4. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ
(࣮ફฤ) 5. ·ͱΊ
͘͡ 1. ISUCONͰΔ͜ͱ 2. ISUCONͷߟ͑ํ 3. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ (جຊฤ) 4. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ
(࣮ફฤ) 5. ·ͱΊ
ISUCONͰΔ͜ͱ • ༩͑ΒΕͨΣϒΞϓϦέʔγϣϯΛͱʹ͔͘ߴԽ • ߴԽ • ϨεϙϯελΠϜΛখ͘͢͞Δ • εϧʔϓοτ (req/s)
͕େ͖͘͢Δ • CPUωοτϫʔΫͳͲϦιʔεফඅྔΛখ͘͢͞Δ • جຊతʹϨεϙϯελΠϜΛখ͘͢͞Δ͜ͱΛࢦ͢
ISUCONͰΔ͜ͱ • αʔόؚΉڥߏங • OSɾϛυϧΣΞͷνϡʔχϯά • ΞϓϦέʔγϣϯϩδοΫͱσʔλߏͷվળ Ops ※ඞͣ͠ҰਓͰશ෦Δඞཁͳ͍
͘͡ 1. ISUCONͰΔ͜ͱ 2. ISUCONͷߟ͑ํ 3. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ (جຊฤ) 4. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ
(࣮ફฤ) 5. ·ͱΊ
ΦϖϨʔγϣϯͰΛकΓ ϓϩάϥϛϯάͰΛͱΔ
OpsकΓ • OSɾϛυϧΣΞͷνϡʔχϯά͕ܶతͳՃཁૉʹ ͳΔ͜ͱ͋·Γͳ͍ • OSɾϛυϧΣΞͷνϡʔχϯάϦιʔεফඅྔΛ খ͘͢͞Δ͜ͱ͕ଟ͍ • େ෯ͳݮཁૉΛͳ͘͢Πϝʔδ
Dev߈Ί • σʔλߏͷվળࠜຊྍ๏ • Ωϟογϡ/ΦϯϝϞϦຑༀ
Ops࢘ྩౝ • OpsγεςϜશମΛ၆ᛌ͢Δ • ঢ়گஅͱํܾఆ • ΞΫηεϩάαʔόͷෛՙঢ়گΛղੳ • ϘτϧωοΫಛఆ
͘͡ 1. ISUCONͰΔ͜ͱ 2. ISUCONͷߟ͑ํ 3. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ (جຊฤ) 4. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ
(࣮ફฤ) 5. ·ͱΊ
ISUCONͰΔ͜ͱ • αʔόؚΉڥߏங • OSɾϛυϧΣΞͷνϡʔχϯά • ΞϓϦέʔγϣϯϩδοΫͱσʔλߏͷվળ Ops
ڥߏங • ΫϥυڥηοτΞοϓ (༧બͷ߹) • ISUCON4:AWS ISUCON5:GCE ISUCON6:Azure • ΞΧϯτ࡞ͱΠϯελϯε࡞
• αʔόϩάΠϯηοτΞοϓ • ϩάΠϯϢʔβ࡞ • ϝϯόʔશһͷsshͷެ։伴Λઃఆ • ͓ΞϓϦέʔγϣϯͷىಈ • ϛυϧΣΞͷΠϯετʔϧ • σϓϩΠͷࣗಈԽ
ϘτϧωοΫղੳ • nginxͰΞΫηεϩάΛग़ྗ => URL͝ͱʹղੳ • MySQLͰεϩʔΫΤϦϩά => pt-query-digestͰղੳ •
ϓϩϑΝΠϥͰίʔυϨϕϧͰ࣮ߦ࣌ؒղੳ • Perlͷ߹ Devel::NYTProf
Opsνϡʔχϯά • OS • MySQL • nginx • memcached •
redis • ΞϓϦέʔγϣϯͷWebαʔό·ΘΓ
ΞϓϦέʔγϣϯ֬ೝ • Opsʹͱͬͯ݁ߏݟམͱ͕ͪ͠ • ΞϓϦέʔγϣϯڍಈɺΞϓϦέʔγϣϯϩδοΫɺ σʔλߏ • ؾ͍ͮͨΒɺԿͷΞϓϦέʔγϣϯ͔Βͣʹ࡞ۀͯ͠ ͍ͨ •
MySQLͷίϯιʔϧʹೖͬͯɺ • ΞϓϦέʔγϣϯ୲͕֬ೝ͍ͯ͠ΔͣͳͷͰڭ͑ͯ Β͏͔ɺ࠷ॳʹΈΜͳͰ֬ೝ͢Δ
͘͡ 1. ISUCONͰΔ͜ͱ 2. ISUCONͷߟ͑ํ 3. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ (جຊฤ) 4. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ
(࣮ફฤ) 5. ·ͱΊ
σϓϩΠͷࣗಈԽ • ඞͣεΫϦϓτΛ༻ҙ͢ΔɻࡶͳͷͰΑ͍ɻ • Slack௨ • git pull • carton
install (bundle install) • systemctl restart mysql • systemctl restart isuxi.perl • systemctl restart nginx
deploy.sh HOSTS=("$@") USERNAME=$USER for HOST in ${HOSTS[@]}; do ssh isucon@$HOST
"/home/isucon/notify.sh $USERNAME '$HOST deploying...' && cd /home/isucon/deploy && git pull && ~/deploy/env.sh carton install && sudo systemctl restart mysql && sudo service memcached restart && sudo systemctl restart isuxi.perl && sudo systemctl restart nginx && sudo sysctl -p && /home/isucon/notify.sh $USERNAME '$HOST deploy done'" done
ࢹ • ؾ͍ͮͨΒΞϓϦέʔγϣϯ͕མͪͯͯɺؒҧ͑ͯϕϯ νϚʔΫ࣮ߦ • ϕϯνϚʔΫΛ͙͢ʹ࣮ߦͰ͖ͳ͍߹͕͋Δ • MackerelͰ֎ܗࢹͯ͠མͪͯͳ͍͔νΣοΫ • Slack௨Ͱ͖ΔͷͰؾ͚ͮͯศར
ϛυϧΣΞͷΠϯετʔϧ • σϑΥϧτͰnginxɺMySQL͕Πϯετʔϧ͞Ε͍ͯΔ ͜ͱ͕ଟ͍ • ͏Մೳੑ͕ߴ͍ͷͰredismemcachedΛΠϯετʔ ϧ͢Δ • ιʔε͔ΒϏϧυͯ͠Α͍͕ɺόʔδϣϯʹͩ͜ΘΒ ͳ͍ͷͳΒɺapt-get
Ͱ͍ΕΕΑ͍
Ϧιʔε༻Ѳ • http://blog.yuuk.io/entry/linux-server-operations • ίΞ͝ͱͷCPUར༻ɺσΟεΫI/OɺϝϞϦ༻ྔ etc • ϘτϧωοΫಛఆͷώϯτʹͳΔ͜ͱ͕͋Δ
ΞΫηεϩάͷղੳ • proxy (eg.nginx) ͰΞΫηεϩάऔಘ • ϨεϙϯελΠϜϦΫΤετURL͕ͱΕΔ • alp (https://github.com/tkuchiki/alp)
ͳͲͰूܭ • ࣗ࡞εΫϦϓτ https://gist.github.com/yuuki/129983ab4b02e3a646ad • URL͝ͱͷɺϦΫΤετճɺ߹ܭ࣮ߦ࣌ؒɺฏۉ࣮ߦ࣌ؒͳͲग़ྗ isucon@isucon01:~$ sudo parse_axslog isucon5.access_log.tsv taken_sec req:GET / HTTP/1.1 taken_sum:474.08 req_count:714 avg_taken:0.66 req:GET /footprints HTTP/1.1 taken_sum:58.378 req_count:198 avg_taken:0.29 req:GET /friends HTTP/1.1 taken_sum:27.047 req_count:238 avg_taken:0.11 req:POST /diary/entry HTTP/1.1 taken_sum:6.51 req_count:195 avg_taken:0.03 …
MySQLεϩʔΫΤϦϩάͷղੳ • ͋ΔᮢҎ্ͷ࣮ߦ࣌ؒͷΫΤϦΛग़ྗ • long_query_time = 0 Ͱͯ͢ͷΫΤϦΛग़ྗ • pt-query-digestͰूܭ
# Profile # Rank Query ID Response time Calls R/Call V/M Item # ==== ================== ============= ===== ====== ===== =============== # 1 0x75B7218DD44BDBC5 27.6810 24.2% 63 0.4394 0.14 SELECT relations # 2 0x492C7CAB538DE80D 22.5882 19.7% 53 0.4262 0.25 SELECT footprints # 3 0xA44D49C56E635213 14.5630 12.7% 63 0.2312 0.02 SELECT entries # 4 0x57EBD74C3B600DB8 14.0403 12.3% 40 0.3510 0.02 SELECT entries # 5 0xDC67C8CE8419EE5B 12.8485 11.2% 7 1.8355 0.19 SELECT entries
OSͷνϡʔχϯά $ cat /etc/sysctl.d/99-sysctl.conf net.ipv4.tcp_max_tw_buckets = 2000000 net.ipv4.ip_local_port_range = 10000
65000 net.core.somaxconn = 32768 net.core.netdev_max_backlog = 8192 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 10 fs.file-max = 100000 Systemdͷ߹ɺόʔδϣϯ207ͱ21x͔Β/etc/sysctl.conf͕ ແޮ
nginxͷνϡʔχϯά worker_processes 1; worker_rlimit_nofile 65535; events { worker_connections 8192; }
http { include mime.types; sendfile on; keepalive_timeout 120s; tcp_nopush on; tcp_nodelay on; etag off;
MySQLͷνϡʔχϯά innodb_buffer_pool_size = 1G innodb_flush_log_at_trx_commit = 0 innodb_flush_method=O_DIRECT
PerlΞϓϦέʔγϣϯαʔόνϡʔχϯά start_server --backlog 16384 -- plackup -s Gazelle --max-reqs-per-child 50000
-workers=4 • ϫʔΧʔϓϩηείΞͱಉఔʹ͢Δ • ͜ΕҎ্૿ͯ͠ίϯςΩετεΠον૿͑Δ͚ͩ ͰείΞ৳ͼͳ͍͜ͱ͕ଟ͍ • preforkܕαʔόͰͳΔ͘fork͠ͳ͓ͤ͞ͳ͍Α͏ʹ
memcachedͷνϡʔχϯά -m 256 -U 0 -c 20000 -v -t 1
-C -B ascii
Redisͷνϡʔχϯά tcp-keepalive 60 save 900 1 save 300 10 save
120 20000 maxclients 10000 appendonly yes appendfsync everysec no-appendfsync-on-rewrite no
UnixυϝΠϯιέοτ • ༧બͰ1ͷαʔό্ʹɺ֤ϛυϧΣΞ͕ಉډ • proxy <=> app <=> db ͷଓ͕TCPͩͱ͍ͬͨͳ͍
• 3-way handshakeͦͷଞͷΦʔόϔου • ΦʔόϔουΛͳͨ͘͢ΊUnixυϝΠϯιέοτΛ͏ start_server --path /dev/shm/app.sock upstream app { server unix:/dev/shm/app.sock; } nginx <=> Plack ͷ߹
http://www.slideshare.net/kazeburo/isucon-summerclass2014action2final
͘͡ 1. ISUCONͰΔ͜ͱ 2. ISUCONͷߟ͑ํ 3. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ (جຊฤ) 4. ISUCONʹ͓͚ΔΦϖϨʔγϣϯ
(࣮ફฤ) 5. ·ͱΊ
·ͱΊ • ISUCONͷΦϖϨʔγϣϯʹ͓͚Δయܕతͳܕͷ1ͭΛ հ • ISUCONͰϨεϙϯελΠϜΛͰ͖Δ͚ͩখ͘͢͞Δ • OpsकΓɺDev߈Ίͷݪଇ
Opsͷ͍͍ͱ͜Ζ • ൚༻తͳࣝΞϓϩʔνͰઓ͑Δ • શମΛΈͯΔײΛຯΘ͑Δ • ࣄલͷ࿅श͕Γ͍͢
ISUCON6༧બ 9݄17() ,18()