لقد قمت بالبرمجة منذ فترة، معظمها بلغة Python وJavaScript. لقد قمت ببناء تطبيقات الويب، والنصوص البرمجية، وحتى انخرطت في التعلم الآلي. لكنني كنت أرغب في شيء أقل مستوى قليلاً، وهو شيء من شأنه أن يجعل يدي متسخين بالأنظمة والشبكات. يبدو أن لغة Go هي اللغة المثالية للوظيفة.
لذلك، قررت إنشاء موازن أحمال. لقد كانت فرصة لتعلم كيفية إدارة حركة المرور والتعامل مع الاتصالات المتعددة والتعمق في ميزات التزامن في Go. دعونا نحلل كيف فعلت ذلك.
قبل أن أبدأ في كتابة التعليمات البرمجية، كان علي أن أقوم ببعض الدراسة. كنت بحاجة إلى فهم كيفية تواصل أجهزة الكمبيوتر مع بعضها البعض على الإنترنت، مثل اللغة التي يستخدمونها وكيف يعثرون على بعضهم البعض. لقد بحثت أيضًا في طرق مختلفة لمشاركة العمل بين أجهزة الكمبيوتر، مثل من يقوم بوظيفة ما.
ثم قمت بإعداد مساحة العمل الخاصة بي. لقد حصلت على الأدوات المناسبة وتأكدت من أن جهاز الكمبيوتر الخاص بي جاهز للعمل. كان الأمر أشبه بتجهيز ورشة العمل الخاصة بي قبل بناء شيء رائع.
حسنًا، لنكن واقعيين. لماذا تهتم بموازن التحميل؟ تخيل أن موقع الويب الخاص بك هو متجر بيتزا مشهور جدًا. أنت تقتله، أليس كذلك؟ ولكن بعد ذلك، فجأة، أصبح كل شخص في المدينة يريد البيتزا الخاصة بك. يبدأ موقع الويب الخاص بك، والذي هو في الأساس فرن الإنترنت الخاص بك، في السخونة الزائدة. تتراكم الطلبات، ويغضب العملاء، وينتهي بك الأمر مع كومة من العجين (بالمعنى المجازي).
وهنا يأتي دور موازن التحميل. إنه مثل تعيين رجل توصيل بيتزا فائق الذكاء. يبحث هذا الرجل دائمًا عن الفرن (أو الخادم) المجاني. وعندما يأتي طلب (أو طلب)، فإنه يوجهه بسرعة إلى الفرن ذي السعة الأكبر. بهذه الطريقة، لن يتعرض الفرن (أو الخادم) للإرهاق، وسيحصل الجميع على البيتزا (أو محتوى موقع الويب) في الوقت المحدد.
لذلك، باختصار، موازن التحميل يشبه شرطي المرور لموقع الويب الخاص بك. فهو يتأكد من أن كل شيء يسير بسلاسة، حتى عندما تصبح الأمور مجنونة.
ولكن لماذا نبني واحدة؟ هناك الكثير من موازنات الأحمال، أليس كذلك؟ حسنًا، إن فهم كيفية عملهم تحت الغطاء يمكن أن يغير قواعد اللعبة. بالإضافة إلى ذلك، يعد إنشاء نظام خاص بك طريقة رائعة للتعرف على الشبكات والتزامن وتصميم النظام. إنه مثل بناء سيارتك الخاصة بدلاً من قيادة واحدة فقط. يمكنك الحصول على تقدير أعمق للهندسة المعنية.
قبل الغوص في موازن التحميل، كنت بحاجة إلى بعض الخدمات لتوزيع حركة المرور عليها. لقد قمت بإنشاء واجهة برمجة تطبيقات REST بسيطة تحتوي على نقاط نهاية أساسية لعمليات التحقق من السلامة وأحمال العمل الوهمية. كان هذا بمثابة اختبار لموازن التحميل.
كان إنشاء واجهة برمجة التطبيقات نفسها أمرًا سهلاً إلى حد ما باستخدام حزمة Go's net/http. لقد حددت نقاط النهاية لفحوصات السلامة والعمليات الأساسية. أعادت نقطة نهاية التحقق من الصحة حالة بسيطة تشير إلى صحة الخادم، بينما أجرت نقاط النهاية الأخرى بعض الحسابات الوهمية لمحاكاة عبء العمل.
ومع ذلك، كان ضمان موثوقية هذه الخدمات الخلفية أمرًا بالغ الأهمية. لقد قمت بإجراء فحوصات صحية أساسية لمراقبة حالتهم. يتضمن ذلك إرسال طلبات بشكل دوري إلى نقطة نهاية التحقق من الصحة ووضع علامة على الخوادم على أنها غير صحية إذا فشلت في الاستجابة خلال إطار زمني معين.
كانت الخطوة التالية هي إنشاء موازن التحميل الفعلي. وهذا ينطوي على عدة مكونات رئيسية. أولاً، كنت بحاجة إلى طريقة لتتبع جميع الخوادم المتاحة. لقد قمت بإنشاء سجل لتخزين المعلومات حول كل خادم، بما في ذلك عنوانه وحالته الصحية. بالنسبة لهذا المشروع، استخدمت بنية بسيطة في الذاكرة، ولكن في بيئة الإنتاج، سيكون النظام الموزع مثل etcd أكثر ملاءمة.
جوهر موازن التحميل هو الخوارزمية المستخدمة لتوزيع حركة المرور. لقد بدأت باستخدام نهج روبن الأساسي، ولكن يمكن تنفيذ استراتيجيات أكثر تعقيدًا مثل الاتصالات الأقل أو روبن الجولة المرجحة بناءً على متطلبات محددة.
للتعامل مع الاتصالات الواردة، استخدمت حزمة Go's net لإنشاء مقبس مستمع. تمت معالجة كل اتصال وارد بواسطة نظام goroutine منفصل، مما يسمح بالمعالجة المتزامنة. وكان هذا أمرًا بالغ الأهمية للتعامل مع حجم كبير من حركة المرور بكفاءة.
كان ضمان توفر الخوادم الخلفية أولوية قصوى. لقد قمت بتنفيذ فحوصات السلامة الأساسية لمراقبة حالة الخادم. إذا تبين أن الخادم غير سليم، فستتم إزالته من دوران موازن التحميل. ومع ذلك، بالنسبة لبيئات الإنتاج، غالبًا ما تكون هناك حاجة إلى فحوصات صحية أكثر تعقيدًا مثل المسابير النشطة أو الفحوصات القائمة على التحميل.
يعد إنشاء موازن حمل قوي مهمة معقدة تتضمن دراسة متأنية لعوامل مثل الأداء وقابلية التوسع والتسامح مع الأخطاء. على الرغم من أن هذا المشروع قدم أساسًا متينًا، إلا أن موازنات الأحمال على مستوى الإنتاج تتطلب عادةً ميزات وتحسينات إضافية.
كان إنشاء موازن التحميل هذا بمثابة تجميع اللغز. لقد كانت هناك أوقات كنت أرغب فيها بالتأكيد في الاستسلام، ولكن الرضا عن رؤية كل ذلك معًا كان يستحق ذلك.
لقد تعلمت الكثير عن ميزات التزامن في Go، والتي كانت ضرورية للتعامل مع الاتصالات المتعددة ومهام الخلفية. كان فهم كيفية إدارة الموارد بكفاءة بمثابة الوجبات الرئيسية أيضًا. بالإضافة إلى ذلك، حصلت على فهم قوي لمفاهيم الشبكات وكيفية بناء نظام مرن.
على الرغم من أن موازن التحميل هذا يعد نقطة بداية جيدة، إلا أنه لا يزال هناك طريق طويل لنقطعه. أرغب في استكشاف المزيد من خوارزميات موازنة التحميل المتقدمة، وتنفيذ ميزات مثل الجلسات الثابتة، والتكامل مع أنظمة اكتشاف الخدمة.
إذا كنت مهتمًا بالتعمق أكثر في موازنة التحميل أو Go، فأنا أشجعك على تجربتها. إنها رحلة صعبة ولكنها مجزية. لا تتردد في مشاركة تجاربك أو طرح أي أسئلة في التعليقات أدناه.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3