ملخص تقرير "ماذا نعرف عن الخدمات الصغيرة" (HL2018، Avito، Vadim Madison)

مرحبًا٪ username٪!

في الآونة الأخيرة ، انتهى مؤتمر Highload ++ (شكرًا مرة أخرى لفريق المنظمين و olegbunin شخصيًا. لقد كان رائعًا جدًا!).

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

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

الصورة

قاد


لدى Avito العديد من الخدمات والعديد من الروابط بينهما. هذا يسبب مشاكل:

  • الكثير من المستودعات. من الصعب تغيير الرمز في كل مكان في وقت واحد
  • الفرق محدودة حسب سياقها. التداخل الأقصى قليلاً وليس الكل
  • تمت إضافة تجزئة البيانات.

عدد كبير من عناصر البنية التحتية:

  • تسجيل الدخول
  • طلب تتبع (جيجر)
  • تجميع الخطأ (ترقب)
  • الحالات / الرسائل / الأحداث من Kubernetes
  • حد السباق / قواطع دوائر (Hystrix)
  • توصيلية الخدمة (Istio)
  • المراقبة (جرافانا)
  • التجميع (Teamcity)
  • التواصل
  • تعقب المهام
  • التوثيق
  • ...

هناك عدد من الطبقات ، ويصف التقرير طبقة واحدة فقط (PaaS).

تتكون المنصة من 3 أجزاء رئيسية:

  • مولدات تسيطر عليها cli
  • العارض (المجمع) ، الذي يتم التحكم فيه من خلال لوحة العدادات
  • تخزين مع محفزات لأعمال معينة.

خط الأنابيب القياسي لتنمية الخدمات الصغيرة


CLI-push -> CI -> Bake -> Deploy -> Test -> Canary -> Production

دفع CLI


لفترة طويلة علمت أن تفعل المطورين المناسبين. على الرغم من كل ذلك ، ظلت نقطة ضعف.

مؤتمتة من خلال أداة cli التي تساعد على إنشاء أساس للخدمات الصغيرة:

  1. ينشئ خدمة قالب (يتم دعم قوالب عدد من PLS).
  2. ينشر البنية التحتية تلقائيا للتنمية المحلية
  3. يربط قاعدة بيانات (لا يتطلب التكوين ، لا يفكر المطور في الوصول إلى أي قاعدة بيانات).
  4. بناء مباشر
  5. إنشاء القرص Autotest.

يتم وصف التكوين في ملف toml.

ملف مثال:

الصورة

التحقق


فحوصات التحقق الأساسية:

  • توفر Dockerfile
  • app.toml
  • توافر الوثائق
  • التبعيات
  • قواعد التنبيه للمراقبة (يحددها صاحب الخدمة)

التوثيق


يجب أن يكون لدى الجميع وثائق ، ولكن لا يوجد أحد تقريبًا لديه

يجب أن تتضمن الوثائق:

  • وصف الخدمة (قصير)
  • رابط لمخطط العمارة
  • دليل التشغيل
  • التعليمات
  • وصف API لنقطة النهاية
  • العلامات (ملزمة للمنتج والوظيفة والتقسيم الهيكلي)
  • مالك (أصحاب) الخدمة (قد يكون هناك العديد ، في معظم الحالات يمكن تحديدها تلقائيًا).

يجب مراجعة الوثائق.

إعداد خط الأنابيب


  • مستودعات الطبخ
  • عمل خط أنابيب في TeamCity
  • وضعنا الحقوق
  • نحن نبحث عن المالك (اثنان ، واحد لا يعول عليه)
  • تسجيل الخدمة في أطلس (منتج داخلي)
  • تحقق من الهجرة.

اخبز


  • بناء التطبيق في صورة عامل ميناء.
  • إنشاء مخططات الدفة للخدمة نفسها والموارد ذات الصلة (DB ، ذاكرة التخزين المؤقت)
  • يتم إنشاء التذاكر للمسؤولين لفتح المنافذ ، وتؤخذ قيود الذاكرة ووحدة المعالجة المركزية بعين الاعتبار.
  • قم بإجراء اختبارات الوحدة. يتم الحفاظ على تغطية التعليمات البرمجية. إذا كان أقل من معين ، فسيتم الانتهاء من النشر. إذا لم تتقدم التغطية ، يتم دفع الإخطارات.

يتم تحديد بحث المالك من خلال الدفع (عدد الدفع ومقدار الشفرة فيها).

إذا كانت هناك عمليات ترحيل (خطر) محتملة محتملة ، فسيتم تسجيل الزناد في Atlas ويتم عزل الخدمة.

يتم حل الحجر الصحي من خلال الدفع للمالكين (في الوضع اليدوي؟)

التحقق من الاتفاقية


نتحقق من:

  • نقطة نهاية الخدمة
  • مراسلات الإجابات للمخطط
  • تنسيق السجل
  • تعيين الرؤوس (بما في ذلك X-Source-ID عند إرسال الرسائل إلى الناقل لتتبع الاتصال عبر الناقل)

الاختبارات


يتم إجراء الاختبار في حلقة مغلقة (على سبيل المثال ، hoverfly.io) - يتم تسجيل الحمل النموذجي. ثم يتم محاكاته في حلقة مغلقة.

يتم التحقق من مراسلات استهلاك الموارد (نحن ننظر بشكل منفصل في الحالات القصوى - موارد قليلة جدًا / كثيرة) ، يتم قطعها بواسطة rps.

يُظهر اختبار الحمل أيضًا دلتا الأداء بين الإصدارات.

اختبارات الكناري


نبدأ الإطلاق على عدد صغير جدًا من المستخدمين (<0.1٪).

تحميل الحد الأدنى 5 دقائق. ساعتين الرئيسي. ثم يزيد حجم المستخدمين إذا كان كل شيء على ما يرام.

نحن ننظر:

  • مقاييس المنتج (أولاً وقبل كل شيء) - هناك الكثير منها (100500)
  • أخطاء ترقب
  • حالات الاستجابة ،
  • وقت المستجيبين - وقت الاستجابة الدقيق والمتوسط
  • الكمون
  • الاستثناءات (المجهزة وغير المجهزة)
  • أكثر تحديدًا للغة المقياس (مثل العاملين في php-fpm)

اختبار الضغط


اختبار البثق.

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

تحجيم


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

المخطط النهائي:

  • CPU + RAM
  • عدد الطلبات
  • زمن الاستجابة
  • التوقعات التاريخية

عند القياس ، لا تنس أن تنظر في تبعيات الخدمة. تذكر سلسلة التحجيم (مستوى +1). نحن ننظر إلى البيانات التاريخية لخدمة التهيئة.

اختياري


  • معالجة المشغل - عمليات الترحيل إذا لم يكن هناك نسخة أقل من X متبقية
  • لم يتم تحديث الخدمة لفترة طويلة
  • الحجر الصحي
  • تحديثات آمنة

لوحة القيادة


نحن ننظر إلى كل شيء من الأعلى في شكل مجمع ونستخلص النتائج.

  • تصفية الخدمة والتسمية
  • التكامل مع التتبع والتسجيل والمراقبة
  • وثائق خدمة نقطة واحدة
  • نقطة عرض واحدة لجميع أحداث الخدمة

مثال:

الصورة

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


All Articles