เรามาดูวิธีปฏิบัติ
ข้อ จำกัด เหล่านี้คือสิ่งที่ฮาร์ดโค้ดและออกแบบมาในศตวรรษที่ผ่านมาเมื่อฮาร์ดแวร์ช้าและมีราคาแพง ขณะนี้เราอยู่ในปี 2559 เครื่องปิ้งขนมปังวอลมาร์ตเฉลี่ยสามารถดำเนินการตามคำขอมากกว่าค่าเริ่มต้น
การตั้งค่าเริ่มต้นเป็นอันตรายจริง ๆ การมีผู้ใช้หลายร้อยคนบนเว็บไซต์ไม่มีอะไรน่าประทับใจ
worker_process
การตั้งค่าที่เกี่ยวข้องลองอธิบายในขณะที่เราอยู่ในหัวข้อ
nginx as load balancer:
- 1 ผู้ปฏิบัติงานสำหรับการโหลดบาลานซ์ HTTP
- 1 คนงานต่อหนึ่งคอร์สำหรับ HTTPS load balancing
nginx เป็นเว็บเซิร์ฟเวอร์:
อันนี้ช่างยุ่งยาก
แอปพลิเคชั่น / กรอบ / มิดเดิลแวร์บางตัว (เช่น php-fpm) ทำงานนอก nginx ในกรณีนั้นผู้ปฏิบัติงาน 1 nginx ก็เพียงพอแล้วเพราะโดยปกติแล้วจะเป็นแอปพลิเคชันภายนอกที่ใช้การประมวลผลจำนวนมากและกินทรัพยากร
นอกจากนี้บางแอ็พพลิเคชัน / เฟรมเวิร์ก / มิดเดิลแวร์สามารถประมวลผลคำร้องขอได้ครั้งละหนึ่งรายการเท่านั้น
โดยทั่วไปแล้วผู้ปฏิบัติงาน 1 คนเป็นเดิมพันที่ปลอดภัยเสมอ
ไม่เช่นนั้นคุณอาจนำคนงานหนึ่งคนมาทำงานต่อคอร์ถ้าคุณรู้ว่าคุณกำลังทำอะไรอยู่ ฉันคิดว่าเส้นทางนั้นเป็นการเพิ่มประสิทธิภาพและแนะนำการเปรียบเทียบและทดสอบที่เหมาะสม
worker_connections
worker_process * worker_connections
จำนวนของการเชื่อมต่อเป็น ครึ่งหนึ่งในโหมดโหลดบาลานเซอร์
ตอนนี้เรามาถึงส่วนเครื่องปิ้งขนมปัง มีข้อ จำกัด ของระบบที่ประเมินค่าต่ำมากอย่างจริงจัง:
- ulimits คือ 1k max open files ต่อกระบวนการบน linux (1k soft, 4k hard ในบาง distro)
- ข้อ จำกัด ของ systemd นั้นเกี่ยวกับ ulimits
- ค่าเริ่มต้น nginx คือ 512 การเชื่อมต่อต่อผู้ปฏิบัติงาน
- อาจมีมากกว่านี้: SELinux, sysctl, supervisord (แต่ละรุ่น distro + แตกต่างกันเล็กน้อย)
1k worker_connections
ค่าเริ่มต้นที่ปลอดภัยคือการใส่ 1k ทุกที่
สูงพอที่จะเป็นได้มากกว่าเว็บไซต์ส่วนใหญ่ที่ไม่รู้จักและอยู่ภายใน มันต่ำพอที่จะไม่กระทบกับขีด จำกัด ของระบบอื่น ๆ
10k worker_connections
เป็นเรื่องปกติที่จะมีลูกค้าหลายพันรายโดยเฉพาะเว็บไซต์สาธารณะ ฉันหยุดนับจำนวนเว็บไซต์ที่ฉันเห็นลงไปเพราะมีค่าเริ่มต้นต่ำ
ขั้นต่ำที่ยอมรับได้สำหรับการผลิตคือ 10k ขีด จำกัด ของระบบที่เกี่ยวข้องจะต้องเพิ่มขึ้นเพื่ออนุญาต
ไม่มีสิ่งเช่นขีด จำกัด สูงเกินไป (การ จำกัด เพียงไม่มีผลหากไม่มีผู้ใช้) อย่างไรก็ตามข้อ จำกัด ต่ำเกินไปนั้นเป็นเรื่องจริงมากที่ส่งผลให้ผู้ใช้ที่ถูกปฏิเสธและไซต์ที่ไม่ทำงาน
มากกว่า 10k
10k นั้นดีและง่าย
เราสามารถตั้งค่าขีด จำกัด 1000kk โดยพลการ (เป็นเพียงขีด จำกัด หลังจากทั้งหมด) แต่นั่นไม่สมเหตุสมผลนักเราไม่เคยได้รับปริมาณข้อมูลนั้นและไม่สามารถรับได้
มาติด 10k กันเถอะ บริการที่เพิ่มมากขึ้น (และสามารถทำได้จริง ๆ ) จะต้องมีการปรับแต่งพิเศษและการเปรียบเทียบ
สถานการณ์พิเศษ: การใช้งานขั้นสูง
บางครั้งเรารู้ว่าเซิร์ฟเวอร์มีทรัพยากรไม่มากและเราคาดหวังว่าแทบจะไม่สามารถทำอะไรได้มาก เราต้องการปฏิเสธผู้ใช้มากกว่าลอง ในกรณีดังกล่าวให้ จำกัด การเชื่อมต่อที่สมเหตุสมผลและกำหนดค่าข้อความแสดงข้อผิดพลาดและการจัดการที่ดี
บางครั้งเซิร์ฟเวอร์แบ็คเอนด์ทำงานได้ดีและดี แต่โหลดไม่มากมีอะไรเพิ่มเติมและทุกอย่างลงใต้อย่างรวดเร็ว เราค่อนข้างจะช้าลงกว่าที่เซิร์ฟเวอร์จะพัง ในกรณีดังกล่าวให้กำหนดค่าการเข้าคิวด้วยขีด จำกัด ที่เข้มงวดปล่อยให้ nginx บัฟเฟอร์ความร้อนทั้งหมดในขณะที่คำขอกำลังถูกระบายด้วยความเร็วที่กำหนด