قام مهندسو Netflix بتفصيل آلية ديناميكية لتقسيم الأقسام لـ Apache Cassandra والتي خفضت زمن الوصول للقراءة لأقسام السلاسل الزمنية كبيرة الحجم من ثوانٍ إلى أجزاء منخفضة من رقمين بالمللي ثانية مع تقليل مهلات القراءة واستخدام وحدة المعالجة المركزية وانتظار الخيوط عبر مجموعات الإنتاج. تم تطوير هذا النهج لمنصة TimeSeries Abstraction الخاصة بـ Netflix، حيث يقوم تلقائيًا بتقسيم الأقسام المتنامية إلى أقسام فرعية أصغر دون الحاجة إلى تغييرات في التطبيق، أو التوقف عن العمل، أو جهود إعادة تقسيم واسعة النطاق.

يعالج النظام تحديًا طويل الأمد في أعباء عمل السلاسل الزمنية المستندة إلى Cassandra، حيث يمكن للأقسام المتنامية باستمرار أن تؤدي إلى انخفاض الأداء من خلال زيادة زمن الوصول للقراءة، والضغط الزائد، وضغط الذاكرة، وتوزيع الحمل غير المتساوي. أفادت Netflix أن الخدمات التي تدير الأقسام التي يزيد حجمها عن 500 ميجابايت، والتي واجهت في السابق مشكلات تتعلق بالتوفر، تمكنت من مواصلة ترقيم الصفحات والاستعلام عن البيانات مع بقائها قيد التشغيل بعد نشر الميزة.

يتم تنظيم بيانات السلاسل الزمنية في Cassandra بشكل شائع في أقسام تجمع الأحداث حسب المعرف والنطاق الزمني. في حين أن الافتراضات الأولية لحجم القسم قد تكون صالحة عند نشر الأنظمة لأول مرة، إلا أن تغيير أنماط حركة المرور وسياسات الاحتفاظ والنمو غير المتساوي للبيانات يمكن أن يتسبب في أن تصبح بعض الأقسام أكبر بكثير من المتوقع. وفقًا لـ Netflix، تتطلب معالجة هذه المشكلات عادةً إعادة تصميم المخطط، أو جهود إعادة التقسيم، أو تعديلات التطبيق التي يمكن أن تكون مكلفة ومدمرة من الناحية التشغيلية على نطاق واسع.

ولمواجهة هذه التحديات، أنشأت Netflix إطارًا آليًا لتطوير الأقسام يكتشف الأقسام كبيرة الحجم ويقسمها بشكل غير متزامن بمجرد تجاوز الحدود المحددة مسبقًا. يحتفظ النظام ببيانات التعريف التي تصف حدود الأقسام وتاريخ الانقسام، مما يسمح للتطبيقات بمواصلة الاستعلام عن نفس القسم المنطقي بينما يتطور تخطيط التخزين الأساسي بشفافية.

خط أنابيب ديناميكي مقسم للتقسيم العريض (المصدر: منشور مدونة Netflix)

تقدم البنية طبقة بيانات تعريفية تتعقب علاقات قسم الأصل والفرع. أثناء عمليات القراءة، تحدد خدمة بيانات التعريف الأقسام الفرعية التي تحتوي على البيانات المطلوبة وتوجه الاستعلامات وفقًا لذلك. يتم دمج النتائج المستردة من أقسام متعددة قبل إعادتها إلى العميل. لاحظت Netflix أن هذا الأسلوب يتيح إعادة توزيع البيانات دون الحاجة إلى توقف الخدمة أو إجراء تعديلات على واجهات التطبيقات.

كانت السلامة التشغيلية أحد الاعتبارات الرئيسية في التصميم. يقدم تقسيم الأقسام في النظام الموزع تحديات تتعلق بالكتابة المتزامنة وحركة البيانات وضمانات الاتساق. لتقليل التعقيد ومخاطر النشر، ركز التنفيذ الأولي على الأقسام غير القابلة للتغيير. يتم الاحتفاظ بالقسم الأصلي طوال عملية الترحيل، مما يوفر آلية احتياطية في حالة حدوث مشكلات أثناء إعادة توزيع البيانات.

قامت Netflix أيضًا بدمج آليات التحقق للتحقق من الصحة أثناء تطور القسم. تم استخدام مسارات التحقق الحالية لمقارنة النتائج التي تم إرجاعها من الأقسام الأصلية مع تلك التي تم إنشاؤها من خلال مسار القراءة الجديد. أجرى المهندسون عمليات إطلاق تدريجية، مما أدى إلى زيادة حركة الإنتاج تدريجيًا فقط بعد التأكد من الاتساق بين النهجين.

وفقًا لـ Netflix، انخفض متوسط ​​زمن الوصول للقراءة للأقسام المتأثرة من ثوانٍ إلى ميلي ثانية منخفضة مكونة من رقمين بعد النشر. تم تقليل زمن وصول الذيل من عدة ثوانٍ إلى حوالي 200 مللي ثانية أو أقل. بالإضافة إلى ذلك، أبلغت الشركة عن تخفيضات في مهلات القراءة، وانخفاض استخدام وحدة المعالجة المركزية، والحد الأدنى من قائمة انتظار الخيوط عبر مجموعات Cassandra.

عملية بدء القراءة والتحقق من الصحة على مراحل (المصدر: منشور مدونة Netflix)

صرحت Netflix أن العمل المستقبلي يتضمن دعمًا للأقسام الواسعة القابلة للتغيير وآليات لإعادة معالجة تقسيمات الأقسام الفاشلة مسبقًا. وبالنظر إلى عملية النشر، لاحظ الفريق الهندسي أن تقليل مساحة سطح التغيير المعماري المعقد والتحقق من صحته بشكل تدريجي أثبت أهميته عند إدخال الإمكانية في أنظمة الإنتاج.



شاركها.
اترك تعليقاً