الكرفس في المشاريع المزدحمة: القليل من الممارسة

عشية مؤتمر Python Conf ++ الخاص بنا في موسكو ، تحدثنا لفترة وجيزة مع Oleg Churkin ، وهو متخصص في التقنية الناشئة ، حول خبرته الواسعة مع Celery: نصف مليون مهمة في الخلفية ، وأخطاء واختبارات.



- أخبرني ببعض التفاصيل حول المشروع الذي تعمل عليه حاليًا؟

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

لتحليل المعلومات المالية ، نقوم بتنزيل جميع معاملات المستخدم وتخزينها والتكامل مع مكاتب الائتمان للحصول على بيانات إضافية عن سجل الائتمان.

لدينا الآن حوالي 200 ألف مستخدم و 1.5 تيرابايت من البيانات المالية المختلفة من موردينا. حوالي مليون معاملة

- ما هو المكدس التكنولوجي؟

مجموعة المشروع الحالي هي Python 3.6 و Django / Celery و Amazon Web Services. نستخدم بنشاط RDS و Aurora لتخزين البيانات العلائقية ، وذاكرة التخزين المؤقت المرنة لذاكرة التخزين المؤقت وقوائم انتظار الرسائل ، و CloudWatch ، و Prometheus و Grafana للتنبيه والمراقبة. حسنا ، وبطبيعة الحال ، S3 لتخزين الملفات.

نحن أيضًا نشيطون جدًا في استخدام الكرفس لمهام العمل المختلفة: إرسال الإشعارات وإرسال الرسائل الجماعية ، والتحديث الشامل للبيانات المختلفة من الخدمات الخارجية ، API غير المتزامن وما شابه ذلك.

في الواجهة الأمامية ، لدينا React و Redux و TypeScript.

- ما هي الطبيعة الرئيسية للأحمال في مشروعك وكيف تتعامل معها
هل تتأقلم

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

قمنا أيضًا بتطبيق واجهة برمجة تطبيقات غير متزامنة ، والتي "تنبض" النتائج من مصادر خارجية وتولد أيضًا العديد من المهام.

في الوقت الحالي ، بعد ضبط البنية التحتية والكرفس ، يمكننا التأقلم بدون مشاكل ، ولكن قبل حدوثها ، سأخبرك بالتأكيد بذلك في تقريري.

- كيف يمكنك قياس كل شيء وتوفير التسامح مع الخطأ؟

للتحجيم ، نستخدم مجموعات التحجيم التلقائي ، وهي مجموعة أدوات توفرها منصة سحابة AWS الخاصة بنا. يتم قياس Django و Celery بشكل أفقي بشكل جيد ، فنحن لا نضع الحدود إلا قليلاً على الحد الأقصى من الذاكرة المستخدمة من قبل عمال uWSGI / Celery.

- وترصد مع ماذا؟

لمراقبة استخدام وحدة المعالجة المركزية / الذاكرة وتوافر الأنظمة نفسها ، نستخدم Cloud Watch في AWS ، ونجمع مقاييس مختلفة من التطبيق ومن عمال الكرفس باستخدام Prometheus ، وننشئ الرسوم البيانية ونرسل التنبيهات إلى Grafana. لبعض البيانات في Grafana نستخدم ELK كمصدر.

- لقد ذكرت واجهة برمجة التطبيقات غير المتزامنة. أخبر المزيد عن كيفية الحصول عليها.
مرتبة.

يتمتع مستخدمونا بفرصة "ربط" حساباتهم المصرفية (أو أي حسابات مالية أخرى) وتزويدنا بإمكانية الوصول إلى جميع معاملاتهم. نعرض عملية "الربط" ومعالجة المعاملات ديناميكيًا على الموقع ، لذلك نستخدم التجميع المعتاد للنتائج الحالية من الواجهة الخلفية ، وتأخذ الخلفية البيانات ، بدء تشغيل خط أنابيب ETL من عدة مهام متكررة.

- الكرفس منتج مثير للجدل. كيف تعيش معه؟

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

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

سأتحدث عن بعض المكتبات المكتوبة في مشروعنا في عرضي التقديمي.

- سؤالي المفضل. كيف تختبر كل هذه الموسيقى؟

يتم اختبار مهام الكرفس بشكل جيد من خلال الاختبارات الوظيفية. نختبر التكامل بمساعدة الاختبارات التلقائية والاختبار اليدوي على حوامل ضمان الجودة والتدريج. في الوقت الحالي ، لم نقرر بعد مشكلتين في اختبار المهام الدورية: كيفية السماح للمختبرين بتشغيلها وكيفية التحقق من صحة الجدول الزمني لهذه المهام (يلبي المتطلبات)؟

- واختبارات الواجهة والتخطيط؟ ما هي نسبة الدليل إلى
الاختبار الآلي؟

في المقدمة ، نستخدم Jest ونكتب اختبارات الوحدة فقط لمنطق الأعمال. يتم تغطية 55٪ من الحالات الحرجة لأعمالنا من خلال الاختبارات الذاتية للسيلينيوم ، لدينا حاليًا حوالي 600 اختبار في TestRail و 3000 اختبار على الواجهة الخلفية.



- ماذا سيكون تقريرك عن موسكو Python Conf ++؟

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

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

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

Source: https://habr.com/ru/post/ar425719/


All Articles