Geri Dön
Shopify stok rezervasyonlarında Redis yerine MySQL'e geçti ve ölçeklendi
SiTech Team2 წთ. საკითხავი

Shopify stok rezervasyonlarında Redis yerine MySQL'e geçti ve ölçeklendi

Shopify, fazla satışı önleyen sistemi Redis'ten MySQL'e taşıdı; rezervasyonları MySQL 8'in SKIP LOCKED özelliği ve her birim için tek satır üzerine kurdu. Asıl darboğaz CPU değil, bağlantı kullanımıydı.

Shopify, fazla satışı önleyen Redis tabanlı sistemi MySQL 8'in SKIP LOCKED özelliği üzerine kurulu yeni bir tasarımla değiştirdi ve şirkete göre 2025'in yoğun trafik döneminde yüksek verim hedeflerine ulaştı.

Eski tasarım neden tıkandı

Fazla satış koruması iki işlemden oluşuyor: ödeme başladığında konulan kısa süreli rezervasyon ve ödeme başarılı olduğunda birimi stok defterinden kalıcı olarak düşen onay adımı. Eskiden rezervasyonlar Redis'te tutuluyordu; rezervasyon bir anahtarı azaltmak, serbest bırakma ise artırmak anlamına geliyordu. Redis eşzamanlılığı iyi yönetiyordu, ancak rezervasyonlar ile stok defteri iki ayrı sistemde yaşıyordu; bu yüzden onay adımının hem MySQL'i güncellemesi hem de Redis'i temizlemesi gerekiyordu ve ikisi tek bir atomik adımda birleştirilemiyordu. Sıralamaya bağlı olarak bu, fazla ya da eksik satışa yol açabiliyor, model ayrıca çok konumlu stoğu hiç hesaba katmıyordu.

Birim başına bir satır, sınırlı bir havuzda

Yeni tasarım, miktar sütunu olan tek satır yerine satılabilir her birim için bir satır tutuyor: on birimlik bir ürünün on satırı oluyor ve böylece rezervasyonlar stok defteriyle aynı ACID işlemlerini paylaşabiliyor. Ekip, ürün-konumçifti başına 1.000 satırla sınırlı bir boş satır havuzu tutuyor ve bu havuzu stok defterinden bir yenileme süreci dolduruyor. Bir flaş indirim havuzu tüketirse yenileme bir kilidin arkasında anında çalışıyor; böylece eşzamanlı rezervasyonlar satır ekleme yarışına girmek yerine bekliyor.

Kilit ayarları ve gerçek sınırın bulunması

Birkaç ayrıntı belirleyici oldu. Filtreleme sütunları üzerine kurulu bileşik birincil anahtar, satır kilitlemeyi rezervasyon başına ikiden bire indirdi. İşlemleri READ COMMITTED yalıtım düzeyine taşımak, yenilemeyi engelleyen gap kilitlerini ortadan kaldırdı. Kilit sırasının standartlaştırılması rezervasyon ile onay arasındaki kilitlenmeleri bitirdi; UNION ALL ile toplu sorgulama, birden çok kalemli sepetlerde gidiş-dönüş sayısını azalttı.

Beklenen darboğaz ortaya çıkmadı. CPU doygunluktan uzaktı ve sorgular zaten optimize edilmişti, ama ekip yine de bir tavana çarptı: bağlantılar, ödeme akışının başka bölümlerinde tükeniyordu. Her SQL ifadesini onu çalıştıran iş süreciyle etiketlemek ve ProxySQL katmanında bağlantı tutma sürelerini toplamak, en çok bağlantı zamanını kimin harcadığını gösterdi. Ödeme akışının temizlenmesi birincil veritabanında okumaların %50'sini, işlemlerin %33'ünü kaldırdı; eski bir InnoDB iş parçacığı eşzamanlılığı ayarının gözden geçirilmesi de başka bir sınırı ortadan kaldırdı.

Geçiş ve sonuçlar

Redis ve MySQL, Redis'in doğruluk kaynağı olarak kaldığı "gölge modda" paralel çalıştı; ardından Shopify doğruluk kaynağını MySQL'e taşıdı, bir acil durdurma anahtarı tuttu ve pod pod ilerletti. 2025 Black Friday'inde platformdaki satıcılar zirvede dakikada 5,1 milyon dolarlık satışla rekor kırdı.

SSiTech

SiTech — AI destekli web geliştirme

Hızlı ve modern web siteleri kuruyor, AI'yı gerçek iş akışlarına taşıyoruz. Projeniz veya sorunuz mu var? Yardımcı olmaktan mutluluk duyarız.