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
RedisのCPU負荷対策パターン
Search
Yuuki Tsubouchi (yuuk1)
August 19, 2017
Programming
2
30k
RedisのCPU負荷対策パターン
by id:y_uuki
Yuuki Tsubouchi (yuuk1)
August 19, 2017
Tweet
Share
More Decks by Yuuki Tsubouchi (yuuk1)
See All by Yuuki Tsubouchi (yuuk1)
博士論文公聴会: Scaling Telemetry Workloads in Cloud Applications: Techniques for Instrumentation, Storage, and Mining / PhD Defence
yuukit
0
19
博士学位論文予備審査 / Scaling Telemetry Workloads in Cloud Applications: Techniques for Instrumentation, Storage, and Mining
yuukit
1
1.7k
MetricSifter:クラウドアプリケーションにおける故障箇所特定の効率化のための多変量時系列データの特徴量削減 / FIT 2024
yuukit
2
190
工学としてのSRE再訪 / Revisiting SRE as Engineering
yuukit
19
13k
Cloudless Computingの論文紹介
yuukit
2
480
#SRE論文紹介 Detection is Better Than Cure: A Cloud Incidents Perspective V. Ganatra et. al., ESEC/FSE’23
yuukit
3
1.8k
エンジニアのためのSRE論文への招待 / Introduction to SRE Papers for Engineers
yuukit
2
11k
博士課程での研究まとめ 2023年1月版 / Summary of my research in the PhD course
yuukit
1
280
AI時代に向けたクラウドにおける信頼性エンジニアリングの未来構想 / DICOMO2022 6A-1
yuukit
7
3k
Other Decks in Programming
See All in Programming
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
490
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
14
4.5k
Go 1.24でジェネリックになった型エイリアスの紹介
syumai
2
260
PRレビューのお供にDanger
stoticdev
1
220
Formの複雑さに立ち向かう
bmthd
1
910
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
4
250
プログラミング言語学習のススメ / why-do-i-learn-programming-language
yashi8484
0
150
たのしいSocketのしくみ / Socket Under a Microscope
coe401_
1
360
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
3
290
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
7
2.2k
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
140
React 19アップデートのために必要なこと
uhyo
7
1.3k
Featured
See All Featured
Become a Pro
speakerdeck
PRO
26
5.2k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
250
Navigating Team Friction
lara
183
15k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Code Review Best Practice
trishagee
67
18k
Writing Fast Ruby
sferik
628
61k
Agile that works and the tools we love
rasmusluckow
328
21k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
What's in a price? How to price your products and services
michaelherold
244
12k
Transcript
ͦͯ͠ޠ Կ͔ͷRedis CPU ෛՙରࡦΛܴ͑Δ
None
RedisͷCPUෛՙରࡦ ύλʔϯ id:y_uuki Kyoto.ͳΜ͔#3
Redis ͔ͭͬͯ·͔͢ʁ
None
RedisͰCPUফඅ͕ϘτϧωοΫʹͳΔέʔε • ܦݧతʹඵؒສίϚϯυ҆ • ΫΤϦͷछྨΞΫηεύλʔϯʹΑͬͯɺ ಉ͡ϋʔυΣΞͰ͋ͬͯCPUར༻ม Խ͢Δ • CPUੑೳʹΑͬͯɺಉ͡ϫʔΫϩʔυͰ͋ͬ ͯCPUར༻มԽ͢Δ
RedisͷCPUϦιʔεফඅߏ • γϯάϧεϨουͰಈ࡞͢ΔͨΊɺϚϧνί ΞڥͰ͋ͬͯɺ1CPUίΞ͔͑͠ͳ͍ • MySQL/PostgreSQLίωΫγϣϯ͝ͱʹ εϨου/ϓϩηεΛىಈ͢ΔϚϧνεϨο υ/ϓϩηεϞσϧ
RedisͷCPUෛՙͱઓ͏ͨΊʹ ͲͷΑ͏ͳ࡞ઓΛͱΓ͏Δ͔
εέʔϧΞοϓ εέʔϧΞτ CPU1ίΞੑೳ͋͛Δ ਨׂ ࢀর༻εϨʔϒ ਫฏׂ - ࣗલ ਫฏׂ -
Redis Cluster CPUෛՙݮ RedisύΠϓϥΠϯ Lua scripting Linux RPS (Redis modules)
εέʔϧΞοϓ • RedisαʔόͷCPUΫϩοΫΛߴ͍ͷʹมߋ • EC2ͳΒc4ܥͷΠϯελϯε • ίΞΛ૿ͯ͋͠·Γҙຯͳ͍ • CPUར༻͕90%͔Β40%ʹͳͬͨ͜ͱ͕͋Δ •
Xeon E5-2650L v2 @1.70GHz (Ivy Bridge) • Xeon E5-2670 v3 @2.30GHz (Haswell) • CPUΫϩοΫʹରͯ͠ઢܗʹมԽ͢ΔΘ͚Ͱ ͳ͍
CPUෛՙݮ
CPUෛՙݮ - Linux RPS • redisεϨουͱΧʔωϧͷωοτϫʔΫI/Oε ϨουΛผʑͷίΞͰॲཧ͢Δ • RPSͰύέοτॲཧΛCPU0Ͱड͚ͯ •
redisεϨουͷCPU AffinityͰύέοτॲཧͱผ # echo ‘3’ > /sys/class/net/eth0/queues/rx-0/rps_cpus # taskset -pc 3-4 $(cat /run/redis/redis-server.pid)
None
https://speakerdeck.com/yuukit/linux-network-performance-improvement-at-hatena
CPUෛՙݮ - RedisύΠϓϥΠϯ • ΫϥΠΞϯτ͕ϨεϙϯεΛ·ͨͣʹޙଓͷϦΫΤετ Λೖ͢Δ͜ͱͰɺύέοτԟ෮ճΛݮΒ͢ • ωοτϫʔΫI/OॲཧΛ·ͱΊ࣮ͯߦͰ͖ΔͷͰɺCPU ॲཧ͕ݮΔ •
1ճͷread(2)ͰෳͷίϚϯυΛಡΈग़ͤΔͷͰɺγ εςϜίʔϧճ͕ݮΓίϯςΩετεΠονݮΔ • ਅͷRedisύΠϓϥΠϯ(by id:ichirin2501) https://redis.io/topics/pipelining
CPUෛՙݮ - Lua scripting • ͋ΔίϚϯυͷ݁ՌΛ࣍ͷίϚϯυ͕ར༻͠ ͍ͯΔҰ࿈ͷίϚϯυྻύΠϓϥΠϯ࣮ߦ ෆՄ • Lua
scriptingͳΒҰ࿈ͷίϚϯυྻΛluaίʔ υͱͯ͠ૹΓࠐΈɺ݁Ռ͚ͩड͚औΕΔ • ύΠϓϥΠϯಉ༷ɺΫϥΠΞϯτͱͷԟ෮ճ ͕ݮΓɺI/OγεςϜίʔϧΛ·ͱΊΒΕΔ https://redis.io/commands/eval
None
εέʔϧΞτ
εέʔϧΞτ-ࢀর༻εϨʔϒ • RedisϚελʔɾεϨʔϒߏ͕ͱΕΔ • ࢀরΫΤϦΛεϨʔϒʹ͚ͯϚελʔͷෛՙΛ ݮ • εϨʔϒͷલஈʹϩʔυόϥϯα͕ඞཁ • MySQLͳͲͷRDBMSͰΑ͘ͱΒΕΔ࡞ઓ
• ϨϓϦέʔγϣϯԆʹҙ • ॻ͖ࠐΜͩͣͷσʔλ͕·ͩεϨʔϒʹൖ ͍ͯ͠ͳ͍Մೳੑ͕͋Δ
εέʔϧΞτ- ਨׂ • RedisͷϚελʔϊʔυΛෳ༻ҙ͢Δ • ػೳAϚελʔ1Λ͏ɺػೳBϚελʔ2Λ ͏ • ػೳͷͿΜ͚ͩɺϚελʔϊʔυΛӡ༻͢Δίε τ͋Δ
• ͋ΔҰͭػೳͷෛՙ͕ࢧతͳ߹ʹ͑ͳ͍ • Ωϟογϡ༻్ͳΒ͚ͦͩ͜memcachedΛར༻
εέʔϧΞτ- ਫฏׂ • γϟʔσΟϯάͱݺͿ • ಉ͡༻్ͷ֤ΩʔΛෳͷϚελʔϊʔυʹࢄ • ΩʔͱϊʔυͷϚοϐϯάΛࣗͰΔ • Ϛοϐϯάํ๏༷ʑ
• ϢʔβID xxx ϊʔυYʹϚοϓ • ϢʔβID yyy ͷ༨͕ z ͳΒϊʔυXʹϚοϓ • γϟʔυΛ૿ݮͨ͠ͱ͖ͷσʔλ࠶ஔ͕͢͠ ͗ΔͷͰͱʹ͔͘Γͨ͘ͳ͍
εέʔϧΞτ- Redis ClusterʹΑΔਫฏׂ • ࠷ऴԞٛ • Ωʔͷࢄஔͱ࠶ஔ/ϑΣΠϧΦʔόʔͳͲα ϙʔτ • redis-tribͱ͍͏ެࣜπʔϧͰࣗಈ࠶ஔͰ͖Δ
• ࠷6ϊʔυඞཁ • database͕1͔͔ͭ͑͠ͳ͍ • ෳΩʔʹର͢ΔίϚϯυ࣮ߦʹҙ • 1000ϊʔυ͙Β͍·Ͱεέʔϧ͢ΔΒ͍͠
ເ
Redis modules • Redus 4.0͔ΒϞδϡʔϧػೳ͕࣮͞Εͨ • Redisͷ෦APIΛͬͯಠࣗͷσʔλߏ ίϚϯυΛ࣮Ͱ͖ΔʢΒ͍͠ʣ • ΞϓϦέʔγϣϯʹ࠷దԽͨ͠σʔλߏΛ
࡞ΕɺΊͪΌͪ͘ΌCPUޮΑ͘ͳΔͷͰ ʁʁʁʁʁ
εέʔϧΞοϓ εέʔϧΞτ CPU1ίΞੑೳ͋͛Δ ਨׂ ࢀর༻εϨʔϒ ਫฏׂ Redis Cluster CPUෛՙݮ RedisύΠϓϥΠϯ
Lua scripting Linux RPS (Redis modules)
ޠ͔Βઓུ
ઓུΛཱͯΔͨΊʹ ͱΓ͏Δઓज़Λ ͓ͬͯ͘