الخدمات القديمة في البنية التحتية الخاصة بك

تحية! اسمي باشا تشيرنياك ، أنا مطور رائد في QIWI ، واليوم أريد أن أتحدث عن المحتوم. عن التراث.

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



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

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

لذلك ، في واحدة من أحداث الماضي في فريق Back Wallet ، قررنا أن نحتاج إلى تجميع لوحة مكتوب عليها قائمة من خدماتنا ، والخدمات المصغرة ، ومجانسات المحفظة ، والمسؤولين عنها. أقراص مفيدة بشكل عام ، إلى حد معقول.

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

مع مرور الوقت ، تم تطبيق ممارسات جديدة ، على سبيل المثال ، الترحيل إلى Kubernetes ، وجميع أنواع checkstugs ، والبق ، ktlint ، ووجود سجلات في kiban ، وخدمات الاكتشاف التلقائي بدلاً من تحديد العناوين مباشرة وغيرها من الأشياء المفيدة. وفي كل مكان ، سمحت لنا طاولتنا بالحفاظ على أهمية خدماتنا. بالنسبة لنا ، هذه قائمة مرجعية تشير إلى أن هذه الخدمة تعرف كيفية القيام بذلك ، لكن هذا ليس بعد ، لكننا ذهبنا إلى أبعد من ذلك ، مدركين أننا نفتقر إلى المعلومات حول خدماتنا ، والتي نتتبع من خلالها مكالمات الرموز المصدر للخدمة ، حيث يتم تشغيل مهام التجميع في TeamCity ، وكيفية نشرها ، حيث يتم تخزين الأكواد المصدرية لاختبارات end2end ، والصور من الاستمالة حول الهندسة المعمارية ، وحول القرارات المتخذة. من الناحية المثالية ، أردت أن تقع كل هذه المعلومات في مكان ما وتكون في متناول اليد عند الحاجة. لذلك ، أصبح لدينا لوحة نقطة انطلاق للعثور على المعلومات.

لكن QIWI ، مع الاحتفاظ بروح بدء التشغيل ، هي شركة كبيرة. نحن بالفعل في الثانية عشرة من العمر ، والفرق تتغير: الناس يغادرون ، والناس يأتون ، ويتم تشكيل فرق جديدة. وقد وجدنا على نطاقنا العديد من الخدمات التي ورثناها. جاء شيء ما مع المطورين من الفرق الأخرى ، وهو شيء يرتبط بطريقة غير مباشرة بالمحفظة ، لذلك الخدمة الآن في ميزانيتنا. تعامل مع ما وكيف تعمل - لماذا؟ تعمل الخدمة ، ولدينا ميزات المنتج التي يجب غسلها.

كما يحدث


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

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

الشيء هو أنه ليس لدينا الآن عميل مسؤول عن هذه الخدمة. ما هي متطلبات عمله ، ماذا يجب أن تفعل هذه الخدمة بشكل عام؟ ويتم دمج الخدمة بإحكام في عمليات عملك.

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

من أين تبدأ؟


من الأكثر منطقية - مع توافر الاختبارات. عادة ما يتم كتابة نوع من المنطق على الأقل ويمكن استخلاص استنتاجات حول ما يحدث. الآن أصبح TDD من المألوف ، لكننا نرى أنه قبل 5 سنوات ، كان كل شيء على حاله تقريبًا كما هو الحال الآن: لا توجد اختبارات وحدة تقريبًا ، ولن يخبرونا بشيء على الإطلاق. حسنًا ، ربما باستثناء نوع ما من التحقق من كيفية توقيع بعض xml مع نوع من الشهادة المخصصة.

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

ما يجب القيام به


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

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

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

كنتيجة لذلك ، أود تقديم خطة بشأن ما يجب فعله مع الخدمات القديمة.

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

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

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

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


All Articles