ايه الفرق بين Nginx و Gunicorn ,وايه فايده كل واحد منهم بالظبط

backend
python

#1

What are the differences between nginx and gunicorn


#2

كل من سيرفري gunicorn و nginx مختلفين تماماً في الوظائف, وبالتالي يمكن القول أنه ممكن تستعمل فقط gunicorn أو ممكن تستعمل الاثنين مع بعض.

لكن, لمعرفة ماذا تستعمل بالضبط, ماهي وظيفة كل واحد أصلاً؟

سيرفر gunicorn

أنت بالتأكيد تحتاج لسيرفر يقوم بتشغيل أكواد بايثون, لكي تقوم بجلب مثلاً آخر الأخبار على الصفحة للمستخدمين.

لكن عندنا الأمر python, لماذا لا نستعمله وخلاص؟

الأمر python ممكن يقوم بتشغيل سيرفر flask أو django, بهذا الشكل مثلاً في فلاسك:

python main.py

أو في django نكتب:

python manage.py runserver

لكن هذه الأوامر لم تصمم لاستقبال الآف الطلبات من مستخدمي الموقع, وإنما فقط صممت للمبرمج لكي يستطيع تجربة تطبيق الويب خاصته بسهولة :smile:

هنا يأتي دور gunicorn الذي يستقبل الآف الطلبات يومياً.

بالتأكيد تحتاج لتجهيز طريقة للتعامل مع سيرفر gunicorn لأنه يتكامل مع بايثون عبر standard معين اسمه wsgi, تفاصيل أكثر:

لتجهيز gunicorn مع flask, يوجد شرح في الأكاديمية في ورشة “عمل تطبيق مشابه للفيسبوك” حول الموضوع.


سيرفر nginx

الآن لديك موقع يستقبل طلبات بايثون باستعمال سيرفر gunicorn, وربما ستلاحظ أن الموقع ثقيل لأن السيرفر يقوم أيضاً بجلب الملفات الستاتيكية html css js, مالسبب يا ترى؟ :thinking:

أعتقد أنك خمنت السبب بشكل صحيح: سيرفر gunicorn ليست وظيفته جلب الملفات الستاتيكية html css js أصلاً, الوظيفة الرئيسية له هي تشغيل أكواد بايثون !

السيرفر الأنسب لهذه المهمة هو nginx, أيضاً هو يجعل الموقع سريع بإضافة cache للصفحات :heart_eyes:


بقي شيء واحد: كيف سيستقبل كلاً من سيرفري nginx و gunicorn الطلبات مع بعض؟

هنا أيضاً يأتي nginx الذي يلعب دور reverse proxy… بحيث يستقبل nginx كل الطلبات ويتعامل معها بهذا الشكل (الصورة توضح الطلب request حينما يدخل على nginx ويقوم بجلب الصفحة الستاتيكية أو بتمريره على flask):

  1. تريد ملف ستاتيكي html css js؟ أوكي, سأعطيك الملف بنفسي.
  2. تريد صفحة ديناميكية بالبايثون؟ آه, ساذهب لعند gunicorn وحينما أخذ منه البيانات برجعها بنفسي.

كيف يتم حفظ الصور في قاعدة البيانات؟؟
#3

شكرا علي المعلومات الحمد لله فهمت الفرق بينهم