ฉันกำลังพยายามแก้ไขปัญหาเกี่ยวกับการเชื่อมต่อ Azure App Services กับ Azure Database ที่ช้ามาก

หลังจากการโยกย้าย Wordpress จากโฮสติ้ง OVH ราคาถูก ฉันสังเกตเห็น TTFB ที่ยาวมาก: เพิ่มขึ้นจาก 300-400ms เป็น 1500-3000ms

ฉันจำกัดปัญหาให้แคบลงที่บริการแอพ - ปัญหาการเชื่อมต่อฐานข้อมูล เพื่อระบุปัญหา ฉันได้สร้างการติดตั้ง Wordpress ใหม่ทั้งหมด ตาม P3 - Plugin Performance Profiler การติดตั้ง WP ใหม่ทั้งหมดจะสร้างการสืบค้นฐานข้อมูล 38 รายการ

ด้วยปลั๊กอินสถิติประสิทธิภาพของ PHP/MySQL CPU ฉันรันการทดสอบ MySql:

  • Azure App Service: 20-50 db คิวรี / วินาที
  • โฮสติ้ง OVH ราคาถูก: การสืบค้น 200+ db / วินาที

ฉันคิดว่าปัญหาค่อนข้างชัดเจนถ้า 200 USD/เดือน Azure stack ช้ากว่า 10 USD OVH ประมาณ 20 เท่า (อย่างไรก็ตาม: ฉันพบว่าแม้ ~40 db แบบสอบถามต่อวินาทีก็สามารถส่งผลให้ TTFB ประมาณ 300ms ซึ่งฉันตั้งเป้าไว้ ).

เพื่อแก้ไขปัญหานี้ ฉันได้ลองทดสอบ/เปลี่ยนแปลงต่อไปนี้:

  • App Service Plans ต่างๆ (จาก dev ถึง P2v3)
  • เซิร์ฟเวอร์ฐานข้อมูล Azure ที่แตกต่างกัน (จากราคาถูกที่สุดถึง ~ 300 usd/เดือน)
  • PHP 7.4 และ PHP 8.0
  • Apache และ nginx (มาพร้อมกับการเปลี่ยนแปลง php 7/8 โดยอัตโนมัติ)
  • เซิร์ฟเวอร์เดียวและเซิร์ฟเวอร์ที่ยืดหยุ่นของฐานข้อมูล Azure
  • ฐานข้อมูล Azure สำหรับ MySQL และสำหรับ MariaDB
  • บริการแอพเพื่อเชื่อมต่อฐานข้อมูลผ่าน IP สาธารณะและผ่านการรวม vnet
  • การวางฐานข้อมูลในโซนความพร้อมใช้งานเดียวกันทุกประการ
  • การเชื่อมต่อแอพ/ฐานข้อมูล ssl และไม่ใช่ SSL
  • การเปลี่ยนเส้นทางฐานข้อมูลด้วยmysqlnd_azure
  • พยายามเชื่อมต่ออย่างต่อเนื่อง
  • Wordpress ใน App Service docker container

ไม่มีการเปลี่ยนแปลงใด ๆ ที่สำคัญในประสิทธิภาพการทำงาน "แก้ไข" เพียงอย่างเดียวที่ "ใช้งานได้" คือการเปิดใช้งานแคช หากแคชถูกโจมตี TTFB จะอยู่ที่ประมาณ 100 มิลลิวินาทีตามที่คาดไว้

ฉันยังวัดประสิทธิภาพ AWS Elastic Beanstalk/RDS และ Google App Engine/CloudSQL และทำงานได้อย่างสมบูรณ์แบบ (~ 250 ms TTFB เมื่อแกะกล่อง) Azure VM (PHP+ Apache) ที่เชื่อมต่อกับฐานข้อมูล Azure เดียวกันทำงานได้ดี (<300ms TTFB)

ฉันหมดความคิด ฉันพลาดอะไรไป เพื่อความชัดเจน: ฉันไม่ได้พยายามที่จะบรรลุเวลาตอบสนองหลักเดียวหรือประสิทธิภาพสูงสุด - 300ms จะเป็นที่ยอมรับสำหรับการติดตั้ง WP ใหม่ทั้งหมด

answer

สองสามสิ่งที่ต้องดูเนื่องจากไม่ได้กล่าวถึงในคำถาม

  1. ตรวจสอบให้แน่ใจว่าเว็บแอปและฐานข้อมูลอยู่ในภูมิภาคเดียวกัน นี้อาจดูเหมือนพื้นฐาน แต่ฉันเคยเห็นมาก่อน
  2. เปิดใช้งานAlways Onในการตั้งค่าสำหรับ Azure App Service Always On : ให้แอปโหลดอยู่เสมอแม้ในขณะที่ไม่มีทราฟฟิก เมื่อไม่ได้เปิด Always On (ค่าเริ่มต้น) แอปจะยกเลิกการโหลดหลังจาก 20 นาทีโดยไม่มีคำขอเข้ามา แอปที่ไม่ได้โหลดอาจทำให้เกิดความล่าช้าสูงสำหรับคำขอใหม่เนื่องจากเวลาอุ่นเครื่อง เมื่อเปิด Always Onตัวโหลดบาลานซ์ส่วนหน้าจะส่งคำขอ GET ไปยังรูทของแอปพลิเคชันทุก ๆ ห้านาที การ ping อย่างต่อเนื่องจะป้องกันไม่ให้แอปถูกยกเลิกการโหลด
  3. ตรวจสอบแนวทางปฏิบัติที่ดีที่สุดของบริการแอ