Slide 1

Slide 1 text

ここがつらいよ 物流マイクロサービス 株式会社ZOZO
 基幹システム本部 物流開発部 発送基盤開発ブロック
 真田洋輝 Copyright © ZOZO, Inc. 1 ZOZO物流システムリプレイスの旅 〜序章〜 これまでとこれから

Slide 2

Slide 2 text

© ZOZO, Inc. 株式会社ZOZO 基幹システム本部 物流開発部 発送基盤開発ブロック 真田 洋輝 2021年8月に株式会社ZOZOに中途入社。 発送機能の開発・運用保守を担当するチームに所属し、 現在は物流システムのリプレイスに従事。 趣味は、フットサル、筋トレ。 2

Slide 3

Slide 3 text

© ZOZO, Inc. 3 アジェンダ 1. つらいポイント 1.1. システム間でステータスが不整合な状態になることがあった 1.2. 新発送サービスへのデータ連携にかかる時間が長い 1.3. 連携データを増やす改修コストが高い 1.4. 基幹DBの影響を受けないことを意識しすぎた 2. まとめ

Slide 4

Slide 4 text

© ZOZO, Inc. 4 アジェンダ 1. つらいポイント 1.1. システム間でステータスが不整合な状態になることがあった 1.2. 新発送サービスへのデータ連携にかかる時間が長い 1.3. 連携データを増やす改修コストが高い 1.4. 基幹DBの影響を受けないことを意識しすぎた 2. まとめ

Slide 5

Slide 5 text

© ZOZO, Inc. 1.1 システム間でステータスが不整合な状態になることがあった ピック作業を例にすると

Slide 6

Slide 6 text

© ZOZO, Inc. 6 1.1 システム間でステータスが不整合な状態になることがあった モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker S3 図:新発送サービスでピックした時の流れ ※正常フロー ピック 作業者 ピック商品のステータスを 「未ピック→ピック済み」 に更新 SQS 発送DB MSK Connect MSK バック オフィス API Producer Batch 新バック オフィス (front) API Migrator Batch Consumer Batch

Slide 7

Slide 7 text

© ZOZO, Inc. 7 1.1 システム間でステータスが不整合な状態になることがあった モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker S3 図:新発送サービスでピックした時の流れ ※正常フロー ピック 作業者 ピック商品のステータスを 「未ピック→ピック済み」 に更新 ピック商品のステータスを 「未ピック→ピック済み」 に更新 両方とも「ピック済み」にステータスが更新される SQS 発送DB MSK Connect MSK バック オフィス API Producer Batch 新バック オフィス (front) API Migrator Batch Consumer Batch

Slide 8

Slide 8 text

© ZOZO, Inc. 1.1 システム間でステータスが不整合な状態になることがあった どのような問題があったか?

Slide 9

Slide 9 text

© ZOZO, Inc. 1.1 システム間でステータスが不整合な状態になることがあった どのような問題があったか? の前に「既存モノリス→新発送サービス」への 移行フローについて補足

Slide 10

Slide 10 text

© ZOZO, Inc. 1.1 システム間でステータスが不整合な状態になることがあった リリース前 移行過渡期 移行完了 既存モノリスでの作業率 :100% 新発送サービスでの作業率:0% 既存モノリスでの作業率 :80% → 40% 新発送サービスでの作業率:20% → 60% 既存モノリスでの作業率 :0% 新発送サービスでの作業率:100% 徐々に連携する発送の区分を増やしていき、新発送サービスでの作業を 段階的に増やしている 発送区分1 発送区分2 発送区分3 発送区分4 発送区分5 発送区分1 発送区分2 発送区分3 発送区分4 発送区分5 発送区分1 発送区分2 発送区分3 発送区分4 発送区分5 発送区分1 発送区分2 発送区分3 発送区分4 発送区分5 リリース

Slide 11

Slide 11 text

© ZOZO, Inc. 1.1 システム間でステータスが不整合な状態になることがあった どのような問題があったか? の話にもどると

Slide 12

Slide 12 text

© ZOZO, Inc. 1.1 システム間でステータスが不整合な状態になることがあった ■課題 新発送サービスで作業するようにした区分については、既存モノリスでは作業し ない想定だったが、イレギュラーで既存モノリスでも作業する場面があった

Slide 13

Slide 13 text

© ZOZO, Inc. 1.1 システム間でステータスが不整合な状態になることがあった ■課題 新発送サービスで作業するようにした区分については、既存モノリスでは作業し ない想定だったが、イレギュラーで既存モノリスでも作業する場面があった その場合、新発送サービス側のステータスを更新できない

Slide 14

Slide 14 text

© ZOZO, Inc. 14 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) Consumer Worker S3 図:既存モノリスでピックした時の流れ SQS 発送DB MSK Connect MSK API Producer Batch API Migrator Batch Consumer Batch 2. 基幹DB ピック 作業者 ピック商品のステータスを 「未ピック→ピック済み」 に更新 新発送サービスは「未ピック」のまま バック オフィス ピック商品のステータスは 「未ピック」のまま 1.1 システム間でステータスが不整合な状態になることがあった 新バック オフィス (front)

Slide 15

Slide 15 text

© ZOZO, Inc. 15 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) Consumer Worker S3 図:既存モノリスでピックした時の流れ SQS 発送DB MSK Connect MSK API Producer Batch API Migrator Batch Consumer Batch 2. 基幹DB ピック 作業者 ピック商品のステータスを 「未ピック→ピック済み」 に更新 新発送サービスは「未ピック」のまま バック オフィス ピック商品のステータスは 「未ピック」のまま 1.1 システム間でステータスが不整合な状態になることがあった 新バック オフィス (front) ここは連携 していなかった

Slide 16

Slide 16 text

© ZOZO, Inc. 16 ■対策 既存モノリスでピック出来ないようにする(画面に表示しないようにする) 1.1 システム間でステータスが不整合な状態になることがあった

Slide 17

Slide 17 text

© ZOZO, Inc. 17 ■対策 既存モノリスでピック出来ないようにする(画面に表示しないようにする) とはいえ、既存モノリスでピックしたい場面も出てくるので... 1.1 システム間でステータスが不整合な状態になることがあった

Slide 18

Slide 18 text

© ZOZO, Inc. 18 ■対策 既存モノリスでピック出来ないようにする(画面に表示しないようにする) とはいえ、既存モノリスでピックしたい場面も出てくるので... 1.1 システム間でステータスが不整合な状態になることがあった 双方向通信になってしまうが「既存モノリス→新発送サービス」 へ同期的にステータスを連携させる (新発送サービスへの移行過渡期にのみ必要なので、期間限定で容認する)

Slide 19

Slide 19 text

© ZOZO, Inc. 19 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) Consumer Worker S3 図:既存モノリスでピックした時の流れ SQS 発送DB MSK Connect MSK API Producer Batch API Migrator Batch Consumer Batch 2. 基幹DB 作業者 ピック商品のステータスを 「未ピック→ピック済み」 に更新 バック オフィス 1.1 システム間でステータスが不整合な状態になることがあった 新バック オフィス (front) ピック

Slide 20

Slide 20 text

© ZOZO, Inc. 20 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) Consumer Worker S3 図:既存モノリスでピックした時の流れ SQS 発送DB MSK Connect MSK API Producer Batch API Migrator Batch Consumer Batch 2. 基幹DB 作業者 ピック商品のステータスを 「未ピック→ピック済み」 に更新 バック オフィス ピック商品のステータスを 「未ピック→ピック済み」 に更新 新発送サービスも「ピック済み」に更新される ※イベント テーブルへの 書き込みは しない 1.1 システム間でステータスが不整合な状態になることがあった 新バック オフィス (front) ピック

Slide 21

Slide 21 text

© ZOZO, Inc. 21 アジェンダ 1. つらいポイント 1.1. システム間でステータスが不整合な状態になることがあった 1.2. 新発送サービスへのデータ連携にかかる時間が長い 1.3. 連携データを増やす改修コストが高い 1.4. 基幹DBの影響を受けないことを意識しすぎた 2. まとめ

Slide 22

Slide 22 text

© ZOZO, Inc. 1.2 新発送サービスへのデータ連携にかかる時間が長い 連携に何分かかっているかというと

Slide 23

Slide 23 text

© ZOZO, Inc. 23 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker S3 図:新発送サービスへデータを連携する時の流れ SQS 発送DB MSK Connect MSK バック オフィス API Producer Batch API Migrator Batch Consumer Batch 全て定期実行のBatchなので合計10分前後かかっている 1.2 新発送サービスへのデータ連携にかかる時間が長い 新バック オフィス (front)

Slide 24

Slide 24 text

© ZOZO, Inc. 1.2 新発送サービスへのデータ連携にかかる時間が長い 10分って長いの??

Slide 25

Slide 25 text

© ZOZO, Inc. 1.2 新発送サービスへのデータ連携にかかる時間が長い 長くないと思っていたが、長かった...

Slide 26

Slide 26 text

© ZOZO, Inc. 26 ■課題 開発段階では10分前後かかっても問題ないと思っていた 1.2 新発送サービスへのデータ連携にかかる時間が長い

Slide 27

Slide 27 text

© ZOZO, Inc. 27 ■課題 開発段階では10分前後かかっても問題ないと思っていた 実際に運用していく中で、迅速に連携しないと困る場面があることが発覚 1.2 新発送サービスへのデータ連携にかかる時間が長い

Slide 28

Slide 28 text

© ZOZO, Inc. 28 ■課題 開発段階では10分前後かかっても問題ないと思っていた 実際に運用していく中で、迅速に連携しないと困る場面があることが発覚 1.2 新発送サービスへのデータ連携にかかる時間が長い 10分だと長い (遅くとも3分以内には連携したい)

Slide 29

Slide 29 text

© ZOZO, Inc. 29 ■対策(検討中) ● 各バッチで並列処理できるようにする ● ワーカー(常時起動しているプロセス)っぽい挙動にしてみる (無限ループなど) ● バッチの実行間隔を短くする ● 既存モノリスから新発送サービスのAPIを叩いて同期的に連携する ・・・ 1.2 新発送サービスへのデータ連携にかかる時間が長い

Slide 30

Slide 30 text

© ZOZO, Inc. 30 ■対策(検討中) ● 各バッチで並列処理できるようにする ● ワーカー(常時起動しているプロセス)っぽい挙動にしてみる (無限ループなど) ● バッチの実行間隔を短くする ● 既存モノリスから新発送サービスのAPIを叩いて同期的に連携する ・・・ 最終的にはSQSではなくKafkaに寄せていくことを検討中 (連携時間が早くなる&アプリ側のロジックが簡単になりそう) 1.2 新発送サービスへのデータ連携にかかる時間が長い

Slide 31

Slide 31 text

© ZOZO, Inc. 31 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker S3 図:現実装 SQS 発送DB MSK Connect MSK API Producer Batch API Migrator Batch Consumer Batch SQSにいれていた部分を 1.2 新発送サービスへのデータ連携にかかる時間が長い 新バック オフィス (front) バック オフィス

Slide 32

Slide 32 text

© ZOZO, Inc. 32 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:kafkaに寄せた場合の新発送サービスへの連携イメージ 発送DB MSK Connect MSK API Producer Batch API Migrator Batch (Worker) Consumer Batch (Worker) 1.2 新発送サービスへのデータ連携にかかる時間が長い 新発送サービス側はメッセージ駆動でデータを取り込む 新バック オフィス (front) バック オフィス

Slide 33

Slide 33 text

© ZOZO, Inc. 33 アジェンダ 1. つらいポイント 1.1. システム間でステータスが不整合な状態になることがあった 1.2. 新発送サービスへのデータ連携にかかる時間が長い 1.3. 連携データを増やす改修コストが高い 1.4. 基幹DBの影響を受けないことを意識しすぎた 2. まとめ

Slide 34

Slide 34 text

© ZOZO, Inc. 1.3 連携データを増やす改修コストが高い 新発送サービスにデータを持ってくるまでに 何個のバッチが起動していたか?

Slide 35

Slide 35 text

© ZOZO, Inc. 35 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker S3 図:新発送サービスへデータを持っていく時の流れ SQS 発送DB MSK Connect MSK API Producer Batch API Migrator Batch Consumer Batch データを持ってくるのに3バッチ起動している 1.3 連携データを増やす改修コストが高い 新バック オフィス (front) バック オフィス

Slide 36

Slide 36 text

© ZOZO, Inc. 36 ■課題 新発送サービスで使いたいデータが1つ増えたら... 1.3 連携データを増やす改修コストが高い

Slide 37

Slide 37 text

© ZOZO, Inc. 37 ■課題 新発送サービスで使いたいデータが1つ増えたら... 1.3 連携データを増やす改修コストが高い 3バッチ改修する必要がある。(改修コストが高い)

Slide 38

Slide 38 text

© ZOZO, Inc. 38 ■対策 根本的な解決策はまだ思いついてないです... 1.3 連携データを増やす改修コストが高い

Slide 39

Slide 39 text

© ZOZO, Inc. 39 ■対策 根本的な解決策はまだ思いついてないです... 検討中 ● 既存モノリスで管理しているが発送業務でのみしか使わないマスターは、 新発送サービスでもマスターを管理するようにする(一時的なマスタの2 重管理を許容) ● 必要なデータしか連携していなかったが、発送関連のデータは要否にかか わらずある程度連携しておく 1.3 連携データを増やす改修コストが高い

Slide 40

Slide 40 text

© ZOZO, Inc. 40 アジェンダ 1. つらいポイント 1.1. システム間でステータスが不整合な状態になることがあった 1.2. 新発送サービスへのデータ連携にかかる時間が長い 1.3. 連携データを増やす改修コストが高い 1.4. 基幹DBの影響を受けないことを意識しすぎた 2. まとめ

Slide 41

Slide 41 text

© ZOZO, Inc. 1.4 基幹DBの影響を受けないことを意識しすぎた ピック準備(備品※ 確保)の作業を例にすると ※備品:ピックした商品をいれるカゴのようなもの

Slide 42

Slide 42 text

© ZOZO, Inc. 42 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※正常フロー この備品(カゴ) 使います 作業者 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います 1.4 基幹DBの影響を受けないことを意識しすぎた 新バック オフィス (front)

Slide 43

Slide 43 text

© ZOZO, Inc. 43 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※正常フロー この備品(カゴ) 使います 作業者 備品を「使用中」状態 にする 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います この備品 使います OK 1.4 基幹DBの影響を受けないことを意識しすぎた OK 新バック オフィス (front)

Slide 44

Slide 44 text

© ZOZO, Inc. 44 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※正常フロー この備品(カゴ) 使います 作業者 備品を「使用中」状態 にする 基幹DBの備品テーブルのステータスを「使用中」に更新し作業する 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います この備品 使います OK OK 1.4 基幹DBの影響を受けないことを意識しすぎた OK 新バック オフィス (front)

Slide 45

Slide 45 text

© ZOZO, Inc. 1.4 基幹DBの影響を受けないことを意識しすぎた 基幹DBがダウンしていると

Slide 46

Slide 46 text

© ZOZO, Inc. 46 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※基幹DBがダウンしてる場合 この備品(カゴ) 使います 作業者 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います この備品 使います DBダウン中 1.4 基幹DBの影響を受けないことを意識しすぎた 新バック オフィス (front)

Slide 47

Slide 47 text

© ZOZO, Inc. 47 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※基幹DBがダウンしてる場合 この備品(カゴ) 使います 作業者 備品を「使用中」状態 にできない 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います この備品 使います DBダウン中 NG 1.4 基幹DBの影響を受けないことを意識しすぎた 新バック オフィス (front)

Slide 48

Slide 48 text

© ZOZO, Inc. 48 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※基幹DBがダウンしてる場合 この備品(カゴ) 使います 作業者 備品を「使用中」状態 にできない 基幹DBがダウンしていても作業は止めたくないので、 備品を使用してOKとレスポンスしている 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います この備品 使います DBダウン中 NG OK 1.4 基幹DBの影響を受けないことを意識しすぎた 新バック オフィス (front)

Slide 49

Slide 49 text

© ZOZO, Inc. 1.4 基幹DBの影響を受けないことを意識しすぎた 基幹DBがダウンしていなくても タイムアウトすると

Slide 50

Slide 50 text

© ZOZO, Inc. 50 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※クエリタイムアウトが発生した場合 作業者 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います この備品 使います 1.4 基幹DBの影響を受けないことを意識しすぎた この備品(カゴ) 使います 新バック オフィス (front) クエリタイ ムアウト

Slide 51

Slide 51 text

© ZOZO, Inc. 51 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※クエリタイムアウトが発生した場合 作業者 DB負荷が高いだけで、 ダウンしてるわけではない 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います この備品 使います クエリタイ ムアウト NG 1.4 基幹DBの影響を受けないことを意識しすぎた この備品(カゴ) 使います 新バック オフィス (front)

Slide 52

Slide 52 text

© ZOZO, Inc. 52 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※クエリタイムアウトが発生した場合 作業者 DB負荷が高いだけで、 ダウンしてるわけではない 基幹DBがダウンしているわけではないが、 タイムアウトになったときもOKとレスポンスしていた 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います OK この備品 使います クエリタイ ムアウト NG 1.4 基幹DBの影響を受けないことを意識しすぎた この備品(カゴ) 使います 新バック オフィス (front)

Slide 53

Slide 53 text

© ZOZO, Inc. 53 ■課題 基幹DBを更新せずに備品を使うと不整合な状態になるので、後々手動補正が必要になる 1.4 基幹DBの影響を受けないことを意識しすぎた

Slide 54

Slide 54 text

© ZOZO, Inc. 54 ■課題 基幹DBを更新せずに備品を使うと不整合な状態になるので、後々手動補正が必要になる 数日に1回程度の頻度でタイムアウトがおきている (詳細は省きますが、基幹DBを使用している以上は一旦しょうがない) 1.4 基幹DBの影響を受けないことを意識しすぎた

Slide 55

Slide 55 text

© ZOZO, Inc. 55 ■課題 基幹DBを更新せずに備品を使うと不整合な状態になるので、後々手動補正が必要になる 数日に1回程度の頻度でタイムアウトがおきている (詳細は省きますが、基幹DBを使用している以上は一旦しょうがない) クエリタイムアウト(10s)に関しては、再度実行したり少し時間を置くと解消する可能 性が高い 1.4 基幹DBの影響を受けないことを意識しすぎた

Slide 56

Slide 56 text

© ZOZO, Inc. 56 ■課題 基幹DBを更新せずに備品を使うと不整合な状態になるので、後々手動補正が必要になる 数日に1回程度の頻度でタイムアウトがおきている (詳細は省きますが、基幹DBを使用している以上は一旦しょうがない) クエリタイムアウト(10s)に関しては、再度実行したり少し時間を置くと解消する可能 性が高い 1.4 基幹DBの影響を受けないことを意識しすぎた 不必要な手動補正がそこそこの頻度で発生

Slide 57

Slide 57 text

© ZOZO, Inc. 57 ■対策(予定) 基幹DBがダウンしているかどうかの状態を管理する環境変数を、 新発送サービス側で持つ 1.4 基幹DBの影響を受けないことを意識しすぎた

Slide 58

Slide 58 text

© ZOZO, Inc. 58 ■対策(予定) 基幹DBがダウンしているかどうかの状態を管理する環境変数を、 新発送サービス側で持つ その状態によって新発送サービス側の挙動を制御する 1.4 基幹DBの影響を受けないことを意識しすぎた

Slide 59

Slide 59 text

© ZOZO, Inc. 59 ■対策(予定) 基幹DBがダウンしているかどうかの状態を管理する環境変数を、 新発送サービス側で持つ その状態によって新発送サービス側の挙動を制御する 1.4 基幹DBの影響を受けないことを意識しすぎた 本当に基幹DBがダウンしている時のみ 不整合な状態を許容し処理を継続できるようにする ※平常時 :補正コスト > 作業を止めないメリット ※DBダウン時:補正コスト < 作業を止めないメリット

Slide 60

Slide 60 text

© ZOZO, Inc. 60 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※基幹DBダウンフラグ=ON 作業者 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います この備品 使います DBダウン中 NG 1.4 基幹DBの影響を受けないことを意識しすぎた この備品(カゴ) 使います 新バック オフィス (front) 備品を「使用中」状態 にできない ダウンフラグ ON

Slide 61

Slide 61 text

© ZOZO, Inc. 61 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※基幹DBダウンフラグ=ON 作業者 基幹DBダウンフラグ=ONの場合はOKとレスポンスする 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います OK この備品 使います DBダウン中 NG 1.4 基幹DBの影響を受けないことを意識しすぎた この備品(カゴ) 使います 新バック オフィス (front) 備品を「使用中」状態 にできない ダウンフラグ ON

Slide 62

Slide 62 text

© ZOZO, Inc. 62 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※基幹DBダウンフラグ=OFF 作業者 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います この備品 使います クエリタイ ムアウト NG 1.4 基幹DBの影響を受けないことを意識しすぎた この備品(カゴ) 使います 新バック オフィス (front) 備品を「使用中」状態 にできない OFF ダウンフラグ

Slide 63

Slide 63 text

© ZOZO, Inc. 63 モノリス 新発送サービス(AWS) 既存モノリス (オンプレミス) モジュラーモノリス (AWS) 基幹DB Consumer Worker 図:新発送サービスでピック準備(備品確保)する時の流れ ※基幹DBダウンフラグ=OFF 作業者 基幹DBダウンフラグ=OFFの場合はNGとレスポンスする 発送DB MSK Connect MSK バック オフィス API API この備品 使います この備品 使います NG この備品 使います クエリタイ ムアウト NG 1.4 基幹DBの影響を受けないことを意識しすぎた この備品(カゴ) 使います 新バック オフィス (front) 備品を「使用中」状態 にできない OFF ダウンフラグ

Slide 64

Slide 64 text

© ZOZO, Inc. 64 アジェンダ 1. つらいポイント 1.1. システム間でステータスが不整合な状態になることがあった 1.2. 新発送サービスへのデータ連携にかかる時間が長い 1.3. 連携データを増やす改修コストが高い 1.4. 基幹DBの影響を受けないことを意識しすぎた 2. まとめ

Slide 65

Slide 65 text

© ZOZO, Inc. 65 ● サービス間でデータをやり取りする部分での課題が多く露呈した ○ 連携速度、改修コスト、整合性等 ○ 1つのDBで処理していたプロセスを分離・非同期化するのはやはり大変 ● イレギュラーフローも含め現場運用に対する深い理解が必要 ● 要件によっては必ず他サービス(DB)に影響を受けないようにすればよいわけで はない ○ どのような状態だと影響を受けないようにするかの見極めが重要 2. まとめ

Slide 66

Slide 66 text

© ZOZO, Inc. 66 最後に

Slide 67

Slide 67 text

© ZOZO, Inc. 67 つらいポイントの紹介をしましたが

Slide 68

Slide 68 text

© ZOZO, Inc. 68 つらいポイントの紹介をしましたが もちろん、マイクロサービス化して良い面もありました (既存システムの影響を受けづらくなった等)

Slide 69

Slide 69 text

© ZOZO, Inc. 69 また、基幹システムの運用部署としては挑戦的なプロジェクトだった  

Slide 70

Slide 70 text

© ZOZO, Inc. 70 また、基幹システムの運用部署としては挑戦的なプロジェクトだった つらいポイント=挑戦した結果 

Slide 71

Slide 71 text

No content