Score:0

PHP 7.4 ภายใต้ nginx พร้อม php-fpm - แคช APCu ที่ใช้ร่วมกันเดียว - อย่างไร

ธง cn
C C

ฉันมีชุดสคริปต์ PHP 7.4 ที่รันด้วยส่วนขยาย APCu ซึ่งโค้ดใช้เป็นที่เก็บวัตถุทั่วไปสำหรับผู้ใช้ทุกคนที่เยี่ยมชมเว็บไซต์ที่โฮสต์เดียว เนื่องจากความไม่เข้าใจของฉันเอง ฉันจึงพบในภายหลังว่ามีการสร้างแคช APCU ต่อกระบวนการ PHP. สิ่งที่ฉันเห็นคือในบางกรณี ผู้ใช้ 'ก' ได้รับค่าแคชที่แตกต่างจาก ผู้ใช้ 'b' (สันนิษฐานว่าเนื่องจาก PHP-FPM ได้แยกกระบวนการใหม่สำหรับผู้ใช้ 'b')

แต่ก็ยังไม่ชัดเจนสำหรับฉันว่าจะตั้งค่า php-fpm อย่างไร เพื่อให้คำขอที่เข้ามาทั้งหมดจะอยู่ในกระบวนการย่อยที่มาจากกระบวนการหลักเดียวกัน

APCu กูรู คราโจ กล่าวนี้ ย้อนกลับไปในปี 2558 (ฉันเน้นด้วยตัวหนา):

เพียงตอบคำถามเดิม ... ตามที่ @ fruitl00p พูดคุณทำได้ กำหนดวิธีการของคุณออกจากปัญหาที่ไม่สามารถแบ่งปันได้ คุณกำลังใช้ fpm

มีความแตกต่างระหว่างการใช้ fpm และการใช้ fcgi ฉันควรทำ อาจใส่ PR ไปที่ phptherightway เพื่อล้างข้อมูล

กฎคือเฉพาะกระบวนการลูกเท่านั้นที่สามารถเข้าถึงสิ่งที่พาเรนต์ได้ สร้าง; ในกระบวนการเกิดของ FCGI ไม่จำเป็นต้องเป็นลูกของ พ่อแม่ของพวกเขาอาจไม่ใช่ส้อมที่แท้จริง หากผู้จัดการกระบวนการของคุณ ทำงานเหมือนกับ FCGI/CGI ทั่วไป คุณจะไม่สามารถแชร์ได้ ถ้ามันทำงานเหมือน FPM และเริ่มต้น PHP ในพาเรนต์และแยกลูก ล่ามแล้วคุณจะไม่มีปัญหา

การวิจัยเพิ่มเติมทำให้ฉันไปที่ไฟล์ php-fpm www.conf และการตั้งค่าสำหรับ:

pm = ไดนามิก
pm.max_children = 50

ดังนั้น - มันง่ายเหมือนการเปลี่ยนสิ่งนี้เป็น:

pm = คงที่
pm.max_children = 50

เช่น นี่เป็นวิธีบังคับ php-fpm เพื่อให้แน่ใจว่ากระบวนการลูกทั้งหมดชี้กลับไปที่พาเรนต์เดียวหรือไม่ ดังนั้นจึงมั่นใจได้ว่ามีแคช APCu ทั่วโลกเพียงอันเดียวในการเล่น? ฉันรู้ว่าฉันต้องทำคณิตศาสตร์เพื่อหาค่า pm.max_children ที่ถูกต้อง

โปรดทราบ: ฉันไม่สามารถเปลี่ยนไปใช้ memcached ได้ในตอนนี้ เนื่องจากฉันใช้การวนซ้ำ regex บนคีย์ APCu ผ่านวัตถุ APCUIterator ฉันอาจไปถึงที่นั่นได้ในที่สุด แต่ ณ ตอนนี้ฉันต้องยึดติดกับ APCu

us flag
กระบวนการ PHP-FPM ทั้งหมดถูกแยกโดยพาเรนต์เดียว และแคช APCu ควรแชร์ระหว่างกัน โปรดแบ่งปันการกำหนดค่า PHP และ nginx แบบเต็มในคำถามของคุณ
cn flag
C C
@TeroKilkanen ขอบคุณสำหรับข้อมูลเชิงลึก - และตอนนี้ จากการทดสอบเพิ่มเติมที่ฉันทำเมื่อวาน ดูเหมือนว่า PID ของ php-fpm ทั้งหมดจะชี้กลับไปที่ parent PID ทั่วไป ฉันใช้การกำหนดค่า 'วานิลลาธรรมดา' สำหรับ nginx และ php นอกจากนี้ สาเหตุที่แท้จริงของปัญหาของฉันลงเอยด้วยการที่ฉันถูกปรับใช้ใน OpenShift ในสามพ็อด ดังนั้นฉันจึงมี PHP/แคชที่แตกต่างกันสามแบบ ผู้ใช้โจมตีพ็อดแบบสุ่ม ซึ่งหมายความว่าฉันต้องย้ายทั้งหมดนี้ไปยังบริการไมโครแยกต่างหากสำหรับการแคชโดยเฉพาะ
us flag
หรือคุณสามารถกำหนดเส้นทางคำขอตามแฮช IP เพื่อให้คำขอเข้าถึงเซิร์ฟเวอร์เดียวกันอย่างสม่ำเสมอ

โพสต์คำตอบ

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