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
0
2.3k
本番環境での等価比較がコスト削減に繋がった話/equivalence check cost reduction
こちらで登壇させて頂く際の資料
https://findy.connpass.com/event/336975/
Shun Uehara
December 08, 2024
Tweet
Share
More Decks by Shun Uehara
See All by Shun Uehara
リプレイスを安心安全に 〜段階的リプレイスと等価比較〜/Safe and Secure Replacement ~ Phased Replacement and Equivalent Comparison ~
shun0624
3
6.4k
Other Decks in Programming
See All in Programming
複数アプリケーションを育てていくための共通化戦略
irof
9
3.6k
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
21
5.7k
從零到一:搭建你的第一個 Observability 平台
blueswen
1
740
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
360
Using AI Tools Around Software Development
inouehi
0
1.1k
Use Perl as Better Shell Script
karupanerura
0
680
ReadMoreTextView
fornewid
0
220
20250528 AWS Startupイベント登壇資料:AIコーディングの取り組み
procrustes5
0
150
Babylon.js 8.0のアプデ情報を 軽率にキャッチアップ / catch-up-babylonjs-8
drumath2237
0
120
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
190
Perplexity Slack Botを作ってAI活用を進めた話 / AI Engineering Summit プレイベント
n3xem
0
590
Go Modules: From Basics to Beyond / Go Modulesの基本とその先へ
kuro_kurorrr
0
100
Featured
See All Featured
A Tale of Four Properties
chriscoyier
159
23k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.9k
Building Adaptive Systems
keathley
43
2.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.3k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Unsuck your backbone
ammeep
671
58k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
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