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
Mackerel の時系列データベースにおける Redis Cluster の利用と Amaz...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
astj
PRO
August 24, 2020
Technology
3
6k
Mackerel の時系列データベースにおける Redis Cluster の利用と Amazon ElastiCache への移行について / AWS Purpose-Built Databases Week
https://aws.amazon.com/jp/about-aws/events/2020/purpose-built-databases-week/
astj
PRO
August 24, 2020
Tweet
Share
More Decks by astj
See All by astj
ISUCON14公式反省会LT: 社内ISUCONの話
astj
PRO
0
470
Mackerel のコンテナ監視の近況 / Mackerel Meetup #13
astj
PRO
1
2.5k
Observability: Mackerel による観測と Mackerel の観測 / NoOps Meetup Tokyo #8
astj
PRO
2
2.2k
サービス開発と健全なプロダクトメンテナンスを開発チームで持続的に取り組む / Developers Boost KANSAI
astj
PRO
1
1.5k
Mackerel and Stripe / Qiita x Stripe Meetup
astj
PRO
0
5.6k
Mackerel をオンプレミスから AWS に移してからの1年半を振り返る / Hatena Engineer Seminar #11
astj
PRO
0
1.3k
AWS で実現した Mackerel 時系列データ1分粒度長期保存の裏側 / Mackerel Meetup #11 Tokyo
astj
PRO
6
30k
稼働中の Web サービスの perl のバージョンを上げていく
astj
PRO
0
7.5k
Perl 6 で Web Application Framework をつくる
astj
PRO
0
4.8k
Other Decks in Technology
See All in Technology
AIに視覚を与えモバイルアプリケーション開発をより円滑に行う
lycorptech_jp
PRO
1
570
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4k
LINEアプリ開発のための Claude Code活用基盤の構築
lycorptech_jp
PRO
1
1.1k
AI が Approve する開発フロー / How AI Reviewers Accelerate Our Development
zaimy
1
230
AWS Bedrock Guardrails / 機密情報の入力・出力をブロックする — Blocking Sensitive Information Input/Output
kazuhitonakayama
2
180
競争優位を生み出す戦略的内製開発の実践技法
masuda220
PRO
2
500
ローカルでLLMを使ってみよう
kosmosebi
0
210
論文検索を日本語でできるアプリを作ってみた
sailen2
0
140
生成AI活用によるPRレビュー改善の歩み
lycorptech_jp
PRO
4
1.7k
バクラクにおける Document Understanding の挑戦:書類の「読取」から「意思決定」へ / document-understanding-in-bakuraku-2026
yuya4
0
160
【Developers Summit 2026】Memory Is All You Need:コンテキストの「最適化」から「継続性」へ ~RAGを進化させるメモリエンジニアリングの最前線~
shisyu_gaku
5
830
Master Dataグループ紹介資料
sansan33
PRO
1
4.4k
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
63
53k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
210
The Mindset for Success: Future Career Progression
greggifford
PRO
0
260
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Building an army of robots
kneath
306
46k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.3k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
140
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
340
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
1.9k
Transcript
Mackerel ͷ࣌ܥྻσʔλϕʔεʹ͓͚Δ Redis Cluster ͷར༻ͱ Amazon ElastiCache ͷҠߦʹ͍ͭͯ "84163104*-5%"5"#"4&48&&, "TBUP8BLJTBLB
)BUFOB$P -UE
ΞδΣϯμ • Mackerel ͱͦͷ࣌ܥྻσʔλϕʔε • ෳσʔλετΞͷซ༻Օॴʹ͓͚Δ Redis Cluster ͷબఆ •
Amazon EC2 ্͔Β Amazon ElastiCache ͷҠߦ • Amazon ElastiCache ʹΑΔ Redis Cluster ͷӡ༻
ࣗݾհ - Asato Wakisaka • GitHub @astj • גࣜձࣾͯͳ ΞϓϦέʔγϣϯΤϯδχΞ
• Mackerel ։ൃνʔϜ ςοΫϦʔυ • Golang, TypeScript, Scala
None
None
None
Mackerel • αʔόʔࢹɾཧͷ SaaS • 2014ਖ਼ࣜϦϦʔε • 2017ΑΓαʔϏεશମ͕ AWS ্ͰՔಇ
• VM ϕʔεͷϫʔΫϩʔυΛܧଓతʹϚωʔδυαʔϏεʹҠߦ • Amazon EC2 => Amazon ECS, Amazon RDS, Amazon ElastiCache, …
Mackerel ͷ࣌ܥྻσʔλϕʔε
࣌ܥྻσʔλϕʔε (TSDB) hatena.mackerel.host1.cpu.user 2018/02/01T21:15:00Z 44.00 2018/02/01T21:16:00Z 6.00 2018/02/05T21:17:00Z 8.00 hatena.mackerel.host1.cpu.user
2018/02/01T21:15:00Z 44.00 2018/02/01T21:16:00Z 6.00 2018/02/05T21:17:00Z 8.00 hatena.mackerel.host1.cpu.user 2018/02/01T21:15:00Z 44.00 2018/02/01T21:16:00Z 6.00 2018/02/05T21:17:00Z 8.00 hatena.mackerel.host1.cpu.user 2018/02/01T21:15:00Z 44.00 2018/02/01T21:16:00Z 6.00 2018/02/05T21:17:00Z 8.00 … … • Name ʹରͯ͠ (Timestamp, Value) ͷΛه͍ͯ͘͠ • యܕతʹʁ: αʔόʔ͝ͱͷ CPU ར༻ͷάϥϑ
Mackerel ͷ࣌ܥྻσʔλϕʔε • ࢹରͷαʔόʔαʔϏεͷϝτϦοΫΛऩूͯ͠ه • ΞϥʔτͷઃఆɺάϥϑʹΑΔՄࢹԽɺ etc… • ΞΫηεύλʔϯ •
ߋ৽ස > ࢀরස • ࢀরہॴੑ • ݹ͍ߴղ૾ϝτϦοΫ͋·Γࢀর͞Εͳ͍
Mackerel ͷ࣌ܥྻσʔλϕʔε • 2017ʹ AWS ʹҠߦ͢Δࡍʹ • ӡ༻ෛՙͷݮͱকདྷతͳεέʔϥϏϦςΟ͕ཁ݅ • =>
AWS ϚωʔδυαʔϏεΛར༻
Mackerel ͷ࣌ܥྻσʔλϕʔε 8SJUF 'MVTI 3FBE 3FBE 3FBE 3FBE%BUB1PJOUT 8SJUF%BUB1PJOUT 55-5SJHHFS
8SJUF "NB[PO,JOFTJT %BUB4USFBNT "NB[PO&MBTUJ$BDIF 3FEJT$MVTUFS "NB[PO %ZOBNP%# "NB[PO 4
8SJUF 'MVTI 3FBE 3FBE 3FBE 3FBE%BUB1PJOUT 8SJUF%BUB1PJOUT 55-5SJHHFS 8SJUF "NB[PO,JOFTJT
%BUB4USFBNT "NB[PO&MBTUJ$BDIF 3FEJT$MVTUFS "NB[PO %ZOBNP%# "NB[PO 4 Mackerel ͷ࣌ܥྻσʔλϕʔε • ෦ͰෳͷσʔλετΞΛซ༻ • ϝΠϯʹ Amazon DynamoDB • ίετ࠷దԽͷͨΊʹ Amazon ElastiCache (Redis Cluster) ͱ Amazon S3 • => σʔλετΞબఆΛ;Γ͔͑Γ·͢
σʔλετΞͷબఆ • ϝΠϯͷσʔλετΞʹ Amazon DynamoDB Λબఆ • ϑϧϚωʔδυܕͷ KVS •
εϧʔϓοτɺετϨʔδ༰ྔͱʹߴ͍εέʔϥϏϦςΟ • Amazon DynamoDB ୯ମͰίετ໘Ͱͷ༨͕͋Δ • ߴසʹσʔλΛॻ͖ࠐΉ͜ͱʹΑΔ Write Capacity Unit ͷফඅ • ظؒͷ࣌ܥྻσʔλΛอ࣋͢Δ͜ͱʹΑΔετϨʔδඅ༻ • => ಛੑͷҟͳΔଞͷσʔλετΞΛซ༻ͯ͠ղফ
ॻ͖ࠐΈϦΫΤετͷޮԽ • Amazon DynamoDB ʹॻ͖ࠐΉͱIOίετ͕ਹΉ • ࣌ܥྻσʔλຖߘ͞Εͯ͘Δ • =>
ॻ͖ࠐΈ API ϦΫΤετΛόοϑΝͯ͠ίετΛݮ • Amazon DynamoDB ΑΓ IO ʹ༏ΕͨσʔλετΞ • => Amazon ElastiCache ʹΑΔ Redis Cluster • Lambda Function ʹόοϑΝϦϯάΛ࣮ 8SJUF 3FBE 'MVTI 3FBE
࣌ܥྻσʔλͷظอଘ • ݹ͍࣌ܥྻσʔλߋ৽͞Εͣɺࢀরස͍ • => ࢀরͰ͖Δඞཁ͋Δ͕ɺϨΠςϯγཁ݅؇ΊΒΕΔ • σʔλྔతʹ͜ͷ”ݹ͍”σʔλ͕ଟ͘ΛΊΔ • ͜ͷ”ݹ͍”σʔλͷ༰ྔίετΛ͑ΒΕΔͱޮՌత
• => ༰ྔίετͷΑΓ͍σʔλετΞʹҠಈͯ͠ίετΛݮ • => Amazon S3 • ྿ͳετϨʔδίετͱݱ࣮తͳϨΠςϯγͰར༻Մೳ • DynamoDB ͔ΒͷσʔλҠߦʹ TTL ͱ DynamoDB Streams Λར༻ 3FBE 3FBE 55-5SJHHFS 8SJUF
·ͱΊ: Mackerel ͷ࣌ܥྻσʔλϕʔε • ࣌ܥྻσʔλϕʔεΛ AWS ʹҠߦ͢ΔࡍʹʹΓ͑ • ಛੑͷҟͳΔσʔλετΞΛΈ߹Θͤͯߏங •
εέʔϥϏϦςΟʹ༏ΕΔ Amazon DynamoDB • લஈͷόοϑΝͱͯ͠ Redis Cluster (Amazon ElastiCache) • ݹ͍σʔλͷظอ࣋ʹ Amazon S3
Amazon ElastiCache ͱ Redis Cluster
Redis Cluster • Redis ෳϊʔυʹΑΔγϟʔσΟϯάͱԽΛࣗಈߏ • ΩϟογϡΩʔͷϋογϡϕʔεͰਫฏׂ • ҆ఆӡ༻ͱεέʔϧΞτΛ࣮ݱͰ͖Δ •
Amazon ElastiCache ͰϚωʔδυͳΫϥελʔΛߏஙՄೳ
Redis Cluster ͷ͓ͳߟྀࣄ߲ɾ੍ • ݸʑͷϊʔυ௨ৗͷ Redis ϊʔυͱେࠩͳ͍ͷͰಉ༷ͷ੍͕͋Δ • ϚϧνίΞεέʔϧ͠ͳ͍ɺϝϞϦྔҎ্ͷσʔλΛѻ͑ͳ͍ɺ etc…
• γϟʔσΟϯάΩϟογϡΩʔͷϋογϡϕʔε ʢʮεϩοτʯʣ • ߹ʹΑͬͯϗοτεϙοτ͕ग़ݱ͢Δ߹͕͋Δ • ΦϯϥΠϯͰγϟʔυϊʔυͷ૿ݮɾεϩοτͷ࠶ஔΛߦ͏͜ͱ͕Ͱ͖Δ
Amazon ElastiCache ʹΑΔ Redis Cluster • Amazon ElastiCache Ͱ Redis
Cluster ͷΫϥελʔΛߏஙͰ͖Δ • υΩϡϝϯτ্ʮΫϥελʔϞʔυ͕༗ޮʯͱઆ໌͞Ε͍ͯΔ • ElastiCache ༻ޠͱͯ͠ͷ”Ϋϥελʔ”ͱͷ͍͚ʹҙ • ʮRedis (ΫϥελʔϞʔυ͕༗ޮ) Ϋϥελʔʯ Redis Cluster Ͱ͋Δ • ʮRedis (ΫϥελʔϞʔυ͕ແޮ) Ϋϥελʔʯ Redis Cluster Ͱͳ͍ IUUQTEPDTBXTBNB[PODPNKB@KQ"NB[PO&MBTUJ$BDIFMBUFTUSFEVH$MVTUFSTIUNM
ElastiCache Ͱͷ Redis Cluster ͷෛՙࢄ • ElastiCache Ͱ Redis Cluster
ͷΦϯϥΠϯΦϖϨʔγϣϯͷҰ෦Λ API ܦ༝Ͱ࣮ࢪͰ͖Δ • εϩοτͷ࠶ஔʹؔͯ͠ɺΩϟογϡΩʔͷ͕͘͠ͳΔΑ͏ͳ࠶ஔ͕Մೳ • ಛఆͷΩʔʹΞΫηε͕ภ͍ͬͯͳ͚Εɺ͜ΕͰϊʔυ/γϟʔυͷෛՙ֓Ͷἧ͏ͣ • ಛఆͷεϩοτΛಛఆͷγϟʔυʹҠಈͤ͞ΔΑ͏ͳɺΑΓࡉ͔͍ஔมߋߦ͑ͳ͍ • ಛఆͷΩϟογϡΩʔʹΞΫηε͕ภ͍ͬͯΔ߹ɺҎԼͷ͍ͣΕ͔ͰରԠ͢Δ͜ͱʹͳΔ • ϊʔυͷεέʔϧΞοϓɾγϟʔυͷεέʔϧΞτʢΦϯϥΠϯͰՄೳʣ • ΫϥελʔΛ࡞ΓͤҙͷׂΓͯʹมߋՄೳ
Mackerel Ͱͷ EC2 Redis Cluster
Mackerel ͷ TSDB ʹ͓͚Δ Redis Cluster • લड़ TSDB Ͱ
Amazon ElastiCache ͷ࠾༻Λ༧ఆ͍ͯͨ͠ • ͔͠͠ઃܭɾ։ൃ࣌(2016~17)ཁ݅Λຬͨͤͳ͔ͬͨ • γϟʔυ্ݶ͕গͳ͘ɺΦϯϥΠϯεέʔϧͰ͖ͳ͔ͬͨ • Amazon EC2 ্ʹ Redis Cluster Λߏஙɾӡ༻͢Δ͜ͱΛબ • কདྷతʹ ElastiCache Ҡߦ͢Δ·Ͱͷܨ͗ • => 3 * 18γϟʔυ = 54ϊʔυͷ Redis Cluster ͕ੜ
Amazon EC2 ্ͷ Redis Cluster • Redis Cluster ʹΑΔੑʹΑΓఆৗ࣌҆ఆͯ͠Քಇ •
গͷϊʔυোఔηϧϑώʔϧՄೳ • ΞΫηεूதͰͷߴෛՙ࣌ͷରԠͳͲͰӡ༻՝ • Ϋϥελʔ௨৴ʹґΔඅ༻͕ఆΑΓߴֹ • ෳ AZ ߏͷͨΊ AZ ؒ௨৴ͷసૹྔʹର͢Δඅ༻͕ൃੜ
Redis Cluster ͷӡ༻՝ʢൈਮʣ • ଟͷ EC2 ΠϯελϯεͷϝϯςφϯεΦϖϨʔγϣϯ • εέʔϧΞτɾεέʔϧΞοϓΛճආ͢Δ৺ཧతѹྗ •
γϟʔυؒͷෛՙࢄ • ෛՙΛݟͳ͕ΒஸೡʹεϩοτΛ࠶ஔ͢ΔΦϖϨʔγϣϯ • ͨͩ͠ஸೡͳ࠶ஔͰطͷϗοτεϙοτͷϐϯϙΠϯτରࡦՄೳ • ϊʔυো͔Βͷ෮ؼ࣌ͳͲكʹߏ͕ཚΕΔ͜ͱ͕͋Δ • 3ͣͭͷ͕ͣผͷγϟʔυͷϨϓϦΧʹੜ·ΕมΘͬͯ2/4ʹͳΔ
Redis Cluster ͷ Amazon ElastiCache ͷҠߦ
Ҡߦݕ౼։࢝ͷ͖͔͚ͬ • ElastiCache ଆͷػೳ֦ॆʹΑΓॳෆ࠾༻ͱͨ͠ཧ༝͕ղফ • => ΦϯϥΠϯεέʔϧ2017ळʹՄೳʹ • => γϟʔυ্ݶ2018ౙʹ֦େ
• => ॳͷߏʹҠߦͯ͠ӡ༻ෛՙΛԼ͛ΔͨΊݕ౼։࢝
Ҡߦʹͨͬͯͷݕ౼ཁૉ • ElastiCache Խͨ͠ͷ͕ཁ݅Λຬ͍ͨͯ͠Δ͔ • طଘͷ Cluster Λ ElastiCache ʹͲ͏Ҡߦ͢Δ͔
Ҡߦʹͨͬͯͷݕ౼ཁૉ • ElastiCache Խͨ͠ͷ͕ཁ݅Λຬ͍ͨͯ͠Δ͔ => • طଘͷ Cluster Λ ElastiCache
ʹͲ͏Ҡߦ͢Δ͔
ElastiCache ԽʹΑΔओͳมԽ Redis API ޓͳͷͰΞϓϦέʔγϣϯϨϕϧ͔Βҙࣝ͢Δ͜ͱͳ͍ ΦϖϨʔγϣϯ ElastiCache ͷ API ૢ࡞Ͱߦ͑ΔΑ͏ʹͳΔ
• ͨͩ͠γϟʔυؒͷෛՙͷࡉ͔͍ίϯτϩʔϧͮ͠Β͘ͳΔ ಉΠϯελϯελΠϓͰߏங͢ΕجૅεϖοΫ΄΅ಉ EC2 Ͱߏங͢ΔΑΓΠϯελϯεʢϊʔυʣඅ༻͕6ׂ૿ • AZ ؒͷΫϥελʔ௨৴ʹΑΔసૹྔඅ༻ͰҰ෦؇͞ΕΔ͕…
ElastiCache ԽʹΑΔओͳมԽ • ӡ༻ෛՙͷݮେܴ • ͦͷͨΊͷҠߦͳͷͰ… • σϝϦοτӡ༻ෛՙͷͨΊʹड͚ೖΕΒΕΔͱஅ • අ༻্ঢରՁͱͯ͠ଥ
• ෛՙࢄͷࡉ੍͔͍ޚ͕ޮ͔ͳ͘ͳΔ͜ͱڐ༰ • ͍͟ͱ͍͏ͱ͖εέʔϧΞτͤ͞Δ͜ͱͰରॲՄೳ
ੑೳධՁ • ࣗͨͪͷϢʔεέʔεʹ͓͚ΔੑೳධՁ • ඇఆৗঢ়ଶͰ Redis ʹॻ͖ࠐΉ Lambda Function ͷΤϥʔɾܧଓ࣌ؒΛධՁ
• ΦϯϥΠϯΦϖϨʔγϣϯ࣌ • εέʔϧΞτɺεέʔϧΠϯ • Redis ΤϯδϯͷόʔδϣϯΞοϓ • ϊʔυͷϑΣΠϧΦʔόʔൃੜ࣌ • Kinesis Data Streams ͔Β Redis ʹࢸΔܥΛຊ൪ಉ༷ʹߏங
ੑೳධՁ্ͷ݁Ռ • ֤छΦϖϨʔγϣϯಛʹΤϥʔͳ͘ΦϯϥΠϯͰ࣮ݱՄೳ • εέʔϧΞτɾεέʔϧΠϯ • Redis ΤϯδϯͷόʔδϣϯΞοϓ • ϑΣΠϧΦʔόʔൃੜ࣌ʹҰ෦Ͱ࣌ؒॻ͖ࠐΈΤϥʔΛ؍ଌ
• f/o ͷؔΘΔεϩοτͰͷ෦తͳΤϥʔ • ॻ͖ࠐΈػߏͷোੑͰٵऩͰ͖Δ • EC2 ্ͷΫϥελʔͱ΄΅ಉঢ়گͱ͍͏͜ͱ͋Γڐ༰
ӡ༻্ͷධՁ • ͱͱ Mackerel ͷ AWS Ϧιʔε CloudFormation Ͱཧ •
ॳظߏஙޙͷΦϯϥΠϯૢ࡞ΛπʔϧͰཧՄೳ͔ௐࠪ • CloudFormation ͱ͋Θͤͯ Terraform ݕূ • Terraform https://github.com/terraform-providers/ terraform-provider-aws Λར༻
ӡ༻্ͷධՁ (2019/1࣌) • γϟʔυͷ૿ݮΤϯδϯͷόʔδϣϯ྆ऀͱʹΦϯϥΠϯͰՄೳ • CloudFormation ͷ߹ɺϦγϟʔσΟϯά୯ମͰͷߋ৽͕ਪ͞Ε͍ͯΔ (ref: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ aws-attribute-updatepolicy.html#cfn-attributes-updatepolicy-
useonlineresharding ) • ϨϓϦΧͷߋ৽྆ऀͱΦϯϥΠϯͰෆՄೳ • Terraform ֎෦Ͱมߋͯ͠ޙ state ͷखಈมߋͰ⁋᧒͋ΘͤՄೳ • => ⁋᧒͋ΘͤΛڐ༰͢Δ͜ͱͰ Terraform ʹΑΔཧɾӡ༻͕Մೳͱஅ
Ҡߦʹͨͬͯͷݕ౼ཁૉ • ElastiCache Խͨ͠ͷ͕ཁ݅Λຬ͍ͨͯ͠Δ͔ => OK • طଘͷ Cluster Λ
ElastiCache ʹͲ͏Ҡߦ͢Δ͔ =>
σʔλϚΠάϨʔγϣϯʢҰൠʣ • Redis ʹ͔͠ଘࡏ͠ͳ͍σʔλϚΠάϨʔγϣϯ͕ඞཁ • ΦϯϥΠϯҠߦ͕ඞཁ͔Ͱқ͕େ͖͘มԽ͢Δ • ఀࢭͯ͠ͷҠߦͰΑ͚Εқେ͖͘Լ͕Δ • ElastiCache
ͷΈࠐΈػೳͰ࣮ݱͰ͖Δ͔ͰқมԽ
ElastiCache ͷσʔλҠߦ • ඇ Redis Cluster Ͱ͋Ε EC2 ͔ΒϨϓϦέʔγϣϯՄೳ •
࣌ؒ͘͝ͷॻ͖ࠐΈఀࢭͰΓ͑Մೳ • Redis Cluster ʹର͢ΔΦϯϥΠϯϚΠάϨʔγϣϯखஈʮ·ͩʯͳ͍ • EC2 ଆͰऔͬͨεφοϓγϣοτ͔ΒΫϥελʔΛ෮ݩ͢Δ͜ͱՄೳ • ॻ͖ࠐΈΛఀࢭͯ͠ͷΓ͑ͳΒ͜Ε͚ͩͰྑ͍ • େنͳ Redis Cluster ͷ߹Γ͑ʹͲ͏͕ͯ࣌ؒ͠ඞཁ • => Redis Cluster ͷΦϯϥΠϯҠߦखஈࣗલͰ༻ҙ͢Δඞཁ͕͋Δ
Mackerel ͰͷϚΠάϨʔγϣϯ • σʔλҠߦࣗମඞཁ • ແఀࢭͰͷσʔλҠߦॳͷඞୡཁ݅Ͱͳ͔ͬͨ • ͱ͍͑ͳΔ͘ճආ͍ͨ͠ • ΞϓϦέʔγϣϯվमʹΑΔೋॏॻ͖ࠐΈΛݕ౼
=> ࠾༻ • ޙड़͢Δ߹ੑ·ΘΓͷཁ݅ΛΫϦΞͰ͖ͨͷ͕େ͖͍
ೋॏॻ͖ࠐΈʹΑΔϚΠάϨʔγϣϯ • ߋ৽ॲཧΛɺ৽چํͷ Redis Cluster ʹॻ͖ࠐΉΑ͏ʹվम͢Δ • σʔλͷಉظ͕औΕͨ࣌ͰࢀরΛ৽ Cluster ʹΓ͑Δ
• => ࢀরॲཧվमͤͣ୯७ʹΤϯυϙΠϯτΛΓ͑Δ͚ͩ • σʔλͷಉظ͕͍ͭྃ͢Δ͔Ϣʔεέʔε࣍ୈʢࠓճͷέʔεͰ1िؒʣ • Γ͑ྃޙɺچ Cluster ͷॻ͖ࠐΈΛࢭΊͯΓ͑ऴྃ 3 ⭐ 38 3 ⭐ 8 38 3 ⭐ 8 38 8
ೋॏॻ͖ࠐΈʹΑΔϚΠάϨʔγϣϯ ܦ࣌มԽͰσʔλ͕ೖΕସΘΔέʔεͰ͔͠ར༻Ͱ͖ͳ͍ ݹ͍σʔλ͕Γଓ͚͍ͯΔ߹ผݸҠߦ͢Δඞཁ͕͋Δ Ϋϥελʔ͕ฒߦՔಇ͍ͯ͠ΔؒํͷΠϯϑϥඅ༻͕ൃੜ ೋॏॻ͖ࠐΈΛߦ͍ͬͯΔؒΓ͢͠Δ͜ͱͰ͖Δ ೋॏॻ͖ࠐΈͷؒɺߋ৽ͷΤϥʔ࣌ʹ߹ੑΛอͭඞཁ͕͋Δ ยํͷΈॻ͖ࠐΈΤϥʔΛىͨ࣌͜͠ʹͲ͏ରॲ͢Δ͔ʁ
ೋॏॻ͖ࠐΈʹ͓͚Δ߹ੑ • ೋॏॻ͖ࠐΈΛ͢ΔͨΊʹ྆ऀͷ߹ੑΛอͬͨॻ͖ࠐΈ͕ඞཁ • Ұൠʹ໘ • ยํͷࣦഊ࣌ʹ͏ยํΛר͖͢ඞཁ͕͋Δ • ႈͳॻ͖ࠐΈͰ͋Εר͖͠Λলུ͢Δ͜ͱ͕Ͱ͖Δ •
ยํͷॻ͖ࠐΈʹࣦഊͨ͠Β·Δ͝ͱΓͤΑ͍ • ࠷ऴతʹ͍͔ͭޭͯ͠߹ੑ͕ಘΒΕΔ
Mackerel ʹ͓͚Δೋॏॻ͖ࠐΈͷ࣮ • Lambda Function ʹೋॏॻ͖ࠐΈΛ࣮ • ݩʑႈͰ࠶ࢼߦ͞ΕΔߏͩͬͨͨΊר͖͠ͷߟྀ͕ෆཁ • ྆ํͷॻ͖ࠐΈʹޭ͠ͳ͍ݶΓΤϥʔͱ͢Δ୯७ͳ࣮
set(...args) { return Promise.all([ this.primary.set(...args), this.secondary && this.secondary.set(...args), ]).then(([prim, sec]) => prim); } get(...args) { return this.primary.get(...args); }
·ͱΊ: ElastiCache ͷσʔλҠߦ • ࠓ ElastiCache ଆͰ Redis Cluster ΦϯϥΠϯҠߦͰ͖ͳ͍
• ΞϓϦέʔγϣϯ͔ΒͷೋॏॻࠐͰΦϯϥΠϯҠߦՄೳͱஅ • σʔλ͓ΑͼΞϓϦέʔγϣϯಛੑ͕͜ΕΛຬͨͨͨ͠Ί • ႈͳߋ৽ॲཧͱͯ͠ઃܭͰ͖͍ͯΔ͜ͱ͕·͍͠
Ҡߦʹͨͬͯͷݕ౼ཁૉ => ྃ • ElastiCache Խͨ͠ͷ͕ཁ݅Λຬ͍ͨͯ͠Δ͔ => OK • طଘͷ
Cluster Λ ElastiCache ʹͲ͏Ҡߦ͢Δ͔ => OK
࣮ࡍͷ ElastiCache ͷҠߦ Ҡߦ։ൃߏங ධՁ σʔλҠߦ
ࢀর • 1ϲ݄ͷධՁϑΣΠζͰҠߦՄ൱ͱํΛܾఆ • Ҡߦ։ൃ։͔࢝ΒҠߦྃ·Ͱ5ϲ݄ • શઐͰͳ͘ଞͷϓϩδΣΫτΛڬΈͳ͕Βͷ࣮ࢪ • Ϣʔβʔ͚ͷτϥϒϧͳ͘ҠߦΛྃ ݕূ ݕূ
·ͱΊ: ElastiCache ͷҠߦ • ElastiCache ଆͷػೳ֦ॆʹΑΓҠߦΛ࣮ࢪ • අ༻૿͋Δͷͷड͚ೖΕՄೳͱஅ • εέʔϧૢ࡞࣌ͷӡ༻ΞϓϦέʔγϣϯͷڍಈΛௐࠪ
• σʔλಉظɾΓ͑ͷΈࣗͨͪͰߏங • ϢʔβʔӨڹΛग़͢͜ͱͳ͘ແఀࢭͰҠߦ
ElastiCache Խ͞Ε͔ͯΒͷӡ༻
ӡ༻τϐοΫ • ύϑΥʔϚϯεɾ҆ఆੑ • Πϯϑϥඅ༻ • ϞχλϦϯά • ΦϖϨʔγϣϯ
ύϑΥʔϚϯεɾ҆ఆੑ • ElastiCache Խͨ͠Ϋϥελʔ҆ఆͯ͠Քಇ • Ұ෦γϟʔυͰ CPU Λ͍Δߴෛՙ࣌ߴෛՙͳΓʹ҆ఆՔಇ • Lambda
͔Βͷॻ͖ࠐΈύϑΥʔϚϯεগ্͔ͨ͠͠͠Εͳ͍ʁ • ͍͔ͭ͘ཁҼ͕͋ΔͷͰ ElastiCache ԽͱΓ͚Ͱ͖ͳ͍ • ΠϯελϯελΠϓͷੈมߋ (r4 => r5) • Redis ΤϯδϯͷόʔδϣϯΞοϓ (3ܥ => 5ܥ)
Πϯϑϥඅ༻ • අ༻มಈ෯΄΅ࣄલͷݟੵΓ௨Γ • Ϋϥεϥʔ௨৴సૹྔʹΑΔඅ༻ݮͰҰ෦૬ࡴ • ࣮ࡍϦβʔϒυϊʔυΛར༻ͯ͠අ༻Λ͍͑ͯΔ • ͱ͍͑ EC2
ϦβʔϒυΠϯελϯε͕͋Δ • ʢͪ͜Βͷํ͕Ҿߴ͍……ʣ
ϞχλϦϯά • Amazon CloudWatch ͔ΒಘΒΕΔϝτϦοΫΛར༻ • ࣮ࡍ Mackerel ͷ AWS
ΠϯςάϨʔγϣϯͷΈͰ Mackerel ʹऔΓࠐΜͰѻ͏ • ࢹ͖͢ϝτϦοΫ ElastiCache ͷެࣜυΩϡϝϯτʹهࡌ͞Ε͍ͯΔ • EC2 ࣌ͷࢹࢦඪͱ֓ͶಉͷͷΛ CloudWatch ܦ༝ͰಡΈସ͑ͯࢹ • ओͳࢹࢦඪ • ϊʔυͷϦιʔεར༻ঢ়گ: EngineCPUUtilization, FreeableMemory • Ϣʔεέʔεʹ͋Θͤͨ Swap Usage, Eviction ͷࢹ
ΦϖϨʔγϣϯ • खಈͰߦ͍ͬͯͨΦϖϨʔγϣϯͷ΄΅શ͕ͯ AWS API ܦ༝ʹ • ࡞ۀखॱͷѹతͳ؆ུԽʹΑΔӡ༻ෛՙͷݮ • όοΫΞοϓεφοϓγϣοτͷऔΓѻ͍େ෯ʹָʹ
• ӡ༻Λશͯ์غͰ͖ΔΑ͏ʹͳͬͨ༁Ͱͳ͍͜ͱʹҙ • Redis Cluster ࣗମΛ·Δ͝ͱӅṭͯ͘͠ΕΔ༁Ͱͳ͍ • τϥϑΟοΫٸ૿ͳͲͷߴෛՙ࣌ͷεέʔϧૢ࡞ͦͷͷඞཁ • => ElastiCache ͰͷΦϖϨʔγϣϯखॱͷඋɾܗࣜԽ
·ͱΊ: ӡ༻τϐοΫ • ElastiCache ͷҠߦޙ҆ఆͯ͠Քಇ • Πϯϑϥඅ༻ͷ্ঢఆ௨Γ • CloudWatch ͔ΒಘΒΕΔΑ͏ʹͳͬͨϝτϦοΫΛݩʹࢹ
• ΦϖϨʔγϣϯ AWS API ܦ༝Ͱ݁͢ΔΑ͏ʹͳΓෛՙܰݮ
Conclusion
• Mackerel Ͱɺ AWS ্ͷෳͷσʔλετΞΛΈ߹Θͤͨ࣌ܥྻσʔλϕʔε Λӡ༻͓ͯ͠ΓɺͦͷதͰ Redis Cluster ར༻͍ͯ͠·͢ •
ॳ EC2 ্ʹߏங͍ͯ͠·͕ͨ͠ɺ ElastiCache ͕ػೳ֦ॆ͞Εͯཁ݅Λຬͨ͢ Α͏ʹͳͬͨͨΊɺӡ༻ෛՙݮͷͨΊҠߦ͠·ͨ͠ • Redis Cluster ͷΦϯϥΠϯσʔλҠߦ ElastiCache ଆͷϚωʔδυͳΈ༻ ҙ͞Ε͍ͯͳ͍ͨΊɺΞϓϦέʔγϣϯଆͰೋॏॻ͖ࠐΈΛߦͬͯҠߦ͠·ͨ͠ • ͱͱඇಉظ͔ͭႈͳॻ͖ࠐΈॲཧͰ͋ͬͨͨΊɺগͳ͍खؒͰೋॏॻ͖ࠐΈ ͕࣮ݱͰ͖·ͨ͠ • ElastiCache Λར༻͢Δ͜ͱͰɺେنͳ Redis Cluster Λগͳ͍࿑ྗͰӡ༻Ͱ͖ͯ ͓Γɺ࣌ܥྻσʔλϕʔεͷίετ࠷దԽʹߩݙ͍ͯ͠·͢