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.1k
本番環境での等価比較がコスト削減に繋がった話/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
5.5k
Other Decks in Programming
See All in Programming
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
510
GoとPHPのインターフェイスの違い
shimabox
2
210
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
790
SwiftUI Viewの責務分離
elmetal
PRO
2
270
Kotlinの開発でも AIをいい感じに使いたい / Making the Most of AI in Kotlin Development
kohii00
5
1.1k
ソフトウェアエンジニアの成長
masuda220
PRO
12
2.1k
React 19アップデートのために必要なこと
uhyo
8
1.5k
Djangoにおける複数ユーザー種別認証の設計アプローチ@DjangoCongress JP 2025
delhi09
PRO
4
460
負債になりにくいCSSをデザイナとつくるには?
fsubal
10
2.6k
Datadog DBMでなにができる? JDDUG Meetup#7
nealle
0
140
密集、ドキュメントのコロケーション with AWS Lambda
satoshi256kbyte
1
210
CDKを使ったPagerDuty連携インフラのテンプレート化
shibuya_shogo
0
100
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
Code Review Best Practice
trishagee
67
18k
Become a Pro
speakerdeck
PRO
26
5.2k
How STYLIGHT went responsive
nonsquared
98
5.4k
Automating Front-end Workflow
addyosmani
1368
200k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Documentation Writing (for coders)
carmenintech
67
4.6k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Embracing the Ebb and Flow
colly
84
4.6k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
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