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
RedisとGoで実装するリアルタイム通知 / Real-time notification ...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
hiroki.saito
January 18, 2019
Technology
310
0
Share
RedisとGoで実装するリアルタイム通知 / Real-time notification developed by Redis and Go
hiroki.saito
January 18, 2019
More Decks by hiroki.saito
See All by hiroki.saito
なぜフルサイクルエンジニアを目指すのか / FullCycleDeveloperNight#1
hirokisaito
0
110
新規事業と技術的課題 / ROSCAFE_TECH_NIGHT12_LT
hirokisaito
0
69
GCPとPHP PHP Conference Japan 2020
hirokisaito
1
2.4k
たった1人のAPI開発 BEAR.Sundayで解決した課題たち / PHPerKaigi2019_TrackB_1445
hirokisaito
1
3.8k
5分プログラミングSlackBotとmonolog
hirokisaito
0
170
Bear.SundayとRMパターン
hirokisaito
0
280
技術力ってなんだろう
hirokisaito
0
110
新卒3年目エンジニアの生存戦略
hirokisaito
1
350
美しいショートコーディングの世界
hirokisaito
0
260
Other Decks in Technology
See All in Technology
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.2k
チームで育てるAI自走環境_20260409
fuktig
0
1k
プロダクトを触って語って理解する、チーム横断バグバッシュのすすめ / 20260411 Naoki Takahashi
shift_evolve
PRO
1
270
DIPS2.0データに基づく森林管理における無人航空機の利用状況
naokimuroki
0
190
BIツール「Omni」の紹介 @Snowflake中部UG
sagara
0
270
暗黙知について一歩踏み込んで考える - 暗黙知の4タイプと暗黙考・暗黙動へ
masayamoriofficial
0
1.3k
デシリアライゼーションを理解する / Inside Deserialization
tomzoh
0
240
2026年度新卒技術研修 サイバーエージェントのデータベース 活用事例とパフォーマンス調査入門
cyberagentdevelopers
PRO
6
7.5k
AIを活用したアクセシビリティ改善フロー
degudegu2510
1
170
2026年に相応しい 最先端プラグインホストの設計<del>と実装</del>
atsushieno
0
100
Digitization部 紹介資料
sansan33
PRO
1
7.2k
すごいぞManaged Kubernetes
harukasakihara
1
390
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
710
Testing 201, or: Great Expectations
jmmastey
46
8.1k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Why Our Code Smells
bkeepers
PRO
340
58k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Docker and Python
trallard
47
3.8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
210
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
310
Amusing Abliteration
ianozsvald
1
150
The Language of Interfaces
destraynor
162
26k
Transcript
RedisとGoで実装する リアルタイムPUSH
None
用語解説 Radiotalk 収録型の音声配信/聴アプリ 番組 ユーザーごとのラジオ番組 トーク 配信された音声 クリップ お気に入り メッセージ
Redisのメッセージ Notification FCMのメッセージ
なにをつくったのか クリップしている番組に投稿があったら通知するシステム トーカー リスナー リスナー トークを投稿 Notification
なにを解決したかったのか ニアリアルタイム - 投稿後すぐに通知したい - 投稿後に対象ユーザーにできる限り同時に届けたい 仕組みで事故を防止する - ☓ 気をつけて実行する
◦ 仕組みで事故防止 - 基本はDryRun - 重複送信/実行を防止する
システム概要 API Redis ワーカー Go CHAN NEL 投稿
なぜRedisなのか 今回はストリーム処理が不要 シンプルで高速なメッセージングキュー 社内での実績がある PHPとGoに優秀なライブラリがある
超簡単!RedisのPublishとSubscribe Subscribe SUBSCRIBE {チャンネル名} subscription := client.Subscribe("TALK_POSTED_CHANNEL") Publish PUBLISH {チャンネル名}
{メッセージ} $this->redis->publish($channel, $message);
なぜGoなのか 並列実行を簡単にできる FirebaseAdminSDKがある(もちろんCloudMessagingSDKも)
Goによるワーカー 1. メッセージの受信 2. メッセージのパース 3. メッセージからNotificationに必要な情報をDBから取得 4. Notification内容を作成 5.
FCMでNotification送信
Goでの構成 Reciver Invoker Sender Repository
送信の並列処理 go func(to string, title string, body string, data map[string]string)
{ workersChanel <- struct{}{} // この呼び出し先が実際にNotificationを送信する invoker.Sender.Send(to, title, body, data) <-workersChanel wg.Done() }(device.Token, title, body, data)
重複実行/送信を防ぐ工夫 ワーカーはメッセージを受け取ったら問答無用で送信する ただし本番環境以外はDryRun ワーカーを1つであること => Subscribeが1であること Subscribeが1 => 重複実行ではない保証
実行パフォーマンス 並列(秒) 直列(秒) 100通 2.39 23.51 1000通 23.16 231.40 10000通
233.37 2308.81 並列実行の最大数は 10に設定
今後の展望
まとめ RedisとGoで実現するリアルタイム通知 数千の規模であればワーカー1つでも実用性はある 規模によりますが、このシンプルな構成は実装も楽でオススメ