
Shopify inventar rezervlərini Redis-dən MySQL-ə köçürdü və sistem tab gətirdi
Shopify artıq satışdan qorunma sistemini Redis-dən MySQL-ə köçürdü və rezervləri MySQL 8-in SKIP LOCKED xüsusiyyəti ilə hər vahid üçün bir sətir üzərində qurdu. Əsl maneə CPU deyil, bağlantılar idi.
Shopify artıq satışın qarşısını alan Redis əsaslı sistemi MySQL 8-in SKIP LOCKED funksiyası üzərində qurulmuş yeni dizaynla əvəz etdi və şirkətin sözlərinə görə 2025-ci ilin pik trafik dövründə yüksək məhsuldarlıq hədəflərinə çatdı.
Köhnə dizayn niyə tükəndi
Artıq satışdan qorunma iki əməliyyatdan ibarətdir: ödəniş başlayanda qoyulan qısamüddətli rezerv və ödəniş uğurlu olduqda vahidi inventar reyestrindən birdəfəlik çıxan təsdiq addımı. Əvvəllər rezervlər Redis-də saxlanılırdı: rezerv açarı azaltmaq, buraxma isə artırmaq demək idi. Redis paralelliyi yaxşı idarə edirdi, lakin rezervlər və reyestr iki ayrı sistemdə yaşayırdı; buna görə təsdiq addımı həm MySQL-i yeniləməli, həm də Redis-i təmizləməli idi və bu ikisini vahid atomik addımda birləşdirmək mümkün deyildi. Sıradan asılı olaraq bu, artıq və ya əskik satışa səbəb ola bilərdi, model isə çoxməkanlı ehtiyatı ümumiyyətlə nəzərə almırdı.
Hər vahid üçün bir sətir, məhdud hovuzda
Yeni dizayn miqdar sütunu olan tək sətir yerinə satıla bilən hər vahid üçün bir sətir saxlayır: on vahidi olan məhsulun on sətri olur və beləliklə rezervlər reyestrlə eyni ACID tranzaksiyalarını paylaşa bilir. Komanda məhsul-məkancütü üzrə 1000 sətirlə məhdudlaşan boş sətir hovuzu saxlayır və bu hovuzu reyestrdən doldurma prosesi yeniləyir. Flaş endirim hovuzu boşaldarsa, doldurma kilidin arxasında dərhal işə düşür; beləcə paralel rezervlər sətir əlavə etmə yarışına girmək əvəzinə gözləyir.
Kilidlərin tənzimlənməsi və əsl sərhəd
Bir neçə detal həlledici oldu. Filtrləmə sütunları üzərində qurulan mürəkkəb əsas açar sətir kilidlənməsini hər rezerv üçün ikidən birə endirdi. Tranzaksiyaları READ COMMITTED izolyasiya səviyyəsinə keçirmək, doldurmanı maneələyən gap kilidlərini aradan qaldırdı. Kilid sırasının vahidləşdirilməsi rezervlə təsdiq arasındakı çıxılmaz vəziyyətləri aradan qaldırdı, UNION ALL ilə toplu sorğulama isə çoxmaddəli səbətlər üçün gediş-gəliş sayını azaltdı.
Gözlənilən maneə görünmədi. CPU doyğunluqdan uzaq idi və sorğular artıq optimallaşdırılmışdı, lakin komanda yenə tavana çatdı: bağlantıları ödəniş yolunun digər hissələri tükəndirirdi. Hər SQL ifadəsini onu icra edən biznes prosesi ilə etiketləmək və ProxySQL qatında bağlantı saxlama müddətlərini toplamaq ən çox vaxtı kimin xərclədiyini göstərdi. Ödəniş yolunun təmizlənməsi əsas bazadan oxumaların 50%-ni və tranzaksiyaların 33%-ni götürdü; köhnə InnoDB parametrinin yenidən nəzərdən keçirilməsi də daha bir sərhədi aradan qaldırdı.
Keçid və nəticələr
Redis və MySQL Redis həqiqət mənbəyi olmaqla «kölgə rejimində» paralel işlədi; sonra Shopify həqiqət mənbəyini MySQL-ə keçirdi, təcili dayandırma açarını saxladı və yerləşdirməni pod-pod apardı. 2025-ci il Black Friday-da platformadakı satıcılar pikdə dəqiqədə 5,1 milyon dollar satışla rekord qurdular.
SiTech — AI ilə gücləndirilmiş veb hazırlanması
Sürətli və müasir saytlar qurur, AI-ı real biznes proseslərinə gətiririk. Layihəniz və ya sualınız var? Kömək etməyə hazırıq.