Durum durumu
Kroger, Amerika Birleşik Devletleri genelinde binlerce market işletiyor. Teslimat platformları gerçekten zor bir şey yapıyor: her müşteriye kendi yerel mağazasındaki stoku, raf envanteri değiştikçe neredeyse gerçek zamanlı olarak güncellenerek gösteriyor. Projeye katıldığımızda, sürekli eş zamanlı yük altında katalog sayfası gecikmesi kabul edilemez düzeydeydi. Temel neden bir faktörler kombinasyonuydu: ürün, mağaza ve envanter tabloları arasında indekslenmemiş birleşimler; envanter güncelleme yazmaları satır düzeyinde kilit yerine geniş tablo kilitleri alıyordu. Üçünü de ele aldık. En yaygın sorgu kalıplarında bileşik indeks stratejisi sorgu yürütme süresini önemli ölçüde azalttı. Envanter yazma hattı satır düzeyinde kilitleme kullanacak şekilde yeniden yazıldı. Tüm katalog göz atma sayfalarının önüne Redis önbellekleme konuldu.
Ne değiştirmeliydi
Katalog sayfaları sürekli eş zamanlı yük altında yavaştı — veriler, yük altında tam taramaya ulaşan üç büyük tablo arasında indekslenmemiş birleşimler gösterdi. Mağazalardan gelen toplu envanter senkronizasyon işlemleri tablo düzeyinde kilitler alıyor, senkronizasyon pencereleri sırasında tüm kullanıcılar için okuma gecikmesi artışlarına neden oluyordu.
Ne değiştik
Üç parçalı düzeltme: tüm ürün×mağaza×kategori sorgu kalıplarında bileşik indeksler; senkronizasyon penceresi gecikme artışlarını ortadan kaldırmak için satır düzeyinde kilitlemeyle yeniden yazılmış envanter hattı; envanter senkronizasyon döngüsüyle eşleşen TTL ile tüm katalog göz atma yollarında Redis önbellekleme.
Müşteri ne kazandı
- 01 Tüm katalog sorgu sıcak yollarında bileşik indeksleme
- 02 Satır düzeyinde kilitleme — senkronizasyon yazmaları okumaları engellemiyor
- 03 Envanter senkronizasyon döngüsüyle eşleşen Redis önbellek TTL
- 04 2.700+ mağazaya bireysel gerçek zamanlı stokla ölçekleniyor