ISPsystem ، سامح وداعًا! لماذا وكيف كتبنا لوحة تحكم الخادم

ISPsystem ، سامح وداعًا! لماذا وكيف كتبنا لوحة تحكم الخادم

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

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

كيف قتل ISPsystem الراحة

البق

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

استجاب دعم ISPsystem بشكل طبيعي ، ولكن الإصلاحات لم تأت إلا بعد عدة إصدارات ، ثم ليس دائمًا وليس كل شيء. في بعض الأحيان تم تصحيح الأخطاء الحرجة لعدة أسابيع. كان علينا طمأنة العملاء والاعتذار والانتظار لنظام ISP لإصلاح الخطأ.

تهديد التوقف

قد تؤدي التحديثات إلى فترات توقف غير متوقعة أدت إلى حدوث أخطاء جديدة.

كان كل تحديث عبارة عن يانصيب: اضطررت للتستر على الفواتير وتقديم تضحيات لآلهة التحديثات - تسبب التحديث عدة مرات في تعطل لمدة 10-15 دقيقة. كان مشرفونا في هذا الوقت يجلسون على أعينهم - لم نكن نعرف أبدًا كم من الوقت سيستمر التوقف ولم نتمكن من التنبؤ بالوقت الذي سيقرر فيه ISPsystem إصدار تحديث جديد.

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

واجهة لوحة غير مريحة

تم تقسيم كل شيء إلى لوحات مختلفة والتحكم فيه من أماكن مختلفة. على سبيل المثال ، دفع العملاء من خلال Billmanager ، وكان عليهم إعادة تشغيل VDS أو إعادة تثبيته في VMManager. كان على موظفينا أيضًا التبديل بين النوافذ لمساعدة العميل ، أو التحقق من الحمل على الخادم الخاص به ، أو معرفة نظام التشغيل الذي كان يستخدمه.

تستغرق هذه الواجهة وقتًا - سواء بالنسبة لنا أو لعملائنا. ليس هناك أي شك في أي ملاءمة ، مثل ذلك من DigitalOcean ، في مثل هذه الحالة.

دورات حياة قصيرة مع تحديثات متكررة لواجهة برمجة التطبيقات

لقد كتبنا المكونات الإضافية الخاصة بنا - على سبيل المثال ، مكون إضافي مع طرق دفع إضافية غير موجودة في VMManager.

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

لا يمكن تعديلها

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

لذا كان القرار جاهزًا لكتابة لوحتي الخاصة. لقد حددنا الأهداف:

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

وبدأنا التطوير.

بنية لوحة جديدة

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

الخطوة 1: وكيل الخادم

وكيل الخادم هو خادم ويب بيثون يدير المكتبة libvirt، والذي بدوره يحكم Qemu-kvm hypervisor.

يدير الوكيل جميع الخدمات على الخادم: إنشاء vds وإيقافه وحذفه وتثبيت أنظمة التشغيل وتغيير المعلمات وما إلى ذلك من خلال مكتبة libvirt. في وقت نشر المقال ، كانت هذه أكثر من أربعين وظيفة مختلفة ، نكملها اعتمادًا على مهمة واحتياجات العميل.

من الناحية النظرية ، يمكن التحكم في libvirt مباشرة من الفوترة ، ولكن هذا يتطلب الكثير من التعليمات البرمجية الإضافية وقررنا فصل هذه الوظائف بين الوكيل والفوترة - تقوم الفوترة ببساطة بتقديم الطلبات إلى الوكيل عبر واجهة برمجة تطبيقات JSON.

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

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

الخطوة 2. الفواتير

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

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

للتبديل من برنامج ISPSystem ، كان من الضروري الحفاظ بشكل كامل على الوظائف السابقة للعملاء ، ونقل جميع الإجراءات المالية للمستخدمين من الفوترة القديمة إلى الجديدة ، وكذلك جميع الخدمات والاتصالات فيما بينهم. درسنا ما هو موجود في المنتج الحالي ، ثم حلول المنافسين ، وبشكل رئيسي DO و Vultr. نظرنا في العيوب والمزايا ، وجمعنا التعليقات من الأشخاص الذين عملوا مع المنتجات القديمة من ISPsystem.

استخدمت الفوترة الجديدة مجموعتين: PHP الكلاسيكي و MySQL (ومن المخطط في المستقبل التحول إلى PostgreSQL) و Yii2 كإطار عمل على الواجهة الخلفية و VueJS في المقدمة. تعمل Stacks بشكل مستقل عن بعضها البعض ، ويتم تطويرها بواسطة أشخاص مختلفين ، وتتواصل باستخدام JSON API. من أجل التنمية آنذاك والآن نستخدمها PHPStorm и ويب ستورم من JetBrains وأحبهم كثيرًا (يا رفاق!)

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

الخطوة 3 الواجهة

ISPsystem ، سامح وداعًا! لماذا وكيف كتبنا لوحة تحكم الخادم
الواجهة هي من بنات أفكار فريقنا.

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

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

كان تصميم صفحة الفواتير هو أول ما ظهر ، لأننا قمنا بالفعل بعمل مكونات دفع إضافية لنظام ISP.

نهاية المقدمة

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

توصيل الواجهة الخلفية بالواجهة الخلفية

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

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

الخطوة 4. اختبار والترحيل المخطط

عندما بدأ كل شيء واجتازت الاختبارات الأولى ، نشأت مسألة الهجرة. بادئ ذي بدء ، قمنا بتثبيت الفوترة وبدأنا اختبار تشغيلها مع وكيل الخادم.

ثم كتبنا نصًا بسيطًا ينقل قاعدة البيانات من الفوترة القديمة إلى الجديدة.

اضطررت إلى اختبار وإعادة فحص كل شيء حرفيًا ، حيث تم دمج البيانات في قاعدة بيانات جديدة واحدة من ثلاث قواعد بيانات قديمة: Billmanager و VMmanager و IPmanager الخاص بالمدير. ربما تكون عمليات الترحيل التجريبية هي أصعب شيء واجهناه في عملية تطوير لوحة جديدة.

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

ثم أرسلنا رسائل إلى العملاء بعنوان اللوحة الجديدة والفواتير وقمنا بإعادة التوجيه.

وخلاصة القول: انه حي!

نهاية سعيدة

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

أطلقنا عملية الانتقال في ديسمبر ، عشية رأس السنة الجديدة 2017 ، عندما كان الحمل أقل ، لتسهيل الانتقال للعملاء - لا أحد تقريبًا يعمل عشية العطلة.

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

ما هي الخطوة التالية؟

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

بالطبع ، لا تزال لدينا مغامرات مع تطور المنتج وأصبح أكثر تعقيدًا ، على سبيل المثال عندما أضفنا HighLoad.

في المقالة التالية ، سنخبرك كيف تم إطلاق تعريفة Hi-CPU: حول الأجهزة والبرامج والمهام التي قمنا بحلها وما قمنا به.

المصدر: www.habr.com

إضافة تعليق