« Tüm yayınlar

Shopify, Redis'i bırakıp MySQL ile stok rezervasyonunu ölçekledi

Shopify, checkout sırasındaki stok rezervasyon sistemini Redis'ten MySQL'e taşıdı. SKIP LOCKED, composite primary key ve izolasyon seviyesi optimizasyonlarıyla Black Friday zirvesinde ölçeklendi.

Shopify, checkout sırasında stok tutma (reservation) işlemlerini uzun süredir Redis üzerinde yürütüyordu, ancak rezervasyon ile envanter defterinin ayrı sistemlerde bulunması ödeme tamamlandığında atomik olmayan güncellemelere yol açıyordu. Bu durum hem satış fazlası (oversell) hem de gereksiz stok tükenmesi (undersell) riskini doğuruyordu. Birleşik veritabanı stratejisine geçerken ekip, MySQL'in aynı ölçeği kaldırıp kaldıramayacağını test etti.

Çözüm, tek satırda quantity kolonu tutmak yerine her satılabilir birim için ayrı bir satır oluşturmaktı. MySQL 8'in SKIP LOCKED özelliği sayesinde kilitli satırlar atlanarak eşzamanlı rezervasyonlarda çakışma azaltıldı. Ölçeklenebilirlik için ürün/lokasyon başına 1000 satırlık sınırlı bir havuz tutuldu; havuz tükendiğinde tek bir transaction kilit alarak yeniden doldurma yapıyor, diğer istekler kuyrukta bekleyip veri tutarlılığını koruyor.

Ekip ayrıca üç kritik teknik ince ayar yaptı: auto-increment yerine composite primary key kullanarak satır başına kilit sayısını ikiden bire indirdi; boş tablo üzerinde gap lock sorunlarını önlemek için REPEATABLE READ yerine READ COMMITTED izolasyon seviyesine geçti; ve reserve/claim işlemlerinde tablo erişim sırasını standartlaştırarak deadlock'ları ortadan kaldırdı. Sonuç olarak Redis'in operasyonel yükü ve atomiklik sorunları olmadan, ACID garantili tek bir MySQL tabanlı sistemle Black Friday 2025'teki zirve trafiği başarıyla karşılandı.

» KaynakHashnode #2