Slide 1

Slide 1 text

本番環境での等価比較が    コスト削減に繋がった話 株式会社ZOZO
 基幹システム本部 物流開発部 基幹リプレイスブロック
 
 上原 駿 Copyright © ZOZO, Inc. 1 そのリプレイスは最適解? -コストから見るプロダクト開発Tips

Slide 2

Slide 2 text

© ZOZO, Inc. 株式会社ZOZO 基幹システム本部 物流開発部 基幹リプレイスブロック 上原 駿 2023年2月に株式会社ZOZOに中途入社 前職のSESのベンチャー企業では、 上流工程からのリプレイスプロジェクト等に尽力。 現在は物流システムのリプレイスに従事。 趣味は、ゲーム(APEX)、野球、筋トレ。 2

Slide 3

Slide 3 text

© ZOZO, Inc. 3 アジェンダ ➢ はじめに ➢ 本番環境での等価比較で削減したコストについて ➢ 本番環境での等価比較の仕組みついて ➢ まとめ

Slide 4

Slide 4 text

© ZOZO, Inc. https://zozo.jp/ 4 ● ファッションEC ● 1,600以上のショップ、9,000以上のブランドの取り扱い ● 常時102万点以上の商品アイテム数と毎日平均2,600点以上の新着 商品を掲載(2024年9月末時点) ● ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、シューズ専門ゾーン 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 ● 即日配送サービス ● ギフトラッピングサービス ● ツケ払い など

Slide 5

Slide 5 text

© ZOZO, Inc. 今回は、 その裏側を支える基幹システムのお話になります 5

Slide 6

Slide 6 text

© ZOZO, Inc. 既存システムの課題整理 ● ビジネスロジックの複雑化に伴う機能追加の労力の増大 ● 障害の分離が出来ず、単一障害点になってしまっている ● Classic ASPのサポート終了 6

Slide 7

Slide 7 text

© ZOZO, Inc. 色々言いましたが 一言で表すとめっちゃモノリスです。 7

Slide 8

Slide 8 text

© ZOZO, Inc. 8 基幹システムリプレイスの方針 (レガシー環境の) モノリス (モダンな環境の) モジュラモノリス マイクロサービス Must Nice to have

Slide 9

Slide 9 text

© ZOZO, Inc. では、今回のLTではどんな話を? 9

Slide 10

Slide 10 text

© ZOZO, Inc. ・本番環境での等価比較で削減したコスト 10

Slide 11

Slide 11 text

© ZOZO, Inc. ・本番環境での等価比較で削減したコスト ・言語リプレイスで活躍した本番環境での等価比較について 11

Slide 12

Slide 12 text

© ZOZO, Inc. 本番環境での等価比較については、 後ほど詳しく説明させていただきます 12

Slide 13

Slide 13 text

© ZOZO, Inc. ● 作業コスト ○ [課題]テストデータの準備が非常に大変 ● 参入コスト ○ [課題]ドメイン知識を持っている人でないと任せられない ● 心理的なコスト ○ [課題]本番環境にリリースすることが不安 本番環境での等価比較で削減したコスト 13

Slide 14

Slide 14 text

© ZOZO, Inc. 本番環境での等価比較の仕組みについて 14

Slide 15

Slide 15 text

© ZOZO, Inc. 等価比較の仕組みを導入 言語リプレイスは、リファクタリングをすることであると私は考えています。 [書籍リファクタリング](https://www.ohmsha.co.jp/book/9784274224546/) では、以下のようにリファクタリングについて定義されています。 > リファクタリングとは、ソフトウェアの外部の振る舞いを保ったままで、内部の構造を改善して いく作業を指します。 ※Martin Fowler 著「リファクタリング(第 2版)既存のコードを安全に改善する」 ,オーム社,2019 等価比較の仕組みは、本番環境での新旧の処理結果を使って機械的に振る舞いが変わっていないかど うか判断する自動テストです。 つまり、このテストが成功するとリプレイスができている状態と判断できます。 15

Slide 16

Slide 16 text

© ZOZO, Inc. 何をもって振る舞いが変わっていないとしたか 以下を満たす場合、処理が等価であると定義します。 1. 画面に表示される内容が一致している 2. DBなどの外部システムの状態が一致している これを機械的に判断するために、以下の指標を立てました。 1. HTMLテンプレートとそこに埋め込む変数の値が一致している 2. SQLなどの外部システムへのコマンドが一致している 上記の指標を満たしている場合、対応する等価の定義を満たしていると考えます。 16

Slide 17

Slide 17 text

© ZOZO, Inc. 自動テストなら入力値はどう準備した? 当然ながら自動テストには、テストデータなどの入力値が必要です。 等価比較の仕組みでは、本番環境のユーザー入力を使用します。 自動テストなので、検証期間中はユーザーがシステムをいつも通り利用するだけで、開発者は振る舞 いが変わっていないかどうかの確認ができます。 そのため、あっているかも正直感覚でしかわからなかったテストデータの準備が不要になります。 17

Slide 18

Slide 18 text

© ZOZO, Inc. ● 作業コスト ○ [課題]テストデータの準備が非常に大変 ■ 本番環境のデータを使うので準備が不要になった。 ● 参入コスト ○ [課題]ドメイン知識を持っている人でないと任せられない ● 心理的なコスト ○ [課題]本番環境にリリースすることが不安 本番環境での等価比較で削減したコスト 18

Slide 19

Slide 19 text

© ZOZO, Inc. 等価比較API 等価比較の仕組み〜取得系処理図解〜 19 本番リクエスト 比較用ファサード 旧実装 (VBScript) 新実装 (Java) 期待値となる 処理結果 (JSON) 処理結果 (JSON) 本番リクエスト=自動テストの期待値(旧実装の値)となる 処理結果のペアで新実装の自動テストをしている Slack通知 DB登録 不等価

Slide 20

Slide 20 text

© ZOZO, Inc. 基幹DB 共通のIDと共にDBに履歴 を残す 等価比較の仕組み〜更新系処理図解〜 20 旧実装 (VBScript) 新実装 (Java) 旧実装のSQL文 発行履歴 (共通ID) 新実装のSQL文 発行履歴 (共通ID) 本番リクエスト 比較用ファサード ※新実装の更新処理はコミットせずにロールバックする 全実行履歴の 等価比較バッチ 比較処理 Slack通知 比較結果のDB登録 ※旧実装の更新処理はコミットする 新旧実行履歴

Slide 21

Slide 21 text

© ZOZO, Inc. ● 作業コスト ○ [課題]テストデータの準備が非常に大変 ■ 本番環境のデータを使うので準備が不要になった。 ● 参入コスト ○ [課題]ドメイン知識を持っている人でないと任せられない ■ 処理の等価性を機械的に判断するようになったのでドメイン知識をシステムが担保してくれるよ うになった。 ● 心理的なコスト ○ [課題]本番環境にリリースすることが不安 本番環境での等価比較で削減したコスト 21

Slide 22

Slide 22 text

© ZOZO, Inc. 比較期間 : 取得系 1週間くらい 更新系 2週間くらい 不具合が出たら修正する 等価比較の仕組み〜等価比較中〜 22 モジュラーモノリス モノリス BackOffice(VBScript) 基幹DB ユーザー 不等価 API(Java) 等価比較API (Java)

Slide 23

Slide 23 text

© ZOZO, Inc. 充分な検証が行われているので安心してAPI呼び出しのみに切り替えられる 等価比較の仕組み〜等価比較期間完了後〜 23 モジュラーモノリス モノリス BackOffice(VBScript) 基幹DB ユーザー API(Java) 等価比較API (Java)

Slide 24

Slide 24 text

© ZOZO, Inc. ● 作業コスト ○ [課題]テストデータの準備が非常に大変 ■ 本番環境のデータを使うので準備が不要になった。 ● 参入コスト ○ [課題]ドメイン知識を持っている人でないと任せられない ■ 処理の等価性を機械的に判断するようになったのでドメイン知識をシステムが担保してくれるよ うになった。 ● 心理的なコスト ○ [課題]本番環境にリリースすることが不安 ■ 充分な検証が行われるので安心してリリースできるようになった。 本番環境での等価比較で削減したコスト 24

Slide 25

Slide 25 text

© ZOZO, Inc. 等価比較の仕組み〜メリデメ〜 [メリット] ● 自動テストの入力値が本番の値なので本番運用後の不具合が出づらい ● 本番運用前に本番環境でテストができる ● 充分な検証の後なので安心して本番運用に新実装を乗せられる ● エビデンスの用意に手間がかからない ● 入力値や期待値の準備がいらない [デメリット] ● 等価比較を実施すると処理量は増えるので本番環境に高負荷がかかってしまうことがある ● 処理量が最大2倍になるかつ非同期ではないのでレイテンシーが高くなる 25

Slide 26

Slide 26 text

© ZOZO, Inc. まとめ 26

Slide 27

Slide 27 text

© ZOZO, Inc. まとめ このように本番環境における等価比較の仕組みを導入した結果、以下三つのコスト削減に成功しまし た。 ● 作業コスト ● 参入コスト ● 心理的なコスト この仕組みが様々なリプレイスの手助けになれたら良いなと心から思っております。 こういった方法でのリプレイスも選択肢の一つとして検討してもらえると嬉しいです。 等価比較の仕組みについて詳細がもっと知りたいという方は、 テックブログを書いておりますのでこちらを見ていただけたら嬉しいです。 27

Slide 28

Slide 28 text

No content