AppSignal का उपयोग करने वाला ऐप चलाने वाला प्रत्येक सर्वर हर 30 सेकंड में हमारे Push API को नमूने और मीट्रिक का एक संग्रह भेजता है।
प्रत्येक अनुरोध में एक कुंजी होती है जिसका उपयोग हम यह निर्धारित करने के लिए करते हैं कि डेटा किस ऐप से आया है। ऐसा करने के लिए, हमें प्रत्येक आने वाले अनुरोध के लिए ऐप खोजने के लिए अपने डेटाबेस से पूछताछ करने की आवश्यकता है। प्रति माह तीस अरब अनुरोधों के साथ, हम ऐपसिग्नल को तेज़ बनाने के लिए प्रश्नों की संख्या को कम करने के तरीके खोजने का लगातार प्रयास कर रहे हैं।
हमने अपने डेटाबेस क्लस्टर पर प्रश्नों की संख्या को कम करने के लिए कैशिंग को लागू किया। जब भी हम डेटाबेस से कोई ऐप लाते हैं, तो हम उसे एक मिनट के लिए मेमकैच्ड में स्टोर करते हैं। इस परिवर्तन को उत्पादन में लागू करने के बाद, हमने पाया कि हम अधिक कर रहे थे पहले की तुलना में पूछताछ। ऐसा लग रहा था कि कैश बहुत बार अमान्य हो गया था। यह पता लगाने के लिए कि यह कहां हुआ, हमने यह पता लगाने के लिए कुछ कस्टम मेट्रिक्स जोड़े कि कैश को गलत तरीके से कहां अमान्य किया गया था।
ऐसे कुछ स्थान हैं जहां हम कैश को अमान्य कर देते हैं, जैसे कि जब पुश संसाधित समय अपडेट किया जाता है या जब हम एक नए नाम स्थान का पता लगाते हैं।
# 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
ऊपर दिए गए कस्टम मेट्रिक्स को जोड़कर, हम समय के साथ अपने कैशे हिट्स को ग्राफ़ करने में सक्षम थे। यह तुरंत स्पष्ट हो गया कि किस कैश कुंजी के कारण प्रश्नों में वृद्धि हुई है। app.cache.invalidate_namespaces
प्रत्येक अनुरोध के लिए कुंजी को अमान्य कर दिया गया था।
संग्रहणीय अनुरोधों की कुल संख्या app.cache.maybe
. के रूप में गिना जाता है .
इस समस्या को ठीक करने के बाद, जब तक किसी ऐप के नाम स्थान अपडेट नहीं किए जाते, तब तक अमान्यताओं की संख्या शून्य हो गई।
कस्टम मीट्रिक जोड़ने से यह समझना आसान हो जाता है कि क्या हो रहा है, कहां, कब और कितनी बार। इस मामले में, कैश अमान्यताओं की संख्या जानने और उन्हें एक पठनीय ग्राफ़ में दिखाने से हमें जल्दी से एक समस्या का पता लगाने की अनुमति मिली। इसे एक निश्चित मान बढ़ाने और डैशबोर्ड बनाने के लिए कोड की कुछ पंक्तियों की आवश्यकता होती है।
अगर कस्टम मेट्रिक्स के बारे में आपके कोई प्रश्न हैं और हम उन्हें आपके आवेदन में स्थापित करने में आपकी मदद कर सकते हैं तो हमें बताएं। हमें मदद करने में खुशी हो रही है!