คำถาม
มีวิธีใดบ้างในการปรับปรุงประสิทธิภาพการทำงานของข้อมูลเมตาระหว่างคอนเทนเนอร์บน Linux ที่ทำงานภายใต้ Azure App Service และไดรฟ์ข้อมูลที่ติดตั้งที่โฮสต์ในไฟล์ Azure
บริบท
ฉันเพิ่งย้ายโซลูชันที่มีทุกอย่างบนเซิร์ฟเวอร์เดียวไปยังโซลูชันที่ใช้ Azure โดยที่:
- รหัสทำงานบนคอนเทนเนอร์ที่โฮสต์ภายใต้ Azure App Service
- ไฟล์เหล่านั้นซึ่งเป็นส่วนหนึ่งของข้อมูลธุรกิจอยู่ในไฟล์ Azure (เช่น การแชร์ภายใต้บัญชี Azure Storage) / ติดตั้งบนคอนเทนเนอร์ (ผ่านบริการของแอป
การตั้งค่า
> การกำหนดค่า
> การทำแผนที่เส้นทาง
ส่วน).
การดำเนินการนี้ทำให้เกิดปัญหาด้านประสิทธิภาพกับการดำเนินการซึ่งค้นหาผ่านโฟลเดอร์เพื่อดูว่ามีไฟล์บางไฟล์อยู่หรือไม่ ปัจจุบันทำผ่าน PHP ฟังก์ชันไฟล์มีอยู่.
เมื่อทำการทดสอบบนอุปกรณ์ของฉัน ฉันสามารถปรับปรุงประสิทธิภาพได้โดยการต่อท้าย : แคช
ไปยังพารามิเตอร์การผูก; เช่น. --mount type=bind,source=d:\my\host\path,target=/var/my/container/path:cached
; แต่ฉันไม่พบตัวเลือกที่จะทำสิ่งที่คล้ายกันใน Azure App Service
คอนเทนเนอร์ของฉันใช้ Linux (อูบุนตู:21:10
); และฉันได้อ่านแล้วว่าการดำเนินการข้อมูลเมตาของ SMB (รวมถึงการตรวจสอบว่ามีไฟล์อยู่หรือไม่) มีค่าใช้จ่ายสูงกว่าใน Linux มากกว่า Windows ดังนั้นอาจเกี่ยวข้องกัน (เช่น เนื่องจากไฟล์ Azure ใช้ SMB) แม้ว่าฉันจะไม่แน่ใจ (เนื่องจากเส้นทางถูกเมานต์ไปยังคอนเทนเนอร์ ดังนั้นคอนเทนเนอร์ OS อาจไม่ทราบถึงการใช้งานพื้นฐาน)
ฉันเปิดใช้งานแล้ว แชร์ไฟล์ขนาดใหญ่
เพื่อเพิ่ม IOP ที่มีให้สำหรับการแชร์ไฟล์ แต่ก็ไม่สร้างความแตกต่าง (ซึ่งทำให้นี่เป็นข้อมูลเมตามากกว่าปัญหาประสิทธิภาพของ IO ซึ่งสมเหตุสมผล)
ในขณะนี้ ฉันคิดว่าวิธีแก้ปัญหาคือการอัปเดตโค้ดเพื่อให้เป็นตัวแทนของโครงสร้างไฟล์ในฐานข้อมูลของแอป เพื่อให้เราสามารถค้นหาข้อมูลนั้นได้เร็วขึ้น แต่สิ่งนี้มีข้อเสียตรงที่ทุกการดำเนินการเพื่ออัปโหลดหรือลบไฟล์จำเป็นต้องอัปเดตฐานข้อมูลด้วยเพื่อให้ดิสก์และข้อมูลฐานข้อมูลซิงค์ / ทำซ้ำในที่ที่ข้อมูลถูกเก็บไว้ ดังนั้นฉันจึงกระตือรือร้นที่จะแก้ปัญหาโครงสร้างพื้นฐานนี้มากกว่าการรีโค้ดถ้าเป็นไปได้