العودة
شوبيفاي استبدلت Redis بـ MySQL لحجز المخزون، ونظامها صمد تحت الحمل
SiTech Team3 წთ. საკითხავი

شوبيفاي استبدلت Redis بـ MySQL لحجز المخزون، ونظامها صمد تحت الحمل

نقلت شوبيفاي الحماية من البيع الزائد من Redis إلى MySQL، وأعادت بناء الحجوزات على ميزة SKIP LOCKED وعلى صف واحد لكل وحدة مخزون. والدرس الأهم: عنق الزجاجة كان في الاتصالات لا في المعالج.

استبدلت شوبيفاي نظامها المبني على Redis لمنع البيع الزائد بتصميم يعتمد على ميزة SKIP LOCKED في MySQL 8، وقالت الشركة إنه حقق أهداف الإنتاجية العالية خلال ذروة الحمل في 2025. وقد كتبت عن المشروع المهندسة إميلي نوال.

لماذا توقف التصميم القديم

تتكون الحماية من البيع الزائد من عمليتين: الحجز، وهو تثبيت قصير المدى يبدأ مع بدء الدفع، والتأكيد، الذي يخصم الوحدة نهائيا من سجل المخزون عند نجاح الدفع. كان الحجز يخزَّن سابقا في Redis، حيث يعني الحجز تقليص مفتاح والتخلي عنه زيادته. كان Redis يتعامل جيدا مع التزامن، لكن الحجوزات والسجل يعيشان في نظامين منفصلين، فاضطرت خطوة التأكيد إلى تحديث MySQL وتنظيف Redis معا، ولم يكن ممكنا جمعهما في خطوة ذرية واحدة. وبحسب الترتيب، قد يؤدي ذلك إلى بيع زائد أو بيع ناقص، كما لم يكن النموذج يدرك المخزون في مواقع متعددة.

صف لكل وحدة داخل تجمع محدود

يعتمد التصميم الجديد على صف واحد لكل وحدة قابلة للبيع بدل صف واحد لكل منتج مع عمود للكمية: منتج بعشر وحدات له عشرة صفوف، وهكذا تتشارك الحجوزات والسجل معاملات ACID نفسها. ولأن منتجا بـ50 ألف وحدة موزعة على مواقع يعني 500 ألف صف، يحتفظ الفريق بتجمع محدود من الصفوف المتاحة بحد أقصى 1000 صف لكل توليفة منتج وموقع، تعيد عملية إعادة التعبئة ملأه من السجل. وإذا نفد التجمع أثناء تخفيضات خاطفة، تعمل إعادة التعبئة فورا خلف قفل، فتنتظر الحجوزات المتزامنة بدل أن تتنافس على إدراج صفوف.

ضبط الأقفال والعثور على الحد الحقيقي

كانت عدة تفاصيل حاسمة. المفتاح الأساسي المركب على أعمدة التصفية قلّص قفل الصفوف من قفلين إلى قفل واحد لكل حجز. ونقل المعاملات إلى مستوى العزل READ COMMITTED أزال أقفال الفجوات، بما فيها ما يتعلق بالسجل الوهمي supremum، التي كانت تعرقل إعادة التعبئة. وتوحيد ترتيب الأقفال أزال الجمود بين الحجز والتأكيد، بينما قلّص تجميع الاستعلامات عبر UNION ALL عدد الرحلات إلى قاعدة البيانات للعربات متعددة البنود.

لم يظهر عنق الزجاجة المتوقع. كان المعالج بعيدا عن الإشباع والاستعلامات محسّنة أصلا، ومع ذلك اصطدم الفريق بسقف: كانت الاتصالات تُستهلك في أجزاء أخرى من مسار إتمام الشراء. أظهر وسم كل استعلام SQL بالعملية التجارية التي أصدرته وتجميع مدد الاحتفاظ بالاتصال على طبقة ProxySQL من يستهلك أكبر وقت اتصال. وقد أزال تنظيف مسار الشراء 50% من القراءات و33% من المعاملات على قاعدة البيانات الأساسية، كما أزال مراجعة إعداد قديم لتزامن خيوط InnoDB حدا آخر.

التحول والنتائج

عمل Redis وMySQL بالتوازي في «وضع الظل» حيث بقي Redis مصدر الحقيقة، ثم نقلت شوبيفاي مصدر الحقيقة إلى MySQL مع الاحتفاظ بمفتاح إيقاف ونشر تدريجي حاوية بحاوية بدءا من الأقل حركة. خلال التخفيضات الخاطفة عالية الحجم بقي معالج عقدة الكتابة دون 50% ومعالج عقدة القراءة دون 16%. وفي الجمعة السوداء 2025 سجل التجار على المنصة رقما قياسيا بلغ 5.1 مليون دولار مبيعات في الدقيقة عند الذروة.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.