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
Scalable Architecture with RabbitMQ
Search
nownabe
November 24, 2015
Technology
730
2
Share
Scalable Architecture with RabbitMQ
IDCFクラウドのバックエンドをMicroservicesで作って、各コンポーネント間の通信にRabbitMQを使っているという話。
nownabe
November 24, 2015
More Decks by nownabe
See All by nownabe
ナレッジワークの成長を加速する Platform Engineering 戦略
nownabe
0
300
Go で Cloud Logging を 使いこなすための slog 活用法
nownabe
1
2.3k
Other Decks in Technology
See All in Technology
Datadog 認定試験の概要と対策
uechishingo
0
230
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
190
Mastering Ruby Box
tagomoris
3
140
APIテストとは?
nagix
0
170
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
340
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
160
「コーディング」しない人のための Claude Code 入門 ChatGPT の次の一歩 — 業務に組み込む 育成・共有・自動化
rfdnxbro
2
1.1k
Cloud Run のアップデート 触ってみる&紹介
gre212
0
300
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.8k
もりもり新機能を一挙紹介! AgentCoreに入門して、AWS上にAIエージェントを構築しよう
minorun365
PRO
6
720
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
2
210
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.1k
Featured
See All Featured
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
220
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
430
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
The Spectacular Lies of Maps
axbom
PRO
1
780
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
200
Between Models and Reality
mayunak
4
320
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
150
The Mindset for Success: Future Career Progression
greggifford
PRO
0
350
Prompt Engineering for Job Search
mfonobong
0
330
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Transcript
Scalable Architecture with RabbitMQ IDCϑϩϯςΟΞ UX։ൃ෦ ᬑঘޗ 2015/11/24
Slides’ URI https://speakerdeck.com/nownabe/scalable- architecture-with-rabbitmq
Who? ᬑঘޗ @nownabe Programmer Drummer
History 20134݄ IDCFೖࣾ 20137݄ ΧελϚʔαʔϏεຊ෦ϓϥοτϑΥʔϜαʔϏε෦Ϋϥυάϧʔϓ • Ϋϥυج൫ӡ༻ɾݕূ • αόϑΣε্ཱͪ͛ •
MBaaSαʔϏε։ൃ 20144݄ ٕज़։ൃຊ෦R&Dࣨ • MBaaSαʔϏε։ൃ • RDBαʔϏε։ൃ 20151݄ ٕज़։ൃຊ෦UX։ൃ෦ • RDBαʔϏε։ൃ • ϩʔυόϥϯαʔαʔϏε։ൃ (now!)
Favorites Ruby Itamae Ruboty React esa Daemon Chain Drive (double)
Aquiles Priester
Scalable Architecture with RabbitMQ
Γͷ Publish / Subscribe ͱ Microservices ͬͯΈͨ
Which service? ݱࡏ։ൃத IDCF Cloudͷ৽αʔϏε ϩʔυόϥϯαʔαʔϏεͷόοΫΤϯυ ͦΖͦΖʁϦϦʔε༧ఆ
What service? 7. 7. 7. … 4DBMBCMF #BDLFOE -# -#
… *%$'$MPVE $MPVE4UBDL ࡞ͬͨΓফͨ͠Γ ૿ͨ͠ΓݮΒͨ͠Γ ࢹͨ͠Γम෮ͨ͠Γ
8PSLFS … $POUSPMMFS … "1* … .POJUPS … -#OPEF -#OPEF
……… Scalable architecture
8PSLFS … $POUSPMMFS … "1* … .POJUPS … -#OPEF -#OPEF
……… Scalable architecture 3&45"1*ड͚Δͭ ࢹɾ՝ۚ͢Δͭ ࡞ͬͨΓফͨ͠Γ͢Δͭ ϩʔυόϥϯαʔຊମ ͍Ζ͍ΖΔͭ
Development style Ruby Github Qiita:Team Slack
Today’s topics ͢ RabbitMQ (Publish / Subscribe) Microservices ͞ͳ͍ RabbitMQͷෛՙࢄ/Խ
Monitoring (Sensu)
RabbitMQ
What is RabbitMQ? ϝοηʔδͷड৴ͱ৴ Advanced Message Queuing Protocol OSS࣮ Erlang
Why RabbitMQ? MicroservicesԽͰશ෦REST API͖͍ͭ ߴػೳ ୯ମͰಈ࡞͢Δ υΩϡϝϯτ͕ॆ࣮ͯͨ͠
Publish / Subscribe Producer (Publisher) Queueʹ৴ Consumer (Subscriber) Queue͔Βߪಡ Queue
✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉
Exchange ϝοηʔδΛQueueʹୡ͢Δਓ ͍ͭ͜ͷ͓͔͛Ͱ৴ܦ࿏͕ॊೈ
Example: Fanout ✉ ✉ ✉ ✉ ✉ &YDIBOHF ✉ ඥͮͯ͘͢ͷ
Queueʹୡ
Example: Roundrobin ✉ &YDIBOHF ✉ ✉ ✉ ✉ ✉ ʮՋͳਓʹ৴ʯՄ
Example: RPC ✉ ✉ Request/Response (Exchangeলུ) ฦ৴༻Queue
More complecated routings ͔ͳΓෳࡶͳϧʔςΟϯάՄೳ
Microservices
8PSLFS … $POUSPMMFS … "1* … .POJUPS … -#OPEF -#OPEF
……… Components 3&45"1*ड͚Δͭ ࢹɾ՝ۚ͢Δͭ ࡞ͬͨΓফͨ͠Γ͢Δͭ ϩʔυόϥϯαʔຊମ ͍Ζ͍ΖΔͭ
Why microservices? ScalableͳઃܭΛٻΊΒΕͨ • CloudStack͕ҰຕؠͰεέʔϧ͠ʹ͍͘ઃܭ ֤ίϯϙʔωϯτͷׂׂ͕໌֬ͩͬͨ • ͋ΔఔͲ͏͚Ε͏·͍͖ͦ͘͏͔͔͍ͬͯͨ ΞδϟΠϧʹ׳Ε͍ͯͳ͍ •
ΥʔλʔϑΥʔϧͬΆ͘ॎׂΓ։ൃ
Our Microservices
API gateway ֎෦ϦΫΤετΛ࠷ॳʹॲཧ͢Δड REST APIΛఏڙ Ϣʔβͷೝূ ControllerʹϦΫΤετΛ͑Δ
Controller ͍Ζ͍Ζஅͯ͠ࢦࣔΛग़͢Ϙε ϝΠϯDBͱΓͱΓͰ͖Δ
Worker ࣮ࡍʹಇ͘࿑ಇऀ Controller͔ΒͷࢦࣔͰಇ͘ ඇಉظͰ͕͔͔࣌ؒΔॲཧΛ͜ͳ͢ ऴΘͬͨΒControllerʹใࠂ
Node agent LB nodeʹજΉΤʔδΣϯτ LB nodeͷॳظઃఆ Worker͔ΒͷࢦࣔͰίϚϯυΛ࣮ߦ ֤छϝτϦΫεΛMonitorʹใࠂ
Monitor ࢹ՝ۚॲཧΛߦ͏ݟுΓ Agent͔ΒͷϝτϦΫεΛूܭ Կ͔͋ΕControllerʹใࠂ
Via RabbitMQ શίϯϙʔωϯτ͕RabbitMQܦ༝ͰΓͱΓ 8PSLFS $POUSPMMFS /PEFBHFOU ࢦࣔ ࢦࣔ/ใࠂ ใࠂ ඇಉظ
ಉظ
Good
Scalable! εέʔϧΞτ͕؆୯ • ৽͍͠ίϯϙʔωϯτ͕ͭͳ͗ʹ͍͚ͩ͘ RabbitMQ͕ϘτϧωοΫʹͳΓಘΔʁ • ͠Β͘৺ͳͦ͞͏
RabbitMQ is nice ϧʔςΟϯά͕ॊೈ ͱָͯ: Pub/Subඇಉظॲཧ ͱָͯ: ෛՙࢄ • Producer/ConsumerࣗͰͭͳ͗ʹ͘Δ
• LBͰࢄ͠Α͏ͱ͢Δͱ…
Nice microservices ྑ͍ײ͡ʹίϯϙʔωϯτׂͰ͖ͨ • ׂෛՙ ֤୲ऀͰҰؾʹฒߦ։ൃͰ͖ͨ 1ڞ௨ͷRabbitMQ͕͋Ε݁߹ςετ؆୯ • ϩʔΧϧͱϩʔΧϧΛ؆୯ʹͭͳ͛Δ
Sensu ·͞ʹΫϥυ࣌ͷࢹπʔϧ ͍ͭ͜RabbitMQΛ͏ Pub/SubͰࢹ
Not Good
Bad microservices ͏·͘Θ͚ΒΕͳ͔ͬͨ෦ • MonitorͱControllerͰಉ͡DBΈͯΔ ίϯϙʔωϯτԣஅͰΈΔͱDRY͡Όͳ͍ ΠϯϑϥίετͰ͔͍ • ࣍ίϯςφԽ͍ͨ͠
RPC is not good RPC͍ͬͺ͍ͬͯΔ RabbitMQຊདྷRPC͢Δͷ͡Όͳ͍ ͦΕREST APIͰͰ͖ͳ͍ͷʁ • ͍ɺͰ͖·͢
Insufficient information ใ͕গͳ͍ ެࣜυΩϡϝϯτॆ࣮ • ӳޠΦϯϦʔ
Summary MicroservicesͱPub/SubͰScalableʹʂ✨ MicroservicesͱPub/Subͷ૬ੑΠΠʂ શ෦RabbitMQܦ༝Ͱͳ͘దࡐదॴʹʂʂ
Thank you for your attention MicroservicesͱPub/SubͰScalableʹʂ✨ MicroservicesͱPub/Subͷ૬ੑΠΠʂ શ෦RabbitMQܦ༝Ͱͳ͘దࡐదॴʹʂʂ