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
RabbitMQを用いたイベント駆動アーキテクチャの紹介
Search
otokunaga2
July 02, 2022
Technology
1
390
RabbitMQを用いたイベント駆動アーキテクチャの紹介
JJUG CCC 2022 Springの登壇時の資料になります。
otokunaga2
July 02, 2022
Tweet
Share
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
7
63k
30代からでも遅くない! 内製開発の世界に飛び込み、最前線で戦うLLMアプリ開発エンジニアになろう
minorun365
PRO
16
5.1k
AIとSREで「今」できること
honmarkhunt
3
690
PagerDuty×ポストモーテムで築く障害対応文化/Building a culture of incident response with PagerDuty and postmortems
aeonpeople
3
540
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
5.5k
クラウド開発環境Cloud Workstationsの紹介
yunosukey
0
220
より良い開発者体験を実現するために~開発初心者が感じた生成AIの可能性~
masakiokuda
0
230
本当に必要なのは「QAという技術」だった!試行錯誤から生まれた、品質とデリバリーの両取りアプローチ / Turns Out, "QA as a Discipline" Was the Key!
ar_tama
3
650
AIにおけるソフトウェアテスト_ver1.00
fumisuke
1
340
Compose におけるパスワード自動入力とパスワード保存
tonionagauzzi
0
190
正式リリースされた Semantic Kernel の Agent Framework 全部紹介!
okazuki
0
260
10ヶ月かけてstyled-components v4からv5にアップデートした話
uhyo
5
450
Featured
See All Featured
Designing for humans not robots
tammielis
253
25k
Code Review Best Practice
trishagee
67
18k
KATA
mclloyd
29
14k
Rails Girls Zürich Keynote
gr2m
94
13k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.2k
Practical Orchestrator
shlominoach
187
11k
Done Done
chrislema
184
16k
Optimising Largest Contentful Paint
csswizardry
37
3.2k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.6k
Speed Design
sergeychernyshev
29
920
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.7k
Transcript
神戸大学大学院システム情報学研究科・ CS24 RabbitMQを用いた イベント駆動アーキテクチャの紹介 徳永 清輝(Seiki Tokunaga) 1
免責事項と自己紹介 ▪ 本発表は、現在の所属組織とは関係なく、私個人の見解 を発表するものです。所属する組織の立場、意見、戦略 を代表するものではありません。 ▪ 掲載しているRabbitMQの説明の図の1部については RabbitMQをクラウドサービスとして提供している CloudAMQPに了承をとりWebサイトより引用しています。 ▪
発表者について • 徳永清輝 (Twitter, GitHub @otokunaga2) • 業務:普段は研究所で高齢者支援ロボットシステムの設計・開 発・運用に従事 • RabbitMQをシステム開発に利用(5年ぐらい?) 2
想定聴講者 ▪ イベント駆動アーキテクチャをこれからトライしてみよ うと思っている方 ▪ ソフトウェアアーキテクチャの基礎の14章イベント駆動 アーキテクチャを読んでもう少し実装イメージをつけた いと思われた方 ▪ これまでRabbitMQは聞いたことがあるけど使ったことが
なく、気になるという方 3
イベント駆動アーキテクチャ ▪ 高度にスケーラブルで高パフォーマンスなアプリケーシ ョンを実現するために用いられる分散非同期型のアーキ テクチャスタイル。※1 ▪ 適応性に優れており、小規模なアプリケーションにも大 規模で複雑なアプリケーションにも用いることが可能。 ▪ 単体のアーキテクチャスタイルではなく、例えばリクエ
スト・レスポンスのアーキテクチャと組み合わせてハイ ブリッドな構成にもできる • 既存システムと疎結合にシステム連携する 4 ※ソフトウェアアーキテクチャの基礎 エンジニアリングより抜粋
RabbitMQについて ▪ OSSとして開発されているメッセージキューイングソフト ウェア(メッセージブローカーとも呼ばれる) ▪ AMQP-0-9-1というプロトコルをベースに一部独自拡張し て実装 ▪ Erlangという関数型プログラミング言語で開発されてい る
▪ クライアントライブラリとして多くのプログラミング言 語をサポート(Java, Spring Boot, Python, Node.js) 5 ※Reference: https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html
RabbitMQの利用事例 ▪ 広告配信などの一斉配信 ▪ バックエンドで処理に時間を要する処理 • PDFの生成 6
RabbitMQでの重要な用語 ▪ コネクション • アプリケーションとRabbitMQブローカーの通信経路(TCP) ▪ チャンネル • コネクション内で作成する仮想的な通信経路。データを送受信する際に はチャンネル経由でデータ通信を行う
• コード例: コネクションからチャンネルを作成 ▪ エクスチェンジ • メッセージのキューへの配送経路 ▪ キュー • メッセージを末尾に送り、先頭から取り出す • FIFO(first in first out) ▪ バインディング • エクスチェンジとキューの紐づけを行う 7
Producer(プロデューサ)・Consumer(コンシューマ) ▪ データを送受信するプロセスをそれぞれProducer(プロ デューサ/生産者)と Consumer(コンシューマ/消費者) と呼ばれる ▪ プロデューサ • メッセージを送信するプロセス
⮚ PDFを生成依頼するメッセージを送信 ▪ コンシューマ • メッセージを受信して何らかの処理を実施するプロセス • データを処理して正常処理ならば ⮚ ack(応答)をRabbitMQサーバに対して返却する→キューからメッ セージを除去 8
Exchange(エクスチェンジ) ▪ Exchangeはメッセージングの通信経路 • 直接キューにメッセージを送信しない点が特徴的でかつ柔軟な ルーティングを実現 • Exchangeとbindingしているキューに配送される ▪ Direct
Exchange • 直接対象となるキューに配信 ▪ Topic Exchange • 特定のトピック別に配信先を分ける(スポーツニュース、天気) ▪ Fanout: 一斉に通知 • 広告配信 9
エクスチェンジ、キューの 関連付け(Binding) ▪ エクスチェンジとキューはバインディングと呼ばれる仮 想的な関連付けによって配送先が決定する • 特にトピックエクスチェンジでは、ルーティングキーを指定する ことでより詳細に配送ルールをコントロールできる ⮚ 例
良い天気の情報を良い天気を格納するためのキュー • ルーティングキーは.(ドット)区切りで細かくルールを指定で きる ⮚ 例 weather.good, weather.bad 10
書籍購入イベントの処理例(一部省略) 11 書籍の購入 (Producer) Order Placement (Exchange) order-created Notification (Consumer)
Payment (Consumer) Inventory (Consumer) order-created order-created Warehouse (Consumer) inventory-updated
デモ動画 12
デモ 13
イベント駆動設計のメリットおよびデメリット ▪ メリット • 配送経路(Exchange)などが比較的容易 ⮚ 配送経路を追加して拡張することも可能 • パフォーマンスやスケールの面でメリットをもたらす ▪
デメリット • バインディングの管理が煩雑になりがち ⮚ 図などにまとめながら整理していくと良い ⮚ エクスチェンジとキューの命名なども含めて設計することが重要 • ユーザIDをキューの名前に含めてモニタリングをわかりやすく する等 • 異常系の処理(データ同期、デバッグ)が複雑になる ⮚ “サービス間の通信スタイルは、標準的には同期通信を選択肢、必要 に応じて非同期通信を選ぼう” 14 ※ソフトウェアアーキテクチャの基礎 エンジニアリングより抜粋
まとめ ▪ イベント駆動アーキテクチャについてRabbitMQを題材に 紹介しました。 ▪ RabbitMQの基本機能を紹介 • ※基本機能の紹介で力尽きてしまいました ▪ イベント駆動アーキテクチャの実装例の一部を在庫管理
の例をもとに紹介 15
参考資料 ▪ RabbitMQ • RabbitMQの使い方をハンズオン形式で学べるのでおすすめ ⮚ https://www.rabbitmq.com/tutorials/tutorial-one-java.html • 以下の記事が網羅的でとても分かりやすいです ⮚
https://blog.mookjp.io/memo/rabbitmq-learning/ ▪ Springに関する導入・参考資料 • RabbitMQ でメッセージング ⮚ https://spring.pleiades.io/guides/gs/messaging-rabbitmq/ • Spring integrationを用いた実装サンプル ⮚ spring-projects/spring-integration-samples ▪ イベント駆動設計等アーキテクトについて • ソフトウェアアーキテクチャの基礎~ エンジニアリングに基づく体系的アプローチ 16