ทุกเซิร์ฟเวอร์ที่ใช้งานแอปที่ใช้ AppSignal จะส่งกลุ่มตัวอย่างและเมตริกไปยัง Push API ของเราทุกๆ 30 วินาที
คำขอแต่ละรายการมีคีย์ที่เราใช้เพื่อกำหนดว่าข้อมูลมาจากแอปใด ในการทำเช่นนั้น เราจำเป็นต้องสืบค้นฐานข้อมูลของเราเพื่อค้นหาแอพสำหรับคำขอที่เข้ามาแต่ละรายการ ด้วยคำขอ 3 หมื่นล้านรายการต่อเดือน เราพยายามค้นหาวิธีลดจำนวนการสืบค้นข้อมูลเพื่อทำให้ AppSignal เร็วขึ้น
เราใช้การแคชเพื่อลดจำนวนการสืบค้นในกลุ่มฐานข้อมูลของเรา เมื่อใดก็ตามที่เราดึงแอปจากฐานข้อมูล เราจะเก็บไว้ใน Memcached เป็นเวลาหนึ่งนาที หลังจากปรับใช้การเปลี่ยนแปลงนี้กับเวอร์ชันที่ใช้งานจริง เราพบว่าเรากำลังดำเนินการเพิ่มเติม แบบสอบถามมากกว่าเดิม ดูเหมือนว่าแคชจะใช้งานไม่ได้บ่อยเกินไป เพื่อค้นหาว่าเกิดอะไรขึ้น เราได้เพิ่มตัววัดแบบกำหนดเองบางตัวเพื่อค้นหาตำแหน่งที่แคชใช้งานไม่ได้อย่างไม่เหมาะสม
มีบางจุดที่เราทำให้แคชใช้งานไม่ได้ เช่น เมื่อมีการอัปเดตเวลาในการประมวลผลแบบพุชหรือเมื่อเราตรวจพบเนมสเปซใหม่
# Update last push processed at time
if app.last_push_processed_at < 5.minutes.ago
app.set(:last_push_processed_at => Time.now)
Rails.cache.delete(cache_key)
end
if namespaces_diff.any?
app.add_to_set(:namespaces => namespaces_diff)
Rails.cache.delete(cache_key)
end
เราได้เพิ่มตัวนับหลายตัวเพื่อพิจารณาว่าแคชใดเป็นโมฆะที่เป็นต้นเหตุ ในตัวอย่างนี้ เราเพิ่ม app.cache.invalidate
นับจำนวนการตรวจสอบทั้งหมด และใช้คีย์เฉพาะ เช่น app.cache.invalidate_push_time
และ app.cache.invalidate_namespaces
สำหรับโมฆะที่เฉพาะเจาะจง
# Update last push processed at at time
if app.last_push_processed_at < 5.minutes.ago
app.set(:last_push_processed_at => Time.now)
Rails.cache.delete(cache_key)
Appsignal.increment_counter('app.cache.invalidate', 1)
Appsignal.increment_counter('app.cache.invalidate_push_time', 1)
end
if namespaces_diff.any?
app.add_to_set(:namespaces => namespaces_diff)
Rails.cache.delete(cache_key)
Appsignal.increment_counter('app.cache.invalidate', 1)
Appsignal.increment_counter('app.cache.invalidate_namespaces', 1)
end
การเพิ่มเมตริกที่กำหนดเองด้านบน ทำให้เราสามารถสร้างกราฟ Hit ของแคชเมื่อเวลาผ่านไป ปรากฏชัดในทันทีว่าคีย์แคชใดทำให้เกิดการสืบค้นเพิ่มขึ้น app.cache.invalidate_namespaces
คีย์ไม่ถูกต้องสำหรับแต่ละคำขอ
จำนวนคำขอแคชทั้งหมดนับเป็น app.cache.maybe
.
หลังจากปรับใช้การแก้ไขปัญหานี้ จำนวนการทำให้เป็นโมฆะเป็นศูนย์ ตราบใดที่เนมสเปซสำหรับแอปไม่ได้รับการอัปเดต
การเพิ่มเมตริกที่กำหนดเองช่วยให้เข้าใจได้ง่ายขึ้นว่าเกิดอะไรขึ้นที่ไหน เมื่อไร และบ่อยเพียงใด ในกรณีนี้ การทราบจำนวนการทำให้แคชใช้ไม่ได้และแสดงเป็นกราฟที่อ่านได้ช่วยให้เราค้นหาปัญหาได้อย่างรวดเร็ว ต้องใช้โค้ดสองสามบรรทัดเพื่อเพิ่มค่าและสร้างแดชบอร์ด
แจ้งให้เราทราบหากคุณมีคำถามใดๆ เกี่ยวกับตัววัดที่กำหนดเอง และถ้าเราสามารถช่วยคุณตั้งค่าในใบสมัครของคุณได้ เรายินดีให้ความช่วยเหลือ!