คำตอบของwombleนั้นยอดเยี่ยม แต่ก็ยากที่จะเข้าใจและนำไปใช้กับผู้ที่ไม่มีประสบการณ์ ฉันต้องการให้ตัวเลขเชิงประจักษ์และการเปรียบเทียบแอปพลิเคชัน "เนื้อหาแบบง่าย" กับ "อีคอมเมิร์ซ"
มีเนื้อหาไม่มากนักเกี่ยวกับการตั้งค่ากรณีการใช้งานที่แตกต่างกันซึ่งสัมพันธ์กับการปรับแต่ง mod_wsgi ที่เหมาะสมดังนั้นฉันหวังว่ามันจะโอเคที่จะใช้ร้อยแก้วเล็ก ๆ น้อย ๆ ที่นี่
A) เว็บไซต์ CMS & ไมโครไซต์
เราเรียกใช้เว็บไซต์ลูกค้าหลายแห่งส่วนใหญ่ส่วนใหญ่เป็นเว็บไซต์เนื้อหาหรือเว็บไซต์ขนาดเล็กที่โฮสต์ django CMS, รูปแบบที่กำหนดเองและบางครั้งคื่นฉ่ายสำหรับงานพื้นหลังที่กำหนดไว้ ไซต์เหล่านี้ไม่ได้หิวโหยสำหรับทรัพยากรหลายแห่งทำงานอย่างมีความสุขพร้อม ๆ กันบน Intel Core Xeon 4 คอร์ที่มี RAM ขนาด 32 GB นี่คือการกำหนดค่าที่เราใช้สำหรับไซต์แต่ละประเภทนี้:
WSGIDaemonProcess example.com user=www-data processes=2 maximum-requests=100
ฉันกำลังพูดถึงเว็บไซต์ประมาณ 40 แห่งบนเซิร์ฟเวอร์เดียวโดยส่วนใหญ่เป็นไซต์ Staging ที่ทำงานในโหมดสแตนด์บาย ด้วย 2 กระบวนการ (มี 15 เธรดโดยค่าเริ่มต้น) ไซต์นั้นมีความเป็นมิตรแม้ว่าจะมีข้อ จำกัด ในความสามารถในการจัดสรรทรัพยากรเซิร์ฟเวอร์ เหตุใดการตั้งค่านี้จึงเพียงพอสามารถพิสูจน์ได้ด้วยลักษณะที่เรียบง่ายของแอปพลิเคชัน (CMS): คาดว่าจะไม่มีการร้องขอใด ๆ ที่จะใช้เวลานานกว่าสองสามมิลลิวินาที Apache จะยังคงผ่อนคลายอยู่ตลอดเวลาและจะเป็นภาระของ CPU
B) เว็บไซต์อีคอมเมิร์ซ
ไซต์ที่ซับซ้อนมากขึ้นที่เราทำนั้นมีลักษณะโดยการดำเนินการในท้องถิ่นที่ไม่แพง แต่การอ้างอิงภายนอก (เช่นบริการเว็บที่ให้ข้อมูลการจอง) ที่มีราคาแพงในแง่ของเวลาการทำธุรกรรม การดำเนินการกับคำขอภายนอกจะใช้เธรดเป็นเวลานานดังนั้นคุณต้องมีเธรดเพิ่มเติมเพื่อรองรับจำนวนผู้ใช้ที่เท่ากัน (เทียบกับไซต์ CMS อย่างง่ายจากด้านบน) ยิ่งไปกว่านั้นเธรดจะถูกบล็อกในบางครั้งเมื่อบริการภายนอกไม่สามารถตอบคำขอได้ในบางครั้งเป็นเวลาสองสามวินาที สิ่งนี้สามารถนำไปสู่ผลข้างเคียงที่ไม่พึงประสงค์ที่เธรดที่ส่งการร้องขอไปยังคิวการบริการเดียวกันจนกระทั่งเธรด mod_wsgi ทั้งหมดที่มีอยู่ถูกใช้จนหมดและถูกบล็อกรอ
สำหรับสถานการณ์เหล่านั้นเราได้ลองใช้6
กระบวนการโดยไม่เห็นความแตกต่างมากและท้ายที่สุดเราก็ได้12
เห็นการเพิ่มประสิทธิภาพและความมั่นคงในการทำงานที่ไม่มีใครเทียบได้
WSGIDaemonProcess example.com user=www-data processes=12 maximum-requests=100
บางการทดสอบความเร็วในการโหลดง่ายด้วย 150 และผู้ใช้ 250 คนขนานจะจัดการได้อย่างง่ายดายโดยเว็บไซต์ที่ตอบสนองต่อการเข้าพักดี (ในขณะที่มี2
กระบวนการเว็บไซต์ที่มีการใช้ไม่ได้ทำอาหารรับประทานเองผู้ใช้ 50 คนในแบบคู่ขนาน) 2 CPU 6 Core Intel Xeon ที่มี RAM 32 GB ทำงานได้ดีกว่าการใช้งาน CPU ต่ำกว่า 25% ภายใต้โหลดนั้นการใช้ RAM เกือบจะคงที่ที่น้อยกว่า 25% เช่นกัน โปรดทราบว่าเราใช้เครื่องเฉพาะสำหรับไซต์เดียวที่นี่ดังนั้นเราจะไม่ขโมยทรัพยากรที่ไซต์อื่น ๆ อาจต้องการ
ข้อสรุป
การใช้กระบวนการจำนวนมากขึ้นเป็นการแลกเปลี่ยนระหว่างการอนุญาตให้ Apache ใช้ประโยชน์จากทรัพยากรระบบที่มีอยู่หรือไม่ หากคุณต้องการรักษาระบบเซิร์ฟเวอร์ให้มั่นคง (ไม่ใช่เว็บไซต์!) ภายใต้เงื่อนไข "การโจมตี" จะรักษาหมายเลขให้อยู่ในระดับต่ำ หากคุณต้องการให้ Apache ช่วยคุณใช้ทรัพยากรระบบ (CPU, RAM) เมื่อต้องการให้เลือกจำนวนที่สูงกว่า คุณสามารถไปคำนวณได้สูงแค่ไหนในคำตอบที่ได้รับการยอมรับข้างต้นและถูก จำกัด ด้วยพลัง CPU และ RAM ในที่สุด
(PS: ฉันเก็บส่วน ConfigurationDirectivesของโครงการ modwsgi wiki ไว้ใต้หมอนเพื่ออ่านพื้นหลังเหมือน Apache ต้องแน่ใจว่าได้ทำความเข้าใจและตรวจสอบการเชื่อมต่อที่เปิดอยู่ของเซิร์ฟเวอร์ Apache ของคุณ)