في هذا المنشور ، سنتحدث عن مكتبة تسجل العقد في حد ذاتها وتعيد توجيه الطلبات من الخارج إلى عقدة معينة.
كيف حصلت على فكرة كتابة هذا المشروع؟
بعد أن كانت هناك حاجة لتحليل المواقع بكميات كبيرة ، حاولت تنفيذ شيء من هذا القبيل باستخدام شبكة السيلينيوم ، ثم أخذت الملف اللولبي. جاء ملف selenoid ، ولكن كان هناك الكثير الذي لم أكن بحاجة إليه ، على سبيل المثال ، الإصدارات وخيارات المتصفح ، والأهم من ذلك ، عدم وجود التحجيم التلقائي (ولكن ملف selenoid ليس لذلك). 90٪ من الوقت الذي تكون فيه الكتلة في وضع الخمول ، ثم تظهر حمولة كبيرة ، لا يمكن للخادم التعامل معها. اتضح نفقات كبيرة للحديد ، والتي لا تعمل في جميع الأوقات تقريبًا ، وحتى لا يمكنها التأقلم. اعتقدت أنه سيكون أمرًا رائعًا إذا زاد عدد المتصفحات القابلة للتنفيذ مع وصول التحميل ، ولكن كيف يختفي الحمل ويتم حذف المتصفحات. لحسن الحظ ، يمكن تنفيذ ذلك ، على سبيل المثال ، من خلال
AWS EC2 .
قليلا عن الهيكل
- المحور
يتم إطلاق لوحة الوصل في أي مكان مناسب لك ، وهو مطلوب في حالة واحدة.
عند إنشاء حاوية عامل إرساء مع لوحة وصل ، فإنه يحتاج إلى تمرير متغير بيئة الرمز المميز إليه.
وبعد ذلك يبدأ في توقع الاتصالات الواردة من العقد ومن المستخدمين.
يتذكر المحور المسارات ، ويتذكرها لمدة دقيقة واحدة من عدم النشاط ، ثم يحذف هذا المسار ويحرر العقدة لعميل آخر.
- العقدة.
يمكن تكوين العقدة كحاوية أساسية لأنظمة التحجيم التلقائي ، على سبيل المثال ، بمتوسط حمل على تجمع الحاوية ، أو إضافة أخرى ، أو ، في الحالات القصوى ، يمكنك بدء خادم افتراضي مع هذه الحاوية في وقت الإطلاق ، شريطة أن تدفع المبلغ الفعلي وقت استخدام الخادم.
عند إنشاء حاوية عامل إرساء مع عقدة ، يجب أن يمرر الرمز المميز ومتغير بيئة الخادم إليه. الخادم هو عنوان IP لمركزنا.
الخيار رقم 1. طلب من العقدة
تقوم العقدة بتقديم طلب إلى المحور مع
مجموعة الرمز المميز - وهو الرمز المميز من متغير البيئة. يقوم المحور بفحص الرمز المميز من الطلب ، وإذا تطابق ، فإنه يتذكره. يبدأ الموزع تنفيذ الأمر ping على هذه العقدة مرة كل 4 ثوانٍ. إذا فشلت 5 محاولات ping ، يتم حذف العقدة مع ملاحظة فقدان الاتصال. تقوم العقدة بدورها بتهيئة استجابة ping ، مرة كل 10 ثوانٍ ، في حالة فقد الاتصال مع لوحة الوصل. يتم ذلك بحيث أنه بعد قطع الاتصال ، ستستعيد الكتلة نفسها حالتها.
الخيار رقم 2. طلب من المستخدم
يقدم المستخدم طلبًا إلى لوحة الوصل مع تعيين
الرمز المميز ورؤوس
الأرقام . الرمز المميز مطلوب حتى تتمكن العقد الموثوقة فقط من تشغيل الكتلة ، والرقم حتى نتمكن من إنشاء جلسات مختلفة داخل نفس IP العميل. كل جلسة لها رقم فريد خاص بها.
لكل طلب ، يتحقق المحور من وجود مسار تم إنشاؤه بالفعل أم لا ، إذا كان هناك - يتم إعادة توجيه الطلب ببساطة إلى العقدة المطلوبة ، إذا لم يكن هناك مثل هذا المسار ، يتم وضع الطلب من المستخدم في قائمة الانتظار لتحرير العقدة. بمجرد تحرير إحدى العقد ، يقوم المحور بعمل مسار لجلسة المستخدم والمسار الذي تم تحريره. الآن ستنتقل جميع الطلبات لهذه الجلسة إلى عقدة معينة.
بعد دقيقة. كيف أغلق المستخدم الاتصال - يتم تحرير العقدة ونقلها إلى طلب مستخدم آخر.
رابط إلى مستودع المشروعالملخص
تبين أن المنشور يشبه تعليمات الاستخدام ، ولكن مع ذلك ، أعتقد أن هذا المشروع يمكن أن يكون مفيدًا.
ملاحظة: بعض التوضيحات
هذا هو المشروع الأول الذي بدأت الكتابة عنه في GOLANG ، وفي هذا الصدد ، إذا كان لدى شخص ما اقتراحات أو تعليقات ، يرجى الكتابة في التعليقات (لا أعتمد حتى على العلاقات العامة ، ولكنه سيكون رائعًا للغاية!)