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
0
9.6k
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
1
1.3k
Other Decks in Programming
See All in Programming
Ruby on cygwin 2025-02
fd0
0
140
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
4
380
JavaScriptツール群「UnJS」を5分で一気に駆け巡る!
k1tikurisu
9
1.8k
2024年のWebフロントエンドのふりかえりと2025年
sakito
2
250
Amazon Bedrock Multi Agentsを試してきた
tm2
1
290
密集、ドキュメントのコロケーション with AWS Lambda
satoshi256kbyte
0
190
法律の脱レガシーに学ぶフロントエンド刷新
oguemon
5
740
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
kfurusho
1
900
Honoとフロントエンドの 型安全性について
yodaka
7
1.2k
動作確認やテストで漏れがちな観点3選
starfish719
6
1k
Multi Step Form, Decentralized Autonomous Organization
pumpkiinbell
1
740
Software Architecture
hschwentner
6
2.1k
Featured
See All Featured
Designing for humans not robots
tammielis
250
25k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
What's in a price? How to price your products and services
michaelherold
244
12k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
We Have a Design System, Now What?
morganepeng
51
7.4k
Code Review Best Practice
trishagee
67
18k
Why Our Code Smells
bkeepers
PRO
336
57k
GitHub's CSS Performance
jonrohan
1030
460k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Designing Experiences People Love
moore
140
23k
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