Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
本番環境での等価比較がコスト削減に繋がった話/equivalence check cost r...
Search
Shun Uehara
December 08, 2024
Programming
2.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
本番環境での等価比較がコスト削減に繋がった話/equivalence check cost reduction
こちらで登壇させて頂く際の資料
https://findy.connpass.com/event/336975/
Shun Uehara
December 08, 2024
More Decks by Shun Uehara
See All by Shun Uehara
リプレイスを安心安全に 〜段階的リプレイスと等価比較〜/Safe and Secure Replacement ~ Phased Replacement and Equivalent Comparison ~
nikiiiii
3
7.2k
Other Decks in Programming
See All in Programming
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
270
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
130
5分で問診!Composer セキュリティ健康診断
codmoninc
0
700
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
340
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
900
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
1.1k
AIが無かった頃の素敵な出会いの話
codmoninc
1
280
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
230
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
270
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
9
3.8k
AIエージェントで 変わるAndroid開発環境
takahirom
2
740
Foundation Models frameworkで画像分析
ryodeveloper
1
160
Featured
See All Featured
A Soul's Torment
seathinner
6
3.1k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Mobile First: as difficult as doing things right
swwweet
225
10k
Documentation Writing (for coders)
carmenintech
77
5.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
GitHub's CSS Performance
jonrohan
1033
470k
Music & Morning Musume
bryan
47
7.3k
WCS-LA-2024
lcolladotor
0
770
Evolving SEO for Evolving Search Engines
ryanjones
0
250
4 Signs Your Business is Dying
shpigford
187
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Transcript
本番環境での等価比較が コスト削減に繋がった話 株式会社ZOZO 基幹システム本部 物流開発部 基幹リプレイスブロック 上原 駿 Copyright
© ZOZO, Inc. 1 そのリプレイスは最適解? -コストから見るプロダクト開発Tips
© ZOZO, Inc. 株式会社ZOZO 基幹システム本部 物流開発部 基幹リプレイスブロック 上原 駿 2023年2月に株式会社ZOZOに中途入社
前職のSESのベンチャー企業では、 上流工程からのリプレイスプロジェクト等に尽力。 現在は物流システムのリプレイスに従事。 趣味は、ゲーム(APEX)、野球、筋トレ。 2
© ZOZO, Inc. 3 アジェンダ ➢ はじめに ➢ 本番環境での等価比較で削減したコストについて ➢
本番環境での等価比較の仕組みついて ➢ まとめ
© ZOZO, Inc. https://zozo.jp/ 4 • ファッションEC • 1,600以上のショップ、9,000以上のブランドの取り扱い •
常時102万点以上の商品アイテム数と毎日平均2,600点以上の新着 商品を掲載(2024年9月末時点) • ブランド古着のファッションゾーン「ZOZOUSED」や コスメ専門モール「ZOZOCOSME」、シューズ専門ゾーン 「ZOZOSHOES」、ラグジュアリー&デザイナーズゾーン 「ZOZOVILLA」を展開 • 即日配送サービス • ギフトラッピングサービス • ツケ払い など
© ZOZO, Inc. 今回は、 その裏側を支える基幹システムのお話になります 5
© ZOZO, Inc. 既存システムの課題整理 • ビジネスロジックの複雑化に伴う機能追加の労力の増大 • 障害の分離が出来ず、単一障害点になってしまっている • Classic
ASPのサポート終了 6
© ZOZO, Inc. 色々言いましたが 一言で表すとめっちゃモノリスです。 7
© ZOZO, Inc. 8 基幹システムリプレイスの方針 (レガシー環境の) モノリス (モダンな環境の) モジュラモノリス マイクロサービス
Must Nice to have
© ZOZO, Inc. では、今回のLTではどんな話を? 9
© ZOZO, Inc. ・本番環境での等価比較で削減したコスト 10
© ZOZO, Inc. ・本番環境での等価比較で削減したコスト ・言語リプレイスで活躍した本番環境での等価比較について 11
© ZOZO, Inc. 本番環境での等価比較については、 後ほど詳しく説明させていただきます 12
© ZOZO, Inc. • 作業コスト ◦ [課題]テストデータの準備が非常に大変 • 参入コスト ◦
[課題]ドメイン知識を持っている人でないと任せられない • 心理的なコスト ◦ [課題]本番環境にリリースすることが不安 本番環境での等価比較で削減したコスト 13
© ZOZO, Inc. 本番環境での等価比較の仕組みについて 14
© ZOZO, Inc. 等価比較の仕組みを導入 言語リプレイスは、リファクタリングをすることであると私は考えています。 [書籍リファクタリング](https://www.ohmsha.co.jp/book/9784274224546/) では、以下のようにリファクタリングについて定義されています。 > リファクタリングとは、ソフトウェアの外部の振る舞いを保ったままで、内部の構造を改善して いく作業を指します。
※Martin Fowler 著「リファクタリング(第 2版)既存のコードを安全に改善する」 ,オーム社,2019 等価比較の仕組みは、本番環境での新旧の処理結果を使って機械的に振る舞いが変わっていないかど うか判断する自動テストです。 つまり、このテストが成功するとリプレイスができている状態と判断できます。 15
© ZOZO, Inc. 何をもって振る舞いが変わっていないとしたか 以下を満たす場合、処理が等価であると定義します。 1. 画面に表示される内容が一致している 2. DBなどの外部システムの状態が一致している これを機械的に判断するために、以下の指標を立てました。
1. HTMLテンプレートとそこに埋め込む変数の値が一致している 2. SQLなどの外部システムへのコマンドが一致している 上記の指標を満たしている場合、対応する等価の定義を満たしていると考えます。 16
© ZOZO, Inc. 自動テストなら入力値はどう準備した? 当然ながら自動テストには、テストデータなどの入力値が必要です。 等価比較の仕組みでは、本番環境のユーザー入力を使用します。 自動テストなので、検証期間中はユーザーがシステムをいつも通り利用するだけで、開発者は振る舞 いが変わっていないかどうかの確認ができます。 そのため、あっているかも正直感覚でしかわからなかったテストデータの準備が不要になります。 17
© ZOZO, Inc. • 作業コスト ◦ [課題]テストデータの準備が非常に大変 ▪ 本番環境のデータを使うので準備が不要になった。 •
参入コスト ◦ [課題]ドメイン知識を持っている人でないと任せられない • 心理的なコスト ◦ [課題]本番環境にリリースすることが不安 本番環境での等価比較で削減したコスト 18
© ZOZO, Inc. 等価比較API 等価比較の仕組み〜取得系処理図解〜 19 本番リクエスト 比較用ファサード 旧実装 (VBScript)
新実装 (Java) 期待値となる 処理結果 (JSON) 処理結果 (JSON) 本番リクエスト=自動テストの期待値(旧実装の値)となる 処理結果のペアで新実装の自動テストをしている Slack通知 DB登録 不等価
© ZOZO, Inc. 基幹DB 共通のIDと共にDBに履歴 を残す 等価比較の仕組み〜更新系処理図解〜 20 旧実装 (VBScript)
新実装 (Java) 旧実装のSQL文 発行履歴 (共通ID) 新実装のSQL文 発行履歴 (共通ID) 本番リクエスト 比較用ファサード ※新実装の更新処理はコミットせずにロールバックする 全実行履歴の 等価比較バッチ 比較処理 Slack通知 比較結果のDB登録 ※旧実装の更新処理はコミットする 新旧実行履歴
© ZOZO, Inc. • 作業コスト ◦ [課題]テストデータの準備が非常に大変 ▪ 本番環境のデータを使うので準備が不要になった。 •
参入コスト ◦ [課題]ドメイン知識を持っている人でないと任せられない ▪ 処理の等価性を機械的に判断するようになったのでドメイン知識をシステムが担保してくれるよ うになった。 • 心理的なコスト ◦ [課題]本番環境にリリースすることが不安 本番環境での等価比較で削減したコスト 21
© ZOZO, Inc. 比較期間 : 取得系 1週間くらい 更新系 2週間くらい 不具合が出たら修正する
等価比較の仕組み〜等価比較中〜 22 モジュラーモノリス モノリス BackOffice(VBScript) 基幹DB ユーザー 不等価 API(Java) 等価比較API (Java)
© ZOZO, Inc. 充分な検証が行われているので安心してAPI呼び出しのみに切り替えられる 等価比較の仕組み〜等価比較期間完了後〜 23 モジュラーモノリス モノリス BackOffice(VBScript) 基幹DB
ユーザー API(Java) 等価比較API (Java)
© ZOZO, Inc. • 作業コスト ◦ [課題]テストデータの準備が非常に大変 ▪ 本番環境のデータを使うので準備が不要になった。 •
参入コスト ◦ [課題]ドメイン知識を持っている人でないと任せられない ▪ 処理の等価性を機械的に判断するようになったのでドメイン知識をシステムが担保してくれるよ うになった。 • 心理的なコスト ◦ [課題]本番環境にリリースすることが不安 ▪ 充分な検証が行われるので安心してリリースできるようになった。 本番環境での等価比較で削減したコスト 24
© ZOZO, Inc. 等価比較の仕組み〜メリデメ〜 [メリット] • 自動テストの入力値が本番の値なので本番運用後の不具合が出づらい • 本番運用前に本番環境でテストができる •
充分な検証の後なので安心して本番運用に新実装を乗せられる • エビデンスの用意に手間がかからない • 入力値や期待値の準備がいらない [デメリット] • 等価比較を実施すると処理量は増えるので本番環境に高負荷がかかってしまうことがある • 処理量が最大2倍になるかつ非同期ではないのでレイテンシーが高くなる 25
© ZOZO, Inc. まとめ 26
© ZOZO, Inc. まとめ このように本番環境における等価比較の仕組みを導入した結果、以下三つのコスト削減に成功しまし た。 • 作業コスト • 参入コスト
• 心理的なコスト この仕組みが様々なリプレイスの手助けになれたら良いなと心から思っております。 こういった方法でのリプレイスも選択肢の一つとして検討してもらえると嬉しいです。 等価比較の仕組みについて詳細がもっと知りたいという方は、 テックブログを書いておりますのでこちらを見ていただけたら嬉しいです。 27
None