Shared Cache - แนวทางปฏิบัติที่ไม่ถูกต้อง


14

ฉันอยากจะรู้ว่าอะไรจะเป็นวิธีที่ดีกว่าในการทำให้วัตถุแคช / อัปเดตเป็นโมฆะ

ข้อกำหนดเบื้องต้น

  • มีเซิร์ฟเวอร์ memcached ระยะไกล (ทำหน้าที่เป็นแคชสำหรับหลาย ๆ แอปพลิเคชัน)
  • เซิร์ฟเวอร์ทั้งหมดโฮสต์โดย Azure (ภูมิภาคที่สัมพันธ์กัน, ดาต้าเซ็นเตอร์เดียวกัน)
  • ขนาดวัตถุแคชมีตั้งแต่ 200 ไบต์จนถึง 50 กิโลไบต์


วิธีที่ 1 (เก็บในแคชโดยเร็ว)

  1. สร้างวัตถุ A -> store ในฐานข้อมูลและเก็บไว้ในแคช
  2. วัตถุ A ที่ไคลเอนต์ร้องขอ -> ตรวจสอบแคชเพื่อการมีอยู่ของระบบมิฉะนั้นดึงข้อมูลจากฐานข้อมูลและเก็บไว้ในแคช
  3. วัตถุ A รับการอัพเดท -> จัดเก็บในฐานข้อมูลจัดเก็บในแคช

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


วิธีที่ 2 (สันหลังยาวแคชสโตร์)

  1. สร้างวัตถุ A -> store ในฐานข้อมูลแล้ว
  2. วัตถุ A ที่ไคลเอนต์ร้องขอ -> ตรวจสอบแคชเพื่อการมีอยู่ของระบบมิฉะนั้นดึงข้อมูลจากฐานข้อมูลและเก็บไว้ในแคช
  3. วัตถุ A รับการอัพเดท -> จัดเก็บในฐานข้อมูลลบรหัสในแคช

วิธีที่ 2 ดูเหมือนจะตระหนักถึงความจำมากขึ้น ในวิธีการนี้เฉพาะรายการที่ขอไปที่แคช


คำถามที่ 1:ในใจของการแสดงสิ่งที่จะเป็นวิธีที่ดีกว่า หน่วยความจำและ CPU ยังไม่นับ

คำถามที่ 2:ความคิดของฉันเป็นการเพิ่มประสิทธิภาพก่อนวัยอันควรหรือไม่

คำถามที่ 3:ความคิดอื่น ๆ วิธีอื่น ๆ

คำตอบ:


12
  1. ไม่สามารถตอบได้ยกเว้นว่าจะขึ้นอยู่กับว่า มีหลายปัจจัยที่จะเป็นตัวกำหนดว่าวิธีการใดที่จะดีที่สุดในกรณีของคุณเช่นมันเป็นเรื่องปกติหรือไม่ที่วัตถุที่ถูกสร้างขึ้นจะถูกเรียกคืนหลังจากสร้างขึ้นมาหรือไม่? อัตราส่วนของการอัพเดทต่อการเข้าถึงคืออะไร?
  2. เรื่อง การตัดสินใจว่าคุณต้องการแคช: หากคุณเพิ่มประสิทธิภาพโดยไม่มีข้อมูลใช่มันเป็นการเพิ่มประสิทธิภาพทางเทคนิคก่อนวัยอันควร ฉันพูดทางเทคนิคเนื่องจากประสบการณ์ / ภูมิปัญญาดั้งเดิมอาจบอกคุณว่าคุณจะต้องมีแคชบางประเภท เรื่อง ตัดสินใจเลือกวิธีที่แคชจะทำงานได้ดีที่สุด: ใช่เป็นการเพิ่มประสิทธิภาพก่อนวัยอันควรอย่างแน่นอน
    • การเพิ่มประสิทธิภาพมักจะไม่เกี่ยวกับการหาทางออกที่ดีที่สุด / ดีที่สุด มันควรจะเป็นดังนี้:
      1. ค้นหาคอขวดในระบบ
      2. ค้นหาที่ที่คุณสามารถสร้างความแตกต่างที่ยิ่งใหญ่ที่สุดด้วยจำนวนงานน้อยที่สุด
      3. ทำงานน้อยที่สุด!
      4. มันเร็วพอหรือยัง ถ้าไม่ไปที่ # 1
      5. ทำ!
    • สุจริตไม่มีวิธีการที่คุณอธิบายเสียงที่ซับซ้อน ทำไมไม่ใช้ทั้งสองและดูว่าอะไรดีที่สุด
    • ขั้นตอนที่ 3 ในวิธีการ # 2 สามารถเปลี่ยนเป็น "วัตถุ A ได้รับการอัปเดต -> จัดเก็บในฐานข้อมูลอัปเดตรายการในแคช"

Baqueta ขอบคุณสำหรับคำตอบของคุณ ฉันขอขอบคุณมัน
lurkerbelow

@lurkerbelow ดีใจที่ได้ช่วยเหลือ
vaughandroid

2

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

ไตรมาสที่ 1 วิธีที่ 2 จะดีกว่าในแง่ของประสิทธิภาพเนื่องจากไม่ได้ส่งวัตถุไปยัง memcached แม้ว่าการปรับปรุงประสิทธิภาพจะน้อยมาก

ไตรมาสที่ 2 มันยากที่จะพูด สมมติว่าคุณรู้ว่าคอขวดและร่างวิธีการที่มันจะไม่ใช่ก่อนวัยอันควร

ไตรมาสที่ 3 มีวิธีอื่นเช่นแคชใน memcached เท่านั้น

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