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
LINEセグメント配信基盤について / LINE Message Delivery System
Search
snagasawa
August 27, 2020
Programming
3
11k
LINEセグメント配信基盤について / LINE Message Delivery System
https://zozotech-inc.connpass.com/event/183818/
で発表したスライドです
snagasawa
August 27, 2020
Tweet
Share
More Decks by snagasawa
See All by snagasawa
Ruby on AWS Lambdaでファッションチェックアプリのランキングページを作ってみた
snagasawa
2
1.4k
Other Decks in Programming
See All in Programming
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
650
Claude Code Skill入門
mayahoney
0
450
ファインチューニングせずメインコンペを解く方法
pokutuna
0
210
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
16
3.4k
Codex CLIのSubagentsによる並列API実装 / Parallel API Implementation with Codex CLI Subagents
takatty
2
700
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
Reactive ❤️ Loom: A Forbidden Love Story
franz1981
2
190
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
150
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
700
Nuxt Server Components
wattanx
0
170
Codex CLI でつくる、Issue から merge までの開発フロー
amata1219
0
240
How to stabilize UI tests using XCTest
akkeylab
0
150
Featured
See All Featured
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
250
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
500
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
500
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
700
Site-Speed That Sticks
csswizardry
13
1.1k
Building the Perfect Custom Keyboard
takai
2
720
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
310
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
110
Git: the NoSQL Database
bkeepers
PRO
432
67k
Transcript
LINEセグメント配信基盤について 株式会社ZOZOテクノロジーズ ECプラットフォーム部 MAアプリケーションチーム 長澤 修平 Copyright © ZOZO Technologies,
Inc.
© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ ECプラットフォーム部 MAアプリケーションチーム 長澤 修平 •
2019年4月中途入社 • 前職では広告代理店でBtoBのスマホアプリ用の マーケティングツールを開発 • サーバーサイドを中心に色々 2
© ZOZO Technologies, Inc. アジェンダ • LINEセグメント配信基盤とは • 開発の動機 •
管理画面での配信予約のフロー • アーキテクチャ(メッセージ配信) • アーキテクチャ(配信ログ/クリックログ) • アーキテクチャの要所の詳細説明 • 現在の課題 • まとめ 3
© ZOZO Technologies, Inc. LINEセグメント配信基盤とは • LINE Messaging APIを利用したメッセージ配信基盤 •
ツール名: LINE Friendship Manager(通称LFM) • LINEのZOZOTOWN公式アカウントの LINE友だちにメッセージを配信できる 4
© ZOZO Technologies, Inc. 5
© ZOZO Technologies, Inc. 開発の動機 • LFM以前 ◦ LINE Official
Account Managerという公式ツールから配信していた ◦ セグメントを切らずにLINE友だち全員に一斉配信のみ • LFM ◦ BigQueryとの連携で社内データを活用したセグメント配信 ◦ セグメント配信によるターゲット最適化とコスト最適化 6
© ZOZO Technologies, Inc. 管理画面での配信予約のフロー 1. コンテンツ登録 2. セグメント登録 3.
キャンペーンの予約 7
© ZOZO Technologies, Inc. コンテンツ登録 8
© ZOZO Technologies, Inc. 9
© ZOZO Technologies, Inc. 10
© ZOZO Technologies, Inc. セグメント登録 11
© ZOZO Technologies, Inc. キャンペーン 登録 12
© ZOZO Technologies, Inc. アーキテクチャ(メッセージ配信) ①予約確認 ②コンテンツ取得 ③セグメント抽出 ④メッセージpublish ⑤Functions起動
⑥重複配信確認 ⑦APIトークン取得 ⑧APIリクエスト ⑨配信ステータス更新 13
© ZOZO Technologies, Inc. アーキテクチャ(配信ログ/クリックログ) 14 ①APIリクエスト ②ログpublish ③ログ取得 ④重複削除
& insert ⑤クリックログ蓄積 ⑥ログエクスポート
© ZOZO Technologies, Inc. Pub/Sub TopicとCloud Functionsの並列化 • スループット向上のために10並列 •
300万requestで1時間を超過するぐらい • LINE Messaging APIのリクエスト上限の都合でこれ以上あげる予定はない 15
© ZOZO Technologies, Inc. Pub/Subの重複削除 • Cloud Pub/Subはat least onceなので2回配信されることがある
• メッセージ配信 ◦ 配信前にDatastoreで重複チェック ◦ 配信成功後にDatastoreに書き込み • 配信ログ ◦ Dataflowのtemplateの「Pub/Sub Topic To BigQuery」で重複削除 16
© ZOZO Technologies, Inc. 配信リトライ① • Cloud Functionsで起こるエラー ◦ Cloud
Datastoreの書き込み上限1秒間1回の超過 ▪ Cloud Firestoreにアップグレードすれば解消されるが未対応 ◦ 503 Transport closed, 503 Socket closed など ◦ LINE Messaging APIのリクエスト上限超過 ◦ そのほか原因不明のエラー • Pythonのretryパッケージを使っても依然として一部が失敗する • 配信失敗率 0.1~1.0% 17
© ZOZO Technologies, Inc. 配信リトライ② • BigQueryのテーブルの差分からのリトライ ◦ 差分抽出はEXCEPT DISTINCT句
• 配信失敗率 0.1~1.0% ➡ ほぼ0.0001%未満(100万人中100以下) 18 ①セグメントを 一時テーブルに保存 ②配信 ③配信ログ保存 ④配信成功/失敗判定 ⑤差分抽出 ⑥リトライ
© ZOZO Technologies, Inc. publish中断 • Pub/Sub Topicへのpublish中断 ◦ publishに最大1時間前後かかる
◦ publish中にリリースすると中断 ◦ Out Of Memoryによりpublish中のプロセスが死に、中断したこともある ▪ 配信前のセグメント抽出でメモリ消費率が高くなるため 19
© ZOZO Technologies, Inc. publish中断の解決策 • BigQuery ➡ Storage ➡
Dataflowバッチ ➡ Pub/Sub Topic を検討中 20
© ZOZO Technologies, Inc. まとめ • 管理画面での配信予約のフロー • アーキテクチャの紹介 ◦
Pub/Sub TopicとCloud Functionsの並列化 ◦ Pub/Subの重複削除 ◦ Cloud Functionsのリトライ 21
None