Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
非同期連携のための メッセージングサービスを考える
Search
shinnosuke0522
May 14, 2025
Technology
210
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
非同期連携のための メッセージングサービスを考える
shinnosuke0522
May 14, 2025
More Decks by shinnosuke0522
See All by shinnosuke0522
テストコードのために読みたい本3選
shinnosuke0522
1
58
ステートソーシング型イベント駆動の視点で捉えるCQRS+ES
shinnosuke0522
1
820
Other Decks in Technology
See All in Technology
HacobuにおけるFDEとは/登壇資料(戸井田 裕貴)
hacobu
PRO
1
620
1人アドミンな私はAWSアカウント申請をSlackで完結したい!
ysuzuki
0
100
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
270
キャリアLT今日までそして明日から
kentapapa
1
130
Swap and Memory Reclaim - Squeezing Out More RAM
ennael
PRO
1
1.4k
Azure Copilot Resiliency Agentをいろいろ試してみる
tomokusaba
0
140
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
150
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
260
AIエージェントを安全で速い現場監督にする:Jev・Obsidian・メタハーネス
x5gtrn
PRO
0
140
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
120
PQC移行の今 -- IETF からみた現在地
satokan
4
690
Coil3を内部実装から読み解く~キャッシュ戦略とAVIF画像の描画〜/nikkei-tech-talk50
nikkei_engineer_recruiting
0
180
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.9k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
270
The agentic SEO stack - context over prompts
schlessera
0
950
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
4 Signs Your Business is Dying
shpigford
187
23k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
KATA
mclloyd
PRO
35
16k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Agile that works and the tools we love
rasmusluckow
331
22k
Transcript
非同期連携のための メッセージングサービスを考える Shinnosuke Hirota (@shin_developer) 技術選定を突き詰める 2025 懇親会LT
Introduction Introduction
Introduction マイクロサービス開発(非同期連携) 業務 経験 Java / Spring Boot: 5年 Kotlin
/ Spring Boot : 3ヶ月 株式会社出前館 所属 廣田 新之典(@shin_developer) 名前
Introduction 弊社出前館では、グループ会社であるLINEヤフー社と連携し、Yahoo!シ ョッピングと連動した、生鮮食品・日用品を最短20分で即時配送するサ ービス「クイックマート」を共同で運営しています。 バックエンドでは、Kafka を用いたマイクロサービス間の非同期連携を 採用することで、疎結合なサービス連携を実現しています。 近年、マイクロサービス設計においてイベント駆動アーキテクチャが注 目を集める中、メッセージングシステムの選定は非常に重要です。そこ で、この
LT では、実運用経験から導き出した選定観点をシェアし、皆 さんが最適なメッセージング基盤を選ぶ際の参考にしていただければと 思います。
Evaluation Criteria Evaluation Criteria
Queue Pub/Sub 配信モデル PublisherとConsumerが1対1(一つのアプリケーションという意味)の 関係で紐づく。そのためPublilshされたイベントを複数のアプリケーショ ンで処理する構成にすることを単独では行えない。よってQueue型のAWS SQSではAWS SNSと組み合わせてPubSubを実現している。 PublisherとConsumerが1対Nの関係で紐づくモデル。システムの非同期 連携において一つのメッセージを複数のコンシューマーで処理するケース
が多いので、基本的にこのモデルを採用したメッセージングシステムが採 用される。
exactly-once at-least-once 配信セマンティクス メッセージが正確に一回のみ配信されることが約束され、重複して配信さ れることがない。一方でスケーラビリティやスループットが劣る場合もあ る。 メッセージを少なくとも一回配信する。場合によっては同一のメッセージ が複数回配信されることもある。コンシューマー側で不整合が発生しない ように制御が必要。
Push Pull 受信モデル メッセージングサービス自体がコンシューマーに対してメッセージを送信するモデル。 リアルタイム性が高く、コンシューマーの実装がシンプルになる。一方コンシューマー がダウンしているときにも配信されるためメッセージロストしないかリトライ仕様を確 認する必要がある。複数のコンシューマーに対して配信するFan-out構成を実現するた めのルーターとして採用されるケース(SNS->複数のSQS)以外はイベント駆動で使わ れることはない印象 コンシューマー側がメッセージングサービスに対してポーリングを行い、メッセージを
取得するモデル。ダウン時にはメッセージが取得されないためロストが起こりづらく、 バックプレッシャーの制御もしやすい。基本的にマイクロサービスではこちらのモデル のメッセージングシステムが利用されることが多い印象。
レイテンシー スループット バッチ処理 パフォーマンス系 基本的に気にする必要はない。非同期連携を採用する時点でデータの生合成の多少のラグ は許容されるべきである。そのためメッセージングサービスによる数ms~数十ms程度の レイテンシーは無視して良いと考える。 長期にわたるメッセージ滞留はデータ不整合の原因になりかねないため、防ぐ必要があ る。メッセージブローカーのスループットがボトルネックになる可能性もあるので要求 値を満たせるのかの確認はした方が良い。
メッセージ滞留対策として、メッセージのバッチ取得はメジャーなアプローチの一つ と考えることができる。一度に取得できるメッセージの上限もパフォーマンスチュー ニングに寄与するので確認しておく必要がある。
コンシューマースケーリング パフォーマンス系 非同期連携にあたりコンシューマー側のスケーリングは性能維持に大いに役立つ。コンシ ューマー数を増減できなければ、負荷急増時に遅延や滞留が発生しサービス全体が不安定 になる可能性もある。メッセージングサービスではshardやpartitionのように分割してメ ッセージが保持されるが、1つのpartionに対して1つのconsumerしか接続できないよ うな制約がある場合(Kafkaなど)、運用に際してしっかり見通しを立てる位必要があ る。また特定のpartitionにメッセージが偏った場合にうまく調整がきかないケースもあ る。一方Consumerを並列スケールさせても順序保証をしてくれるメッセージングシステ ムであれば上記を気にすることなく運用することができる。
Comparison Comparison
20% Kafka (AWS MSK) RabbitMQ (AWS MQ) Google Pub/Sub AWS
Kinesis AWS SQS AWS SNS 配信モデル Pub/Sub (Topic) Pub/Sub (Exchange) Pub/Sub (Topic) Pub/Sub (ほぼTopic) Queue Pub/Sub (Topic) 配信 セマンティクス at-least-once /exactly-once at-least-once at-least-once /exactly-once at-least-once at-least-once /exactly-once at-least-once /excatly-once 受信モデル Pull Push/Pull Push/Pull Pull Pull Push 順序保証 パーティション 単位 キュー単位 Key単位 Key単位 FIFOのみKey単位 FIFOのみKey単位 再処理 可 不可 不可 S3併用で可 不可 不可 コンシューマー スケーリング パーティション数 により制限 可 可 可 (順序保証は壊れる) 可 可 スループット (チューニングにより変動) (チューニングにより変動) 4GB/s/account read: 200MB/s write: 400MB/s Standerd: 無制限 FIFO: 70000msg/s/Account Standerd: 30000msg/s/Account FIFO: 30000msg/s/Account バッチ取得 (チューニングにより変動) (チューニングにより変動) 10msg/call 1000msg or 1MB/call 10msg/Queue 10msg/Queue
Evaluation Evaluation
AWS SQS / GooglePubSub Kafka ユースケース別向き不向き パーティション数やConsmer数の見積もりなど複雑な運用が発生しない小〜中規模プロダク ト向き。リプレイができないため新規サービスを接続する際に、過去メッセージを利用した い場合はスクリプトを利用してメッセージを流す必要がある。 大規模サービス向け。チューニングによりパフォーマンスが大きく変動する(Serverless
を利用すれば比較的簡単に利用できるが、性能を活かせない可能性もある)。リプレイ対 応のため過去のメッセージを遡って再読でき、KafkaStreamを利用しデータの加工も行え る。ただしConsumerスケーリングがパーティション数に制限されるので、運用難易度は Serverlessであったとしてもそれなりに高い。
Thank you
We are hiring!! エンジニア求人⼀覧