รันแอปพลิเคชันของคุณบนหลาย workers พร้อมกันด้วย Python Gunicorn workers
Gunicorn เป็นเว็บแอปพลิเคชันเซิร์ฟเวอร์ที่ได้รับความนิยมสำหรับ Python ช่วยให้คุณสามารถรันแอปพลิเคชันของคุณบนหลาย workers พร้อมกัน ซึ่งช่วยให้สามารถรองรับปริมาณการใช้งานที่สูงได้
Workers คือกระบวนการที่ Gunicorn ใช้เพื่อให้บริการคำขอ HTTP แอปพลิเคชันของคุณ
ประเภทของ workers
Gunicorn รองรับประเภทของ workers ต่อไปนี้:
- Workers แบบ pre-fork: ประเภทนี้สร้าง workers ใหม่สำหรับแต่ละคำขอ HTTP
- Workers แบบ worker-group: ประเภทนี้สร้างกลุ่ม workers ไว้ล่วงหน้า และจะสลับระหว่าง workers ในกลุ่มนั้นเมื่อมีการร้องขอ
- Workers แบบ eventlet: ประเภทนี้ใช้ eventlet โมดูลเพื่อจัดการคำขอ HTTP
- Workers แบบ gevent: ประเภทนี้ใช้ gevent โมดูลเพื่อจัดการคำขอ HTTP
การกำหนดค่า workers
คุณสามารถกำหนดค่า workers ของ Gunicorn ได้โดยใช้ไฟล์การกำหนดค่าหรือตัวเลือกบรรทัดคำสั่ง
ไฟล์การกำหนดค่า Gunicorn อยู่ในไดเร็กทอรี gunicorn.conf.py หรือ gunicorn.conf
ตัวเลือกบรรทัดคำสั่งสำหรับการกำหนดค่า workers ของ Gunicorn มีดังนี้:
- workers: กำหนดจำนวน workers ที่จะสร้าง
- worker_class: กำหนดประเภทของ workers ที่จะใช้
- worker_connections: กำหนดจำนวนการเชื่อมต่อสูงสุดที่แต่ละ worker สามารถยอมรับได้
- worker_threads: กำหนดจำนวน threads ที่จะสร้างสำหรับแต่ละ worker
การจัดการ workers
คุณสามารถจัดการ workers ของ Gunicorn ได้โดยใช้คำสั่ง gunicorn
คำสั่ง gunicorn มีตัวเลือกต่อไปนี้สำหรับการจัดการ workers:
- -w: กำหนดจำนวน workers ที่จะสร้าง
- -k: กำหนดประเภทของ workers ที่จะใช้
- -c: กำหนดจำนวน connections สูงสุดที่แต่ละ worker สามารถยอมรับได้
- -t: กำหนดจำนวน threads ที่จะสร้างสำหรับแต่ละ worker
การกำหนดค่า workers แบบ advance
นอกเหนือจากตัวเลือกพื้นฐานสำหรับการกำหนดค่า workers แล้ว Gunicorn ยังมีตัวเลือกขั้นสูงอื่นๆ ที่สามารถปรับแต่งประสิทธิภาพและการทำงานของ workers ได้
ตัวเลือกขั้นสูงบางประการสำหรับการกำหนดค่า workers มีดังนี้:
- worker_tmp_dir: กำหนดไดเร็กทอรีที่จะใช้สำหรับไฟล์ชั่วคราวของ workers
- worker_max_requests: กำหนดจำนวนคำขอสูงสุดที่แต่ละ worker สามารถดำเนินการได้ก่อนที่จะถูกรีสตาร์ท
- worker_max_spare_threads: กำหนดจำนวน threads สูงสุดที่แต่ละ worker สามารถมีได้โดยไม่ทำงาน
- worker_timeout: กำหนดระยะเวลาสูงสุดที่ workers สามารถดำเนินการคำขอได้ก่อนที่จะหมดเวลา
- worker_shutdown_timeout: กำหนดระยะเวลาสูงสุดที่ workers สามารถปิดตัวลงได้อย่างสมบูรณ์ก่อนที่จะหยุดทำงาน
ตัวอย่างการกำหนดค่า workers แบบ advance
ต่อไปนี้เป็นตัวอย่างการกำหนดค่า workers แบบ advance:
# gunicorn.conf.py
workers = 3
worker_class = "gevent"
worker_connections = 1000
worker_threads = 10
worker_tmp_dir = "/tmp/gunicorn"
worker_max_requests = 10000
worker_max_spare_threads = 50
worker_timeout = 30
worker_shutdown_timeout = 5
การกำหนดค่านี้กำหนดจำนวน workers เป็น 3 ประเภทเป็น gevent จำนวนการเชื่อมต่อสูงสุดเป็น 1000 จำนวน threads สูงสุดเป็น 10 ไดเร็กทอรีสำหรับไฟล์ชั่วคราวเป็น /tmp/gunicorn จำนวนคำขอสูงสุดต่อ worker เป็น 10000 จำนวน threads สูงสุดที่แต่ละ worker สามารถมีได้โดยไม่ทำงานเป็น 50 ระยะเวลาสูงสุดที่ workers สามารถดำเนินการคำขอได้ก่อนที่จะหมดเวลาเป็น 30 วินาที และระยะเวลาสูงสุดที่ workers สามารถปิดตัวลงได้อย่างสมบูรณ์ก่อนที่จะหยุดทำงานเป็น 5 วินาที
ปัญหาที่อาจเกิดขึ้นกับ workers
ปัญหาที่อาจเกิดขึ้นกับ workers ของ Gunicorn มีดังนี้:
- Out of memory: เกิดขึ้นเมื่อ workers ใช้หน่วยความจำมากเกินไป
- Too many connections: เกิดขึ้นเมื่อ workers มีการเชื่อมต่อมากเกินไป
- Timeouts: เกิดขึ้นเมื่อ workers ไม่ตอบสนองต่อคำขอในเวลาที่กำหนด
แนวทางปฏิบัติที่ดีที่สุดสำหรับ workers
ต่อไปนี้เป็นแนวทางปฏิบัติที่ดีที่สุดสำหรับการกำหนดค่า workers ของ Gunicorn:
- กำหนดจำนวน workers ให้เพียงพอที่จะรองรับปริมาณการใช้งานของคุณ
- ใช้ประเภทของ workers ที่เหมาะกับแอปพลิเคชันของคุณ
- กำหนดจำนวน connections สูงสุดให้เพียงพอที่จะรองรับปริมาณการใช้งานของคุณ
- กำหนดจำนวน threads สูงสุดให้เพียงพอที่จะรองรับปริมาณการใช้งานของคุณ
บทสรุปท้ายบทความ
บทความนี้ครอบคลุมหัวข้อที่สำคัญทั้งหมดเกี่ยวกับ Python Gunicorn workers หวังว่าคุณจะพบว่าบทความนี้มีประโยชน์