$30 off During Our Annual Pro Sale. View Details »

LINEセグメント配信基盤について / LINE Message Delivery System

snagasawa
August 27, 2020

LINEセグメント配信基盤について / LINE Message Delivery System

https://zozotech-inc.connpass.com/event/183818/ で発表したスライドです

snagasawa

August 27, 2020
Tweet

More Decks by snagasawa

Other Decks in Programming

Transcript

  1. LINEセグメント配信基盤について

    株式会社ZOZOテクノロジーズ

    ECプラットフォーム部 MAアプリケーションチーム

    長澤 修平

    Copyright © ZOZO Technologies, Inc.

    View Slide

  2. © ZOZO Technologies, Inc.
    株式会社ZOZOテクノロジーズ

    ECプラットフォーム部

    MAアプリケーションチーム
    長澤 修平

    ● 2019年4月中途入社

    ● 前職では広告代理店でBtoBのスマホアプリ用の

    マーケティングツールを開発

    ● サーバーサイドを中心に色々

    2

    View Slide

  3. © ZOZO Technologies, Inc.
    アジェンダ

    ● LINEセグメント配信基盤とは

    ● 開発の動機

    ● 管理画面での配信予約のフロー

    ● アーキテクチャ(メッセージ配信)

    ● アーキテクチャ(配信ログ/クリックログ)

    ● アーキテクチャの要所の詳細説明

    ● 現在の課題

    ● まとめ

    3

    View Slide

  4. © ZOZO Technologies, Inc.
    LINEセグメント配信基盤とは

    ● LINE Messaging APIを利用したメッセージ配信基盤

    ● ツール名: LINE Friendship Manager(通称LFM)

    ● LINEのZOZOTOWN公式アカウントの

    LINE友だちにメッセージを配信できる

    4

    View Slide

  5. © ZOZO Technologies, Inc.
    5

    View Slide

  6. © ZOZO Technologies, Inc.
    開発の動機

    ● LFM以前

    ○ LINE Official Account Managerという公式ツールから配信していた

    ○ セグメントを切らずにLINE友だち全員に一斉配信のみ

    ● LFM

    ○ BigQueryとの連携で社内データを活用したセグメント配信

    ○ セグメント配信によるターゲット最適化とコスト最適化


    6

    View Slide

  7. © ZOZO Technologies, Inc.
    管理画面での配信予約のフロー

    1. コンテンツ登録

    2. セグメント登録

    3. キャンペーンの予約


    7

    View Slide

  8. © ZOZO Technologies, Inc.
    コンテンツ登録

    8

    View Slide

  9. © ZOZO Technologies, Inc.
    9

    View Slide

  10. © ZOZO Technologies, Inc.
    10

    View Slide

  11. © ZOZO Technologies, Inc.
    セグメント登録

    11

    View Slide

  12. © ZOZO Technologies, Inc.
    キャンペーン

    登録

    12

    View Slide

  13. © ZOZO Technologies, Inc.
    アーキテクチャ(メッセージ配信)

    ①予約確認

    ②コンテンツ取得

    ③セグメント抽出

    ④メッセージpublish

    ⑤Functions起動

    ⑥重複配信確認

    ⑦APIトークン取得

    ⑧APIリクエスト

    ⑨配信ステータス更新


    13

    View Slide

  14. © ZOZO Technologies, Inc.
    アーキテクチャ(配信ログ/クリックログ)

    14
    ①APIリクエスト

    ②ログpublish

    ③ログ取得

    ④重複削除 & insert

    ⑤クリックログ蓄積

    ⑥ログエクスポート


    View Slide

  15. © ZOZO Technologies, Inc.
    Pub/Sub TopicとCloud Functionsの並列化

    ● スループット向上のために10並列

    ● 300万requestで1時間を超過するぐらい

    ● LINE Messaging APIのリクエスト上限の都合でこれ以上あげる予定はない

    15

    View Slide

  16. © ZOZO Technologies, Inc.
    Pub/Subの重複削除

    ● Cloud Pub/Subはat least onceなので2回配信されることがある

    ● メッセージ配信

    ○ 配信前にDatastoreで重複チェック

    ○ 配信成功後にDatastoreに書き込み

    ● 配信ログ

    ○ Dataflowのtemplateの「Pub/Sub Topic To BigQuery」で重複削除


    16

    View Slide

  17. © 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

    View Slide

  18. © ZOZO Technologies, Inc.
    配信リトライ②

    ● BigQueryのテーブルの差分からのリトライ

    ○ 差分抽出はEXCEPT DISTINCT句

    ● 配信失敗率 0.1~1.0% ➡ ほぼ0.0001%未満(100万人中100以下)


    18
    ①セグメントを

     一時テーブルに保存

    ②配信

    ③配信ログ保存

    ④配信成功/失敗判定

    ⑤差分抽出

    ⑥リトライ


    View Slide

  19. © ZOZO Technologies, Inc.
    publish中断

    ● Pub/Sub Topicへのpublish中断

    ○ publishに最大1時間前後かかる

    ○ publish中にリリースすると中断

    ○ Out Of Memoryによりpublish中のプロセスが死に、中断したこともある

    ■ 配信前のセグメント抽出でメモリ消費率が高くなるため


    19

    View Slide

  20. © ZOZO Technologies, Inc.
    publish中断の解決策

    ● BigQuery ➡ Storage ➡ Dataflowバッチ ➡ Pub/Sub Topic を検討中

    20

    View Slide

  21. © ZOZO Technologies, Inc.
    まとめ

    ● 管理画面での配信予約のフロー

    ● アーキテクチャの紹介

    ○ Pub/Sub TopicとCloud Functionsの並列化

    ○ Pub/Subの重複削除

    ○ Cloud Functionsのリトライ

    21

    View Slide

  22. View Slide