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.2k
本番環境での等価比較がコスト削減に繋がった話/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.1k
Other Decks in Programming
See All in Programming
趣味全開のAITuber開発
kokushin
0
190
パスキーのすべて / 20250324 iddance Lesson.5
kuralab
0
150
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
0
490
AI Coding Agent Enablement - エージェントを自走させよう
yukukotani
13
5.8k
これだけは知っておきたいクラス設計の基礎知識 version 2
masuda220
PRO
24
6k
PHPバージョンアップから始めるOSSコントリビュート / how2oss-contribute
dmnlk
1
990
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
1.2k
AWS で実現する安全な AI エージェントの作り方 〜 Bedrock Engineer の実装例を添えて 〜 / how-to-build-secure-ai-agents
gawa
8
710
Enterprise Web App. Development (1): Build Tool Training Ver. 5
knakagawa
1
110
英語 × の私が、生成AIの力を借りて、OSSに初コントリビュートした話
personabb
0
180
データベースエンジニアの仕事を楽にする。PgAssistantの紹介
nnaka2992
9
4.5k
API for docs
soutaro
1
590
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Code Review Best Practice
trishagee
67
18k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.6k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
135
33k
Statistics for Hackers
jakevdp
798
220k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
The Cost Of JavaScript in 2023
addyosmani
49
7.7k
Thoughts on Productivity
jonyablonski
69
4.6k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
12k
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