WSGI กับ uWSGi กับ Nginx [ปิด]


90

ใครช่วยอธิบายข้อดี / ข้อเสียเมื่อใช้WSGI VS uWSGIกับ Nginx

ตอนนี้ฉันกำลังสร้างเซิร์ฟเวอร์ที่ใช้งานจริงสำหรับเว็บไซต์ Django ซึ่งฉันได้เตรียมไว้ แต่ไม่สามารถตัดสินใจได้ว่าจะใช้ WSGI หรือ uWSGI คุณช่วยอธิบายโดยละเอียดได้ไหมว่าการกำหนดค่าแต่ละแบบแตกต่างกันอย่างไร การกำหนดค่าใดควรปรับขนาดได้ดีที่สุด

ขอบคุณล่วงหน้า


บล็อกโพสต์นี้เป็นการเปรียบเทียบโดยละเอียดของเซิร์ฟเวอร์ Python WSGI จำนวนมากพร้อมบทสรุปและคำแนะนำบางส่วนในตอนท้าย
Lowe Thiderman

และยังใช้การกำหนดค่าสำหรับเซิร์ฟเวอร์บางตัวที่หลบหลีกและทำให้เซิร์ฟเวอร์ดูแย่กว่าที่เป็นอยู่ เราต้องระวังสิ่งที่อ่านในการเปรียบเทียบนั้น
Graham Dumpleton

25
WSGI เป็นข้อกำหนด uWSGI จัดเตรียมการนำข้อกำหนด WSGI ไปใช้ คุณไม่สามารถเปรียบเทียบได้ คุณสามารถเปรียบเทียบการใช้งานที่แตกต่างกันเท่านั้น
Graham Dumpleton

คำตอบ:


101

ตกลงพวกที่สับสนนี้เป็นเพราะขาดรายละเอียดจากหลายแหล่งรวมถึงการตั้งชื่อโปรโตคอลเหล่านี้และสิ่งที่ WSGI เป็นจริง

สรุป:

  1. WSGI และ uwsgi ทั้งโปรโตคอลAREไม่ใช่เซิร์ฟเวอร์ ใช้เพื่อสื่อสารกับเว็บเซิร์ฟเวอร์สำหรับการทำ load balancing และโดยเฉพาะอย่างยิ่งเพื่อใช้ประโยชน์จากคุณสมบัติพิเศษที่ HTTP บริสุทธิ์ไม่สามารถให้ จนถึงขณะนี้ Nginx และ Cherokee ได้ใช้โปรโตคอลนี้
  2. uWSGI เป็นเซิร์ฟเวอร์และหนึ่งในโปรโตคอลที่ใช้คือ WSGI (อย่าสับสนระหว่างโปรโตคอล uwsgi กับเซิร์ฟเวอร์ uWSGI) WSGI เป็นงูหลามเปค มีการใช้งานข้อกำหนด WSGI หลายอย่างและมีวัตถุประสงค์เพื่อใช้สำหรับมากกว่าแอปพลิเคชันเซิร์ฟเวอร์ / เว็บเซิร์ฟเวอร์ แต่มีแอปพลิเคชันเซิร์ฟเวอร์ WSGI อยู่ไม่กี่ตัว (เช่น CherryPy ซึ่งมีเว็บเซิร์ฟเวอร์ที่รองรับ WSGI ที่พร้อมใช้งานจริง ถ้าคุณยังสับสนไม่พอ!)
  3. การเปรียบเทียบ uwsgi กับ WSGI เป็นการเปรียบเทียบส้มกับแอปเปิ้ล

3
พิมพ์ผิด: "1. uwsgiเป็นโปรโตคอลที่ไม่ใช่เซิร์ฟเวอร์" -> "1. WSGIเป็นโปรโตคอลที่ไม่ใช่เซิร์ฟเวอร์"
Aman

9
อันที่จริงสิ่งที่ฉันเขียนสำหรับ 1 นั้นถูกต้อง แต่ WSGI ที่แท้จริงนั้นเป็นโปรโตคอลเช่นเดียวกับ uwsgi ดังนั้นทั้งสองคำสั่งที่คุณเขียนจึงถูกต้อง :) แน่นอนว่าหากไม่มีบริบทที่เหลือคือ 1 มันเป็นโปรโตคอลที่เซิร์ฟเวอร์ uWSGI ใช้ wiki.nginx.org/HttpUwsgiModule , - "อย่าสับสนระหว่างโปรโตคอล uwsgi กับเซิร์ฟเวอร์ uWSGI (ซึ่งพูดถึงโปรโตคอล uwsgi)"
Derek Litz

4
อ่าโอเค. ฉันเคยคิดว่าคุณกำลังพยายามวาดความขัดแย้งระหว่างคำสั่ง 1 "wsgi is a protocol .. " และ 2. "uwsgi is a server that implements the protocol".
Aman

2
@DerekLitz เซิร์ฟเวอร์ใดที่ django ทำงานเมื่อเราทำpython manage.py runserver?
Piyush S. Wanare

python manage.py runserverเป็นเซิร์ฟเวอร์ภายในที่สร้างขึ้นใน Django ไม่ใช่ apache, nginx, gunicorn หรือสิ่งอื่นใด django-extensionsให้runserver_plusที่ใช้เฟรมเวิร์ก Werkzeug แต่ใกล้เคียงกับเซิร์ฟเวอร์runserverมากที่สุด
Mike DeSimone

32

โดยทั่วไปควรเรียกใช้ Python ในกระบวนการแยกต่างหากจากเว็บเซิร์ฟเวอร์หลักของคุณ ด้วยวิธีนี้เว็บเซิร์ฟเวอร์สามารถมีเธรดขนาดเล็กจำนวนมากที่ให้บริการเนื้อหาแบบคงที่ได้อย่างรวดเร็วในขณะที่กระบวนการ Python ที่แยกจากกันของคุณจะมีขนาดใหญ่และมีน้ำหนักมากและแต่ละรายการจะใช้งานล่าม Python ของตนเอง ธรรมดาWSGIนั้นไม่ดีเพราะมันขยายทุกเธรด nginx ของคุณด้วยล่าม Python ขนาดใหญ่ การใช้flupหรือgunicornหรือuWSGIด้านหลังnginxจะดีกว่ามากเนื่องจากช่วยให้ nginx สามารถแสดงเนื้อหาได้อย่างอิสระและช่วยให้คุณสามารถเลือกจำนวนเธรด nginx ขนาดเล็กที่จะเรียกใช้โดยไม่ขึ้นอยู่กับว่าคุณจะเลือกเธรด Python ที่มีน้ำหนักมากเท่าใดเพื่อแสดงเนื้อหาแบบไดนามิก ผู้คนดูมีความสุขมากgunicornในขณะนี้ แต่ตัวเลือกใด ๆ ในสามข้อนี้ควรใช้งานได้ดี

ในอนาคตคุณยังสามารถย้าย Python ไปยังเซิร์ฟเวอร์อื่นได้เมื่อการโหลดเริ่มจริงจัง


1
ฉันสับสนกับคำตอบของคุณเล็กน้อย ฉันไม่เห็นว่าเขาพูดถึงการเรียกใช้การใช้งาน WSGI ใน nginx เขาอ้างถึงเว็บไซต์หลัก wsgi.org การเปรียบเทียบเดิมของเขาระหว่าง WSGI และ uWSGI จึงค่อนข้างโง่ในตอนแรกเนื่องจาก uWSGI เป็นการใช้ข้อกำหนด WSGI ตัวคุณเองเคยใช้คำทั่วไปของ WSGI ในลักษณะที่สับสนในการบอกว่า 'มันขยายทุกเธรด nginx ของคุณด้วยตัวแปล Python ขนาดใหญ่' ข้อกำหนด WSGI เองไม่สามารถทำได้มีเพียงการใช้งานเท่านั้นที่ทำได้
Graham Dumpleton

1
อาจสมเหตุสมผลถ้าเราเปรียบเทียบ nginx + mod_wsgi (โมดูลที่เสียบได้) และ nginx + uWSGI (คอนเทนเนอร์เซิร์ฟเวอร์ของแอปพลิเคชัน)
clime

ดังนั้นเมื่อพูดถึงการใช้ Nginx เพื่อเรียกใช้เว็บแอป Python เนื่องจาก mod_wsgi ของ Manlio Perillo เป็น Deadware และไม่แนะนำวิธีแก้ปัญหาที่ดีคือ WSGI ที่มี gunicorn หรือ uWSGI หรือ FastCGI พร้อม Flup?
Gulbahar

20

ฉันเชื่อว่าที่นี่http://flask.pocoo.org/docs/deploying/uwsgi/เป็นคำตอบที่ดีในการคลายความสับสน คำถามไม่ได้งี่เง่าเกิดขึ้นกับทุกคนที่เห็นทั้งสองคำและไม่มีข้อมูลล่วงหน้าเกี่ยวกับการทำงานของสิ่งต่างๆนอกโลก mod_PHP (เช่นไม่มีอะไรต่อต้าน php หรือ folks)

ไซต์อธิบายในแง่การปฏิบัติได้ดีว่าอะไรคือสิ่งที่จำเป็นและอะไรคือความแตกต่างรวมถึงตัวอย่างการปรับใช้ที่ดีสำหรับ nginx


เพื่อความสะดวกคำอธิบายจาก Flask wiki แสดงไว้ที่นี่:

uWSGI เป็นตัวเลือกการปรับใช้บนเซิร์ฟเวอร์เช่น nginx, lighttpd และ cherokee ดู FastCGI และคอนเทนเนอร์ WSGI แบบสแตนด์อโลนสำหรับตัวเลือกอื่น ๆ ในการใช้แอปพลิเคชัน WSGI ของคุณกับโปรโตคอล uWSGI คุณจะต้องมีเซิร์ฟเวอร์ uWSGI ก่อน uWSGI เป็นทั้งโปรโตคอลและแอปพลิเคชันเซิร์ฟเวอร์ แอ็พพลิเคชันเซิร์ฟเวอร์สามารถให้บริการโปรโตคอล uWSGI, FastCGI และ HTTP

เซิร์ฟเวอร์ uWSGI ที่ได้รับความนิยมมากที่สุดคือ uwsgi ซึ่งเราจะใช้สำหรับคู่มือนี้ ตรวจสอบให้แน่ใจว่าได้ติดตั้งแล้วเพื่อทำตาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.