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
450
RabbitMQを用いたイベント駆動アーキテクチャの紹介
JJUG CCC 2022 Springの登壇時の資料になります。
otokunaga2
July 02, 2022
Tweet
Share
Other Decks in Technology
See All in Technology
Flutterでキャッチしないエラーはどこに行く
taiju59
0
220
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
180
AWSで始める実践Dagster入門
kitagawaz
0
260
実運用で考える PGO
kworkdev
PRO
0
150
Agile PBL at New Grads Trainings
kawaguti
PRO
1
280
生成AI時代のデータ基盤設計〜ペースレイヤリングで実現する高速開発と持続性〜 / Levtech Meetup_Session_2
sansan_randd
1
140
[ JAWS-UG 東京 CommunityBuilders Night #2 ]SlackとAmazon Q Developerで 運用効率化を模索する
sh_fk2
1
130
異業種出身エンジニアが気づいた、転向して十数年経っても変わらない自分の武器とは
macnekoayu
0
290
なぜスクラムはこうなったのか?歴史が教えてくれたこと/Shall we explore the roots of Scrum
sanogemaru
3
950
Obsidian応用活用術
onikun94
1
390
役割は変わっても、変わらないもの 〜スクラムマスターからEMへの転身で学んだ信頼構築の本質〜 / How to build trust
shinop
0
160
Language Update: Java
skrb
2
260
Featured
See All Featured
Docker and Python
trallard
45
3.5k
GitHub's CSS Performance
jonrohan
1032
460k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
The Invisible Side of Design
smashingmag
301
51k
Being A Developer After 40
akosma
90
590k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Facilitating Awesome Meetings
lara
55
6.5k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
Producing Creativity
orderedlist
PRO
347
40k
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