ShopifyがRedisをMySQLに置き換えて在庫管理をスケール
原題: Shopify replaced Redis with MySQL for inventory reservations–and it scaled
なぜ重要か
大規模ECプラットフォームがRedisをMySQLで代替できると実証したことは、インメモリキャッシュ依存を減らす統合DB戦略の有効性を示す重要な事例となる。
Shopifyは、チェックアウト時の在庫予約システムをRedisからMySQL 8に移行したことを2026年5月12日に公式ブログで公表した。MySQL 8の「SKIP LOCKED」機能や複合主キーを活用した新設計により、2025年ブラックフライデーに記録した毎分510万ドルの販売ピーク時にも高スループット目標を達成したと報告している。
Shopifyのエンジニアリングチームは、チェックアウト処理における在庫の「オーバーセル防止システム」をRedisからMySQLへ移行した経緯と技術的詳細を公式ブログで公開した。
オーバーセル防止とは、複数の購入者が同時に同じ在庫の最後の1点を購入しようとする際に、二重販売を防ぐための仕組みだ。処理フローは「Reserve(決済開始時に一時的に在庫をロック)」と「Claim(決済成功後に在庫台帳から永続的に減算)」の2段階で構成される。誤りが生じると、一方では同一商品が二重販売されてマーチャントがキャンセル対応を強いられ、もう一方では売れるはずの商品が「売り切れ」と表示されてしまう。
2025年のブラックフライデーにはShopifyプラットフォーム上のマーチャントがピーク時に毎分510万ドルという過去最高の売上を記録しており、すべての取引が在庫処理を通過する。
MySQL移行の初期試みでは、数量を単一行で管理する設計がコンテンション(競合)のボトルネックとなり失敗していた。そこでMySQL 8が提供する「SKIP LOCKED」機能に着目し、1アイテムに1行ではなく1在庫単位に1行を割り当てる設計へ刷新した。この発想は37signalsがデータベースを活用した負荷分散に用いたアプローチから着想を得たものだという。
複合主キーおよびコネクションの可視性制御を組み合わせることで、高スループットのピークトラフィック下でも目標性能を達成した。チームはまた、真のボトルネックが当初計測・観測していた箇所とは異なる部分にあったという教訓を得たとしており、設計だけでなく観測手法の重要性も強調している。