Auto-Configurations for PHP Application Servers

การจัดระเบียบองค์ประกอบทรัพยากรแบบ dynamic ให้สมบูรณ์และเสริม PHP เพื่อเพิ่มประสิทธิภาพสูงสุดสำหรับการรวม PHP เข้ากับ PaaS เมื่อเปลี่ยนจำนวนทรัพยากรที่จัดสรรสำหรับ environment ของคุณ (เช่นจำนวน cloudlets) โดยจะปรับคำสั่ง PHP ที่เหมาะสมอัตโนมัติเพื่อให้เหมาะสมกับเงื่อนไขใหม่ อย่างไรก็ตาม คุณยังคงกำหนดค่าพารามิเตอร์ได้ด้วยตนเองภายใน file configuration

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

นอกจากนี้คุณสามารถเรียนรู้วิธีการทำงานของ Auto-Configuration หรือวิธีปิดใช้งานการเพิ่มประสิทธิภาพอัตโนมัติโดยการกำหนดค่าใหม่ด้วยตนเองสำหรับคำสั่งเหล่านี้

Apache PHP การตั้งค่าที่ปรับได้อัตโนมัติ

การจัดการคำขอแบบไดนามิกใน Apache PHP โดยใช้ prefork Multi-Processing Module (MPM) ซึ่งช่วยเปิดเผยการเพิ่มศักยภาพของเซิร์ฟเวอร์ได้อย่างเต็มที่ คำสั่ง MPM แสดงอยู่ในไฟล์ configuration หลักของ Apache /etc/httpd/conf/httpd.conf

รายการสำหรับพารามิเตอร์ทั้งหมดที่กำหนดค่าสำหรับ prefork module:

  • StartServers – เซ็ตจำนวนของกระบวน child server ที่สร้างขึ้นเมื่อเริ่มต้น
  • MinSpareServers (MaxSpareServers) – กำหนดจำนวนการประมวลผลเซิร์ฟเวอร์ขั้นต่ำ (สูงสุด) ที่เก็บไว้สำรอง
  • ServerLimit – ตั้งค่าสูงสุดที่อนุญาตสำหรับคำสั่ง MaxRequestWorkers
  • MaxConnectionsPerChild – กำหนดจำนวนคำขอที่กระบวนการ single child สามารถให้บริการได้

ขึ้นอยู่กับทรัพยากรที่จัดสรร (เช่น dynamic cloudlets ที่จองไว้สำหรับ Apache PHP server) และความจุของ CPU ที่ผู้ให้บริการโฮสต์ของคุณจัดหาโดยเฉพาะ แพลตฟอร์มจะปรับพารามิเตอร์ ServerLimit และ MaxRequestWorkers โดยอัตโนมัติ:

MaxRequestWorkers = ServerLimit = min( {containerRam} / 30MiB, {coresCount} * 5 )

เนื่องจากคำสั่งนี้ คำสั่งทั้งสองจะถูกระบุเท่ากับค่าที่ต่ำกว่าระหว่าง:

  • จัดสรรให้กับจำนวน node ของ RAM หารด้วย 30
  • จำนวนคอร์ของเซิร์ฟเวอร์จริงของโฮสต์ที่คอนเทนเนอร์วางอยู่ คูณด้วย 5

ด้วยวิธีนี้ พารามิเตอร์จะเปลี่ยนแปลงแบบไดนามิกตามจำนวน cloudlets ที่จัดสรรแต่จะไม่ขยายเกินขีดจำกัดของฮาร์ดแวร์

หมายเหตุ: หากคุณต้องการระบุค่าที่กำหนดเองสำหรับคำสั่งเหล่านี้ โปรดระวังว่าค่าที่ไม่ถูกต้องอาจทำให้ Apache PHP server ไม่เสถียร

– ถ้า ServerLimit สูงกว่าที่จำเป็นมาก shared memory ที่ไม่ได้ใช้จะถูกจัดสรร; ถ้าระบุพารามิเตอร์ต่ำเกินไปจะไม่แสดงให้เห็นประสิทธิภาพของเซิร์ฟเวอร์ทั้งหมดที่อาจเกิดขึ้นได้

MaxRequestWorkers ควรใหญ่พอที่จะรองรับคำขอพร้อมกันได้มากเท่าที่คุณต้องการและมีขนาดเล็กพอที่จะรับรองว่ามี RAM เพียงพอ

คุณอาจสนใจวิธีการทำงานของ Auto-Configuration หรือวิธีปิดใช้งานการเพิ่มประสิทธิภาพอัตโนมัติเพื่อตั้งค่าที่คุณกำหนดเองสำหรับคำสั่งเหล่านี้

NGINX PHP Auto Adjustable Settings

การจัดการคำขอใน NGINX PHP แอปพลิเคชันเซิร์ฟเวอร์ได้รับการจัดการโดย FastCGI Process Manager (FPM) ซึ่งสามารถกำหนดค่าผ่านไฟล์ /etc/php-fpm.conf ซึ่งถูกเพิ่มโดยอัตโนมัติในรายการโปรดที่ file manager คอนเทนเนอร์สำหรับการเข้าถึงอย่างรวดเร็ว:

FPM ทำงานในโหมดตามคำขอ ondemand (คำสั่ง pm) ค่าเริ่มต้น โดยจะสร้างกระบวนการใหม่เมื่อจำเป็น (เช่น ตามคำขอ) และกำจัดกระบวนการที่ไม่ได้ใช้งาน พารามิเตอร์เพิ่มเติมสำหรับโหมดนี้คือ:

  • pm.max_children – กำหนดจำนวนสูงสุดของ child processes (เท่ากับจำนวนของ CPU core ที่พร้อมใช้งานสำหรับคอนเทนเนอร์แต่ไม่น้อยกว่า 2)

เคล็ดลับ: ค่าที่แน่นอนขึ้นอยู่กับความจุของ CPU ที่ให้บริการโดยผู้ให้บริการโฮสต์ของคุณโดยเฉพาะและจำนวน cloudlets ที่จัดสรรสำหรับคอนเทนเนอร์ ด้วยวิธีนี้ การขยายจำนวน cloudlets จะส่งผลให้พารามิเตอร์ pm.max_children เพิ่มขึ้นโดยอัตโนมัติ

คำสั่งนี้สามารถกำหนดได้อย่างชัดเจนโดยไม่ต้องปิดใช้งานการเพิ่มประสิทธิภาพอัตโนมัติผ่านตัวแปรที่เหมาะสม PHPFPM_MAX_CHILDREN

  • pm.process_idle_timeout – ตั้งค่า delay ก่อนที่จะทำลายการดำเนินการที่ไม่ได้ใช้งาน (60 วินาที)

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

นอกจากนี้เพื่อให้ได้ประสิทธิภาพสูง ตัวฟัง PHP FPM ใช้ UNIX domain socket แทน TCP ทั่วไป โซลูชันดังกล่าวเหมาะสมกว่าสำหรับการสื่อสารภายในโฮสต์เดียวกันทำให้สามารถข้ามการตรวจสอบและการดำเนินการบางอย่างได้ (เช่น การกำหนดเส้นทาง)

วิธีการทำงานของ PHP Auto-Configuration

คุณสามารถตรวจสอบพารามิเตอร์ที่กล่าวถึงข้างต้นว่ามีการเปลี่ยนแปลงอย่างไรตามทรัพยากรที่จัดสรร ยกตัวอย่างเช่น Apache PHP server:

1. สร้าง PHP environment ใหม่ด้วย Apache PHP แอปพลิเคชันเซิร์ฟเวอร์ภายใน (หากคุณยังไม่มี)

จากนั้นคลิกปุ่ม Config สำหรับโหนดนี้และค้นหาการกำหนดค่าโมดูล prefork ในไฟล์ /etc/httpd/conf/httpd.conf

ค่าของคำสั่งสำหรับ cloudlets ปัจจุบันกรณีนี้คือ 16

2. ตอนนี้ใช้ปุ่ม Change Environment Topology เพื่อตั้งค่าขีดจำกัดทรัพยากรใหม่สำหรับ Apache PHP server (เช่น 32 cloudlets) รีเฟรชไฟล์ /etc/httpd/conf/httpd.conf และเปรียบเทียบค่าของพารามิเตอร์ prefork กับค่าในขั้นตอนก่อนหน้า

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

วิธีปิดใช้งานการเพิ่มประสิทธิภาพอัตโนมัติ

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

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

หากต้องการเปลี่ยนการตั้งค่าที่กำหนดค่าอัตโนมัติด้วยตนเองคุณต้องตั้งค่าตัวแปร environment JELASTIC_AUTOCONFIG ให้เป็น false

การใช้งานแบบเดิม

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

  • Apache PHP – “# Jelastic autoconfiguration mark” ภายในไฟล์ /etc/httpd/conf/httpd.conf 
  • NGINX PHP – “; Jelastic autoconfiguration mark” ภายในไฟล์ /etc/php-fpm.conf

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