Upgrade to Pro — share decks privately, control downloads, hide ads and more …

非同期メッセージングサービスを使ったLINEメッセージ配信の改善/improve-oa-mes...

hirai.kazushi
November 27, 2022

 非同期メッセージングサービスを使ったLINEメッセージ配信の改善/improve-oa-messaging-with-asynchronous-architecture

LINE STOREという、LINEの各デジタルアイテムを販売するWebアプリケーションを開発しています。
LINE STOREでは、多くの場面でLINE STOREの公式アカウントからユーザにメッセージ配信を行っています。
たとえば、ユーザがスタンプ購入後の購入完了通知やボーナスクレジット付与通知などです。

このメッセージ配信処理を、同期処理からメッセージングマイクロサービスを使った非同期処理に移行し、課題を改善したことを共有します。

以下イベントでの登壇資料です。
https://fortee.jp/jjug-ccc-2022-fall/proposal/e771a13a-75e2-4cd3-aaef-4c02eda1622b

hirai.kazushi

November 27, 2022
Tweet

More Decks by hirai.kazushi

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 l LINE Fukuoka 株式会社 l 開発1室 Dev K team

    Manager l LINE STORE l Server-side Engineer l 2 kids l Interests/Hobbies l Exercising / Marathon l Twitter: @hkazushi0627 ฏҪ Ұ࢙ ,";64)*)*3"*
  2. LINE STORE https://store.line.me l LINEの各デジタルアイテムを販売する 公式オンラインストア l LINEスタンプ/絵⽂字/着せかえ l マンガ、占い、LIVE、ゲーム

    などのLINE関連 サービスの⼀次通貨 l LINEスタンプ プレミアム、LINE MUSIC l 多くの決済⽅法サポート l クレジットカード、LINE Pay、PayPay、 キャリア決済 l テクノロジースタック l Java、Spring-MVC LINE STORE
  3. l LINE公式アカウント経由でLINEメッセージを送る l LINE公式アカウント(Official account) = OA l LINE Messaging

    APIをコール l -*/&4503&Ͱͷ׆༻ྫ l 購⼊完了メッセージ、クレジットバック付与通知 l サブスクリプションの定期決済通知 l 新作、おすすめスタンプ通知 OA Message
  4. Async message architecture / Tech stack ⾮同期マイクロサービスアーキテクチャ/テクノロジースタック メッセージキュー l Apache

    Kafka l LINE共通のクラスタ。⾼信頼性。 l リトライ⽤トピック Consumer l Decatonを使⽤して開発
  5. LINE Decaton l LINEのOSS https://github.com/line/decaton l Kafka Consumerライブラリ l パーティションをマルチスレッドで同時に処理

    l リトライ機能 l レイトリミッター機能 Decaton 最⼤1時間のエラーに耐えられる ように設定 リトライ間隔と最⼤リトライ回数を設定 パーティションごとのQPSを設定 Message APIのレート制限 (2,000QPS) への対策
  6. 開発を⾏う上で⼯夫した点/課題 各コンポーネントの役割︓ Producer(Application) l Kafkaにイベント登録 Consumer l Messaging APIのコール l

    失敗時のリトライ Consumerで⾏う メッセージごとにProducer、Consumerの開発が必要 Messaging APIのリクエスト=Flex Messageの作成はどこで⾏うべきか︖ 課題
  7. 開発を⾏う上で⼯夫した点/対策 Producer(Application) l Kafkaにイベント登録 l Flex message作成 Consumer l Messaging

    APIのコール l 失敗時のリトライ messsage StoreOaPushMessageEvent { string messageId = 1; int channelId = 2; string serializedPushMessage = 3; Flex messageのJSONデータを Kafkaのイベントに設定 新しいメッセージ追加時もProducerの 開発のみで対応可能 対策 Kafkaイベント︓