วานิช Nginx Nginx Django?


13

ฉันมีแอพ django และฉันต้องการตั้งค่า Varnish บนเซิร์ฟเวอร์ที่อยู่ตรงหน้า ในกระทู้เซิร์ฟเวอร์อื่นผิดใครบางคนแนะนำให้วาง Nginx หน้าวานิช

ฉันควรวาง Nginx ไว้หน้า Varnish บนเซิร์ฟเวอร์แคชหรือไม่ ถ้าเป็นเช่นนั้นฉันควรใช้ Nginx บนเซิร์ฟเวอร์แอปหรือไม่

คำตอบ:


10

เรากำลังพูดถึงเซิร์ฟเวอร์ส่วนหน้าทั้งหมด 1 - 3 เซิร์ฟเวอร์ไม่ใช่เซิร์ฟเวอร์ฟาร์มขนาดใหญ่ที่มีการทำโหลดบาลานซ์ระหว่างเทียร์หรือไม่

การวาง nginx ไว้ด้านหน้า Vanish จะช่วยให้คุณบีบอัด HTTP ได้ทันที นั่นคือแนวทางปฏิบัติที่ดีที่สุดในการปฏิบัติงาน แต่อาจต้องใช้เวลากับ (เนื้อหาในวานิชมักจะไม่ถูกบีบอัดดังนั้น ESI รวมถึงการทำงานดังนั้นคุณจึงไม่ต้องจัดการกับวัตถุเดียวกันหลายเวอร์ชันในแคชซึ่งขึ้นอยู่กับการจับคู่ส่วนหัว / เบราว์เซอร์ต่างกัน)

เกี่ยวกับ nginx บนเซิร์ฟเวอร์แอป - Apache กับ mod_wsgiไม่ใช่วิธีที่แนะนำและใช้กันมากที่สุดในการปรับใช้การติดตั้ง Django ใหม่หรือไม่? ฉันไม่ทราบเหตุผลที่น่าสนใจสำหรับการใช้ nginx / fastcgi เหนือ Apache / mod_wsgi สำหรับ Django แต่คุณควรรับคำแนะนำจากผู้เชี่ยวชาญของ Django

เกี่ยวกับวานิชที่มีคุณสมบัติการปรับสมดุลโหลดที่น่าดึงดูดซึ่งไม่มี nginx ฉันไม่เห็นว่ามันคืออะไร? วานิชมีสมดุลแบบสุ่มและกลม nginx มี round-robin, IP ของลูกค้าและการ hashing ที่สอดคล้องกัน - ฉันไม่เห็นประโยชน์ที่สำคัญสำหรับวานิช? มันเป็น VCL หรือ Varnish 'การกำหนดค่าที่สง่างามโหลดหรืออย่างอื่น?

สำหรับการตั้งค่าเซิร์ฟเวอร์ขนาดเล็ก 1-3 ฉันคิดว่าฉันจะทำ

วานิช -> Apache / mod_wsgi / Django

หรืออาจจะ

Squid -> Apache / mod_wsgi / Django

และละเว้นการบีบอัด HTTP เพื่อความง่ายยกเว้นว่า bandwith มีราคาแพง

ปรับปรุง:

Graham Dumpleton ได้เขียนความคิดเห็นที่มีค่าด้านล่าง เขากล่าวถึงการตั้งค่าทั่วไปเช่นบล็อกใน VPS หรือเว็บฟาร์มขนาดเล็กโดยไม่มีการแคช:

nginx -> Apache / mod_wsgi / Django

นี่เป็นทางออกที่ดีมากด้วยเหตุผลสองประการ:

  1. ติดตั้งง่าย
  2. nginx ซึ่งมีความเร็วสูงและค่าใช้จ่ายน้อยที่สุดจัดการการให้บริการไฟล์แบบคงที่และการเชื่อมต่อเบราว์เซอร์ keepalive
  3. Django ทำงานใน mod_wsgi ที่ยอดเยี่ยมของ Graham Dumpleton ซึ่งเป็นแพลตฟอร์มที่แนะนำสำหรับ Django

เหตุผลที่ฉันไม่ได้พูดถึงเรื่องนี้ในตอนแรกก็คือ OP ดูเหมือนจะต้องการ Varnish ซึ่งเป็นโซลูชันแคชที่มีประสิทธิภาพสูงมาก คอมโบ nginx / Apache / mod_wsgi ไม่สามารถแคชด้วยระดับประสิทธิภาพและความยืดหยุ่นที่ตรงกับวานิช


2
คุณสามารถใช้ 'nginx -> Apache / mod_wsgi / Django' ได้หลายคนด้วยเหตุผลที่ดี
เกรแฮม Dumpleton

4
อีกสิ่งหนึ่งที่ nginx ให้ไว้ในกรณีที่ใช้ซึ่งหลายคนไม่ทราบก็คือ nginx จะแยก Apache ออกจากไคลเอนต์ที่ช้า นี่เป็นเพราะเนื้อหาที่ขอจนถึงขนาดที่กำหนดไม่ได้รับการสตรีมโดย nginx แต่จะบัฟเฟอร์ส่วนหัวคำขอและเนื้อหาและขอเฉพาะพร็อกซี่เมื่อมันมีทั้งหมด ซึ่งหมายความว่าจะส่งมอบให้ Apache เท่านั้นเมื่อมีข้อมูลทั้งหมดที่จำเป็นในการจัดการคำขอ ดังนั้น Apache / mod_wsgi จะไม่ว่างอย่างน้อยที่สุดเท่าที่จะเป็นไปได้และกระบวนการ / เธรดที่ไม่ได้เชื่อมโยงโดยไคลเอ็นต์ที่ช้า การวัดการบัฟเฟอร์เกิดขึ้นแบบย้อนกลับเช่นกันเพื่อให้ Apache สามารถทำให้เสร็จเร็วขึ้นได้เช่นกัน
เกรแฮม Dumpleton

2
@ Graham Dumpleton: เป็นเรื่องดีมากที่มีคุณอยู่ที่นี่ฉันหวังว่าคุณจะอยู่รอบ ๆ :-) เกี่ยวกับการจัดการการเชื่อมต่อมัลติพล็อต nginx HTTP / การเชื่อมต่ออัจฉริยะฉันยอมรับอย่างสมบูรณ์
Jesper M

ก่อนอื่นขอขอบคุณ Jesper และ Graham ที่สละเวลาเขียนคำตอบที่ครอบคลุม ฉันวางแผนที่จะวางเซิร์ฟเวอร์การปรับสมดุลโหลดไว้หน้าเซิร์ฟเวอร์แอพสองตัว เซิร์ฟเวอร์หนึ่งตัวจะจัดการปริมาณการใช้งานส่วนใหญ่ด้วยเซิร์ฟเวอร์ตัวที่สองที่ใช้เป็นส่วนใหญ่สำหรับความล้มเหลวและการทดสอบคุณสมบัติใหม่
Enrico

วานิชน่าดึงดูดเพราะมันทำให้ฉันควบคุมได้อย่างเต็มที่ว่าคำขอใดถูกส่งไปที่แบ็กเอนด์ วานิชยังตรวจสุขภาพเซิร์ฟเวอร์แบ็คเอนด์ failover นั้นง่ายต่อการติดตั้งและจัดการแบ็กเอนด์ช้า / ตายอย่างสง่างาม (ถ้าเซิร์ฟเวอร์ทั้งสองตาย)
Enrico

4

คุณสามารถใช้ nginx ได้โดยไม่ต้องเคลือบเงาเพื่อให้ proxy และแคชเนื้อหา


2
วานิชมีคุณสมบัติการปรับสมดุลภาระที่น่าสนใจซึ่ง nginx ไม่ได้ออกนอกกรอบ
Enrico

4
คุณสมบัติเช่นอะไร
เงียบ

4

ฉันใช้ Nginx, Varnish และ Apache / mod_wsgi / Django เรียบร้อยแล้ว ฉันเริ่มต้นด้วยการกำหนดค่าต่อไปนี้:

Nginx -> Apache / mod_wsgi / Django

เมื่อฉันเริ่มเห็นการโหลดที่สำคัญใน Apache ฉันเพิ่มวานิช:

Nginx -> Varnish -> Apache / mod_wsgi / Django

ฉันใช้ Nginx เป็น "เราเตอร์ URL" คำร้องขอผู้ดูแลระบบ Django ถูกส่งโดยตรงจาก Nginx ไปยัง Apache คำขอของลูกค้าจะถูกส่งจาก Nginx ไปยัง Varnish ซึ่งแคชคำขอจาก Apache และยังให้บริการรายการ "graced" จากแคชหากเซิร์ฟเวอร์แอปไม่พร้อมใช้งาน

เซิร์ฟเวอร์ Nginx ของฉันยังให้บริการเนื้อหาคงที่โดยตรง (เช่นรูปภาพ, CSS และไฟล์จาวาสคริปต์)

โดยทั่วไปประสิทธิภาพได้ยอดเยี่ยมมาก ฉันสังเกตเห็นสองประการที่ฉันควรพูดถึง:

  1. บนไซต์ที่ไม่ว่างการรีสตาร์ท Varnish อาจทำให้โหลดเพิ่มขึ้นบนเซิร์ฟเวอร์แอปดังนั้นจึงเป็นการดีที่สุดที่จะให้ Varnish รีสตาร์ทเป็นขั้นต่ำ (วานิชดูเหมือนจะไม่มี "รีโหลด" เช่น Nginx / Apache ที่ซึ่งเพิ่งอ่านไฟล์ VCL ของมันอีกครั้ง) ในทางกลับกันการโหลดการกำหนดค่า Nginx มีผลกระทบน้อยที่สุด ด้วยเหตุนี้ฉันจึงทำการเขียน URL ใหม่และ "เส้นทาง" ใน Nginx เป็นส่วนใหญ่
  2. น้ำยาเคลือบเงาง่ายต่อการดรอประหว่าง Nginx และ Apache หากคุณเริ่มสังเกตเห็นการโหลดสูงบนเซิร์ฟเวอร์แอปของคุณการเพิ่มสารเคลือบเงาด้วยแม้กระทั่งการกำหนดค่าเริ่มต้นสามารถสร้างความแตกต่างได้
  3. ถ้าคุณใช้น้ำยาวานิชคุณต้องคิดอย่างแน่นอนว่าคุณจะจัดการกับการทำให้แคชใช้ไม่ได้
  4. ประสบการณ์ของฉันถูกว่าวานิชจัดการล้มเหลวแบ็กเอนด์เล็กน้อยอย่างสง่างามกว่า Nginx (ตามที่คุณระบุไว้ก่อนหน้านี้)

ฉันไม่เคยเห็นวานิชด้านหลังอย่างอื่น วานิชมักจะเป็น load balancer ที่ทำ url router ดังนั้นคุณมี 2 เว็บเซิร์ฟเวอร์และพร็อกซี่ 1 หรือ 2 ผู้รับมอบฉันทะและ 1 เว็บเซิร์ฟเวอร์ Q?
ioanb7

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