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

分散メッセージングシステムを用いた新発送サービスのアーキテクチャ / Architecture of a New Shipping Service Using a Distributed Messaging System

Kohei Sakuta
June 26, 2024
250

分散メッセージングシステムを用いた新発送サービスのアーキテクチャ / Architecture of a New Shipping Service Using a Distributed Messaging System

こちらで発表した資料です
https://zozotech-inc.connpass.com/event/316086/

Kohei Sakuta

June 26, 2024
Tweet

Transcript

  1. © ZOZO, Inc. 株式会社ZOZO 基幹システム本部 物流開発部 基幹リプレイスブロック 作田 航平 2022年に株式会社ZOZOに新卒入社。

    現在は、物流システムのリプレイスに従事。 趣味は、旅行、漫画、フットサル。 2
  2. © ZOZO, Inc. 3 アジェンダ • 発送リプレイスの概要 • リプレイス後のシステム •

    リプレイス後のアーキテクチャ • リプレイスによって改善された点 • リプレイス後の課題 • まとめ
  3. © ZOZO, Inc. 9 発送リプレイスの概要 目的:基幹システムや基幹DBで障害が発生しても発送業務が継続できること 要件 1. 基幹DBのデータを新発送サービスに送る 2.

    新発送サービスでのイベントを基幹システム側に即時連携する 基幹システムと新発送サービスを疎結合にした上で双方向にデータのやりとりが必要
  4. © ZOZO, Inc. 10 発送リプレイスの概要 目的:基幹システムや基幹DBで障害が発生しても発送業務が継続できること 要件 1. 基幹DBのデータを新発送サービスに送る 2.

    新発送サービスでのイベントを基幹システム側に即時連携する 基幹システムと新発送サービスを疎結合にした上で双方向にデータのやりとりが必要 →新発送サービスをマイクロサービスとして構築し、基幹システムと非同期通信を行うために  分散メッセージングシステムを導入
  5. © ZOZO, Inc. 18 リプレイス後のアーキテクチャ:producer batch 発送準備が完了したデータを基幹DBから取得し、SQS(Simple Queue Service)にキューイングしている •

    SQSの最大メッセージサイズは256KBなので、Java用拡張クライアントライブラリを使用して  メッセージペイロードをS3に保存している(最大2GBまで) • 既存ロジックの複雑さはproducer batchで吸収 →基幹DBで障害が発生してもSQSに送信されているデータ分は発送業務が可能になる
  6. © ZOZO, Inc. 19 リプレイス後のアーキテクチャ:consumer batch SQSから取得したメッセージをJavaのオブジェクトに変換し、Aurora MySQLの発送準備テーブルに保存 している •

    同じデータを保存しないように重複排除の制御をしている • 処理できないメッセージはデッドレターキューに退避させる →要件1「基幹DBのデータを新発送サービスに送る」を満たせた
  7. © ZOZO, Inc. 26 リプレイス後のアーキテクチャ:MSK Connect イベントテーブルへの書き込みを検知し、MSK(Amazon Managed Streaming for

    Apache Kafka)に 変更ログをメッセージとして送信している • MSK ConnectのプラグインにはDebezium connector for MySQLを採用 • MySQLのbinlogを読み込み、データの変更を検知している
  8. © ZOZO, Inc. 32 リプレイス後の課題 • 基幹DBのデータが必要になったときの改修が大変 • 作業開始できるようになるまで3つのバッチ処理が必要なので、発送準備からラグが発生している ◦

    SQSではなくMSKに寄せていくことも検討中 • 認証機能は別システムになっているが基幹DBを参照しているので、障害発生時にログインが必要と なったユーザーは作業ができない