NGINX คือ ตอนที่ 9 : การปรับแต่งประสิทธิภาพ (Performance Tuning) และการตรวจสอบ (Monitoring)

  1. การตรวจสอบประสิทธิภาพ (Monitoring Performance) ของ NGINX
  2. ทำความเข้าใจและปรับแต่ง Worker Processes และการเชื่อมต่อ (Connections)
  3. การปรับบัฟเฟอร์ (Buffers) การหมดเวลา (Timeouts) และการตั้งค่าอื่นๆ ให้เหมาะสม
  4. ใช้ประโยชน์จากการแคช (Caching) เพื่อเพิ่มประสิทธิภาพ
  5. โหลดบาลานซ์ (Load Balancing) เพื่อความพร้อมใช้งานสูง (High Availability)

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

1. การตรวจสอบประสิทธิภาพ (Monitoring Performance) ของ NGINX

การตรวจสอบเป็นพื้นฐานสำหรับการปรับแต่งประสิทธิภาพ ด้วยการรับข้อมูลเชิงลึกเกี่ยวกับการทำงานของเซิร์ฟเวอร์ของคุณภายใต้โหลดที่แตกต่างกัน คุณสามารถทำการปรับเปลี่ยนที่จำเป็นเพื่อปรับปรุงประสิทธิภาพได้ มีเครื่องมือหลายอย่างสำหรับตรวจสอบประสิทธิภาพของ NGINX รวมถึงตัวเลือกในตัวเช่น Stub Status Module และโซลูชันของบริษัทอื่น เช่น Datadog, New Relic หรือ ELK stack (Elasticsearch, Logstash, Kibana)

โมดูลStub Statusเป็นโมดูล NGINX ในตัวที่มีน้ำหนักเบาซึ่งให้ข้อมูลสถานะพื้นฐาน แม้ว่าจะไม่มีการวิเคราะห์เชิงลึก แต่ก็เป็นจุดเริ่มต้นที่ดีในการทำความเข้าใจจำนวนการเชื่อมต่อที่ใช้งานอยู่ การอ่าน การเขียน และการรอการเชื่อมต่อ

NGINX Amplifyเป็นเครื่องมือขั้นสูงสำหรับการตรวจสอบ มีเมตริกการแสดงภาพและการแจ้งเตือนเชิงรุกมากมาย Amplify สามารถติดตามเมตริกต่างๆ เช่น อัตราคำขอ อัตราข้อผิดพลาด หรือการใช้งาน CPU ซึ่งช่วยให้คุณระบุปัญหาต่างๆ ได้อย่างรวดเร็ว

สำหรับการบันทึกและการแสดงภาพแบบรวมศูนย์ขั้นสูง เครื่องมือเช่นElasticsearch, Logstash และ Kibana (ELK Stack)มีประโยชน์มาก เครื่องมือเหล่านี้ทำงานร่วมกันเพื่อรวบรวมบันทึกจากแหล่งต่างๆ จัดเก็บและจัดทำดัชนีข้อมูล แล้วนำเสนอในรูปแบบที่ย่อยง่าย

2. ทำความเข้าใจและปรับแต่ง Worker Processes และการเชื่อมต่อ (Connections)

กระบวนการและการเชื่อมต่อของ Worker เป็นพารามิเตอร์ประสิทธิภาพหลักใน NGINX กระบวนการของ Worker เป็นแกนหลักของเซิร์ฟเวอร์ NGINX และจัดการคำขอทั้งหมด

โดยทั่วไป จำนวนกระบวนการของ Worker จะตั้งค่าเท่ากับจำนวนของ CPU หรือคอร์เพื่อประสิทธิภาพสูงสุด เนื่องจาก NGINX เป็นแบบอะซิงโครนัสและขับเคลื่อนด้วยเหตุการณ์โดยเนื้อแท้ ทำให้สามารถจัดการการเชื่อมต่อหลายพันรายการในกระบวนการของ Worker เดียว

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

events {
    worker_connections  1024;
}

ในการกำหนดค่าข้างต้น NGINX สามารถจัดการการเชื่อมต่อพร้อมกันได้ 1,024 รายการต่อกระบวนการของ Worker จำนวนสามารถเพิ่มขึ้นได้ขึ้นอยู่กับความจุของเซิร์ฟเวอร์และโหลดที่คาดไว้

3. การปรับบัฟเฟอร์ (Buffers) การหมดเวลา (Timeouts) และการตั้งค่าอื่นๆ ให้เหมาะสม

บัฟเฟอร์ (Buffers) และระยะหมดเวลา (Timeouts) เป็นปัจจัยสำคัญอื่นๆ ที่ต้องปรับแต่งเพื่อประสิทธิภาพของเซิร์ฟเวอร์ที่เหมาะสมที่สุด บัฟเฟอร์เก็บข้อมูลไว้ชั่วคราวระหว่างการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์ ในขณะที่การหมดเวลาช่วยให้แน่ใจว่าทรัพยากรจะไม่ถูกเก็บไว้อย่างไม่มีกำหนด เนื่องจากไคลเอนต์ที่ช้าหรือไม่ตอบสนอง

การกำหนดค่าบัฟเฟอร์ที่เหมาะสมสามารถปรับปรุงประสิทธิภาพโดยการลดการทำงานของดิสก์ I/O ขนาดบัฟเฟอร์ควรกำหนดตามลักษณะการเข้าชมเว็บหรือแอปของคุณ ตัวอย่างเช่น หากคุณกำลังจัดการกับไฟล์ขนาดใหญ่ อาจจำเป็นต้องใช้ขนาดบัฟเฟอร์ที่ใหญ่ขึ้น

http {
    ...
    client_body_buffer_size 10K;
    client_header_buffer_size 1k;
    large_client_header_buffers 2 1k;
    ...
}

ควรกำหนดค่าการหมดเวลาเพื่อให้แน่ใจว่าการเชื่อมต่อที่ไม่ได้ใช้งานถูกปิด ทำให้ทรัพยากรว่างสำหรับการเชื่อมต่อใหม่

http {
    ...
    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;
    ...
}

โปรดจำไว้ว่า การปรับการตั้งค่าเหล่านี้จำเป็นต้องเข้าใจความต้องการของการทำเว็บและทำแอพของคุณ และการตรวจสอบประสิทธิภาพของเซิร์ฟเวอร์อย่างรอบคอบ

4. ใช้ประโยชน์จากการแคช (Caching) เพื่อเพิ่มประสิทธิภาพ

การแคช (Caching) เป็นเทคนิคที่เก็บข้อมูลที่เข้าถึงบ่อยและให้บริการแก่ผู้ใช้โดยตรงจากแคช ซึ่งช่วยลดภาระของเซิร์ฟเวอร์ NGINX มีความสามารถในการแคชที่มีประสิทธิภาพซึ่งสามารถนำมาใช้เพื่อเพิ่มประสิทธิภาพการทำเว็บและทำแอพได้

NGINX อนุญาตให้คุณกำหนดโซนแคชในการกำหนดค่าของคุณ โดยระบุว่าควรแคชอะไรและระยะเวลาเท่าใด คุณยังสามารถกำหนดลักษณะการทำงานของแคชเมื่อแคชเต็ม ด้วยการกำหนดค่าอย่างระมัดระวัง การแคชสามารถเพิ่มความเร็วของแอปพลิเคชันของคุณได้อย่างมาก

5. โหลดบาลานซ์ (Load Balancing) เพื่อความพร้อมใช้งานสูง (High Availability)

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

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
    }
    
    server {
        listen 80;
        
        location / {
            proxy_pass http://backend;
        }
    }
}

ในตัวอย่างข้างต้น NGINX กระจายคำขอขาเข้าไปยังเซิร์ฟเวอร์ส่วนหลังสามเครื่อง


ศิลปะของการปรับแต่งประสิทธิภาพและการตรวจสอบใน NGINX เป็นกระบวนการที่ต่อเนื่อง ในขณะที่เว็บและแอปของคุณต้องการการพัฒนาการทำเว็บและทำแอพ การตั้งค่าเซิร์ฟเวอร์ของคุณก็เช่นกัน ด้วยการติดตามเมตริกประสิทธิภาพอย่างใกล้ชิดและปรับแต่งการตั้งค่าอย่างต่อเนื่อง คุณจึงมั่นใจได้ว่าเซิร์ฟเวอร์ NGINX ของคุณมอบประสบการณ์การใช้งานที่ดีที่สุดแก่ผู้ใช้

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


NGINX คืออะไร

NGINX คือ ตอนที่ 8 : NGINX Plus คืออะไร