เซสชันตัวแปรวีโอไอพีเริ่มต้นช้ามากในหน้าหมวดหมู่ที่มีที่เก็บข้อมูลเซสชัน MEMCACHE


13

ฉันใช้memcacheสำหรับการจัดเก็บเซสชันและหน้าหมวดหมู่ที่ฉันสังเกตเห็นในธุรกรรมที่ระลึกใหม่ซึ่งการเริ่มต้นเซสชันที่หลากหลายอาจใช้เวลานานกว่า 30 วินาที

อาจเป็นเรื่องเกี่ยวกับการล็อคเซสชัน แต่ฉันคิดว่านี่ไม่ใช่ปัญหาเมื่อใช้ memcache

ทุกคนเคยเผชิญกับสิ่งนี้หรือมีความคิดว่าอะไรจะเป็นสาเหตุ

คำตอบ:


5

ฉันเห็นสิ่งนี้ค่อนข้างมากใน New Relic เช่นกัน

จากสิ่งที่ฉันเห็นมีสาเหตุที่แตกต่างกันเล็กน้อยฉันไม่มีความเข้าใจที่สมบูรณ์เกี่ยวกับปัญหานี้ แต่มันเป็นสิ่งที่ฉันได้ดูเมื่อเร็ว ๆ นี้ นี่คือสิ่งที่ฉันค้นพบ

การประชุมใน Magento, Locking และ New Relic

ทุกการกระทำของตัวควบคุมใน Magento ใช้เซสชันไม่ว่าจะต้องการหรือไม่ก็ตาม เซสชันถูกสร้างอินสแตนซ์ที่กระตือรือร้นในMage_Core_Controller_Varien_Action :: preDispatch

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

ท้ายที่สุดนี้หมายความว่าหากคุณเรียกใช้การร้องขอพร้อมกันหลายครั้งไปยังการกระทำของตัวควบคุม Magento จากที่เดียวโดยใช้เซสชั่นเดียวกันคุณจะต้องรอคำขอบางส่วนเพื่อให้เสร็จสมบูรณ์และปลดล็อคเซสชันเพื่อดำเนินการต่อ ฉันมักจะเห็นว่านี่เป็นธุรกรรมที่ช้าสำหรับของที่ระลึกใหม่ติดอยู่ที่Mage_Core_Model_Session_Abstract_Varien::startประมาณ 30 วินาที (การล็อคเซสชันของฉันหมดเวลาที่ฉันคิด)

รายงานใหม่ของที่ระลึกนี้มีข้อเสียหลายอย่างที่ฉันเห็น

  • ชะลอเวลาตอบกลับโดยเฉลี่ยโดยรวมเนื่องจากคำขอเหล่านี้ช้ากว่าที่ควรจะเป็น
  • New Relic บันทึกตัวอย่างของการทำธุรกรรมที่ช้าที่สุดหากฉันมีปัญหาคอขวดในการทำงานซึ่งใช้เวลานาน 20 วินาที New Relic จะไม่รายงานสิ่งเหล่านั้นโดยอัตโนมัติหาก URL เดียวกันถูกรบกวนด้วยการหมดเวลาล็อคเซสชัน การหมดเวลากำลังซ่อนข้อมูลที่เป็นประโยชน์

สาเหตุ

ฉันเคยเห็นสาเหตุบางประการของเรื่องนี้ไม่ใช่รายการที่ชัดเจนไม่ว่าด้วยวิธีใด

บอท

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

Ajax เรียกร้องให้ดำเนินการกับตัวควบคุม Magento

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

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

น้ำยาเคลือบเงา ESI

เช่นเดียวกับข้างต้นจริงๆยกเว้นแทนที่จะใช้ ajax call มันใช้ Edge Side รวมซึ่งดูเหมือนจะเป็นการโทรใหม่ไปที่แบ็กเอนด์

แผนของฉัน

ฉันยังไม่ได้ทำสิ่งนี้เลยดังนั้นมันจึงยังเป็นทฤษฎีล้วนๆ แต่มันเป็นสิ่งที่ฉันอยากทำในอีกไม่กี่เดือนข้างหน้า

ผมนำปัญหานี้ขึ้นในระหว่างการประชุม Mage ไททันส์สหราชอาณาจักร 2016 และ Fabrizio Branca ชี้ให้ฉันต่อโมดูลต่อไปนี้: https://github.com/AOEpeople/Aoe_BlackHoleSession

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

สำหรับการโทร ajax / ESI เพื่อรับข้อมูลลูกค้าในหน้าแคชไม่มีอะไรที่คุณสามารถทำได้ที่ฉันเห็น คุณต้องเข้าถึงเซสชันเพื่อดึงข้อมูลเฉพาะลูกค้า

อย่างไรก็ตามสำหรับการโทร ajax / ESI เพื่อรับข้อมูลเฉพาะแคตตาล็อก (เช่นสินค้ามีจำนวน จำกัด ) ฉันไม่เห็นความต้องการเซสชันใด ๆ ที่จะมีอยู่ในคำขอนั้นเลย แผนการในอนาคตของฉันคือการทดลองขยายส่วนขยายไปยังAoe_BlackHoleSessionโมดูลเพื่อให้ฉันสามารถปิดการร้องขอไปยัง URL ที่ระบุว่าไม่มีการใช้งานเซสชัน

ฉันไม่ค่อยคุ้นเคยกับ internals ของ ESI ดังนั้นน่าเศร้าที่ฉันไม่มีความคิดเห็นมากเกินไป

ทางเลือกอื่น

ในระหว่างการประชุม Fabrizio Branca กล่าวว่าเขาสามารถปิดการใช้งานการล็อคเซสชันได้อย่างสมบูรณ์โดยไม่มีผลกระทบใด ๆ ทดสอบความเสี่ยงของคุณเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.