รูปแบบเซิร์ฟเวอร์เว็บล่วงหน้าคืออะไรกันแน่?


100

ฉันต้องการทราบว่ามันหมายความว่าอย่างไรเมื่อเว็บเซิร์ฟเวอร์อธิบายตัวเองว่าเป็นเว็บเซิร์ฟเวอร์แบบ pre-fork ฉันมีตัวอย่างบางส่วนเช่นยูนิคอร์นสำหรับทับทิมและกูนิคอร์นสำหรับหลาม

โดยเฉพาะอย่างยิ่งคำถามเหล่านี้คือ:

  • โมเดลนี้แก้ปัญหาอะไร
  • จะเกิดอะไรขึ้นเมื่อเริ่มการทำงานของเว็บเซิร์ฟเวอร์ล่วงหน้า
  • จะจัดการกับคำขออย่างไร?

นอกจากนี้คำถามที่เฉพาะเจาะจงมากขึ้นสำหรับยูนิคอร์น / กูนิคอร์น:

สมมติว่าฉันมีแอปพลิเคชันเว็บที่ฉันต้องการใช้กับยูนิคอร์น (g) ในการเริ่มต้นเว็บแอปจะทำการเริ่มต้นบางอย่าง (เช่นกรอกรายการฐานข้อมูลเพิ่มเติม) ถ้าฉันกำหนดค่า (g) ยูนิคอร์นด้วยคนงานหลายคนสิ่งที่เริ่มต้นจะถูกเรียกใช้หลายครั้งหรือไม่

คำตอบ:


105

Pre-Forking โดยทั่วไปหมายถึงต้นแบบสร้างส้อมที่จัดการกับคำขอแต่ละรายการ ส้อมเป็นกระบวนการ * nix ที่แยกจากกันโดยสิ้นเชิง

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

สามารถใช้ Pre-forking ได้เมื่อคุณมีไลบรารีที่ไม่ปลอดภัยสำหรับเธรด นอกจากนี้ยังหมายความว่าปัญหาภายในคำขอที่ก่อให้เกิดปัญหาจะส่งผลต่อกระบวนการที่ดำเนินการโดยไม่ใช่ทั้งเซิร์ฟเวอร์

การเริ่มต้นทำงานหลายครั้งขึ้นอยู่กับสิ่งที่คุณกำลังปรับใช้ โดยปกติอย่างไรก็ตามกลุ่มการเชื่อมต่อและสิ่งต่างๆในลักษณะนั้นจะมีอยู่สำหรับแต่ละกระบวนการ

ในแบบจำลองเธรดต้นแบบจะสร้างเธรดที่มีน้ำหนักเบากว่าเพื่อส่งคำขอด้วย แต่ถ้าเธรดทำให้เกิดปัญหาใหญ่ก็อาจมีผลกระทบต่อกระบวนการหลัก

ด้วยเครื่องมือเช่น Nginx, Event MPM ของ Apache 2.4 หรือ gevent (ซึ่งสามารถใช้กับ Gunicorn) สิ่งเหล่านี้เป็นแบบอะซิงโครนัสซึ่งหมายความว่ากระบวนการสามารถจัดการคำขอได้หลายร้อยรายการในขณะที่ไม่ปิดกั้น


29
ฉันมีข้อสงสัยเหมือนกันเกี่ยวกับความหมายของ "prefork" ฉันควรจะหมายถึงการตีฟอร์กบางอย่างตามธรรมชาติ แต่ส่วน "ก่อน" ทำให้ฉันสับสน ฉันพบคำย่อที่นี่. com/preforkว่าจริงๆแล้วส่วน "ก่อน" หมายความว่ากระบวนการของผู้ปฏิบัติงานถูกสร้างขึ้นล่วงหน้าดังนั้นจึงไม่เสียเวลาไปเปล่า ๆ เมื่อจำเป็นต้องใช้คนงานเท่านั้น ทำให้รู้สึกดีกับฉันมาก :)
El Ninja Trepador

1
//, @ElNinjaTrepador ทำไมไม่เพิ่มคำตอบแยกต่างหาก นั่นเป็นสิ่งที่เข้าใจได้ง่ายขึ้นสำหรับฉันอย่างน้อยก็อาจช่วยให้คนอื่น ๆ ได้มากขึ้นหากความคิดเห็นนั้นได้รับความสนใจมากขึ้น
Nathan Basanese

2
ฉันได้อัปเดตคำตอบเพื่อเพิ่มข้อมูลเพิ่มเติมเล็กน้อยเกี่ยวกับ pre-fork ล่วงหน้า @ElNinjaTrepador ขอบคุณที่ชี้ให้เห็นสิ่งนี้ฉันไม่รู้ว่ามันไม่รู้จักกันดี
Joe Doherty

1
@NathanBasanese จะทำครับ;)
El Ninja Trepador

4
@JoeDoherty อาจจะเป็นที่รู้จักกันดีฉันก็ยังไม่รู้จักฉันจนกระทั่งถึงเวลานั้น: DI กำลังจะเพิ่มคำตอบอื่น (ตามคำขอของนาธาน) แต่เนื่องจากคุณได้เพิ่มสิ่งที่ฉันพูดกับคุณแล้วจึงไม่จำเป็นอีกต่อไป: )
El Ninja Trepador
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.