অ্যাপসিগন্যাল ব্যবহার করে এমন একটি অ্যাপ চালানো প্রতিটি সার্ভার প্রতি 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
হিসাবে গণনা করা হয় .
এই সমস্যাটির জন্য একটি সমাধান স্থাপন করার পরে, একটি অ্যাপের নামস্থান আপডেট না করা পর্যন্ত বাতিলের সংখ্যা শূন্যে নেমে আসে৷
কাস্টম মেট্রিক্স যোগ করলে কোথায়, কখন এবং কত ঘন ঘন কী ঘটছে তা বোঝা সহজ করে তোলে। এই ক্ষেত্রে, ক্যাশে অকার্যকরকরণের সংখ্যা জানা এবং একটি পঠনযোগ্য গ্রাফে দেখানো আমাদের দ্রুত একটি সমস্যা খুঁজে পেতে অনুমতি দেয়। একটি নির্দিষ্ট মান বৃদ্ধি করতে এবং একটি ড্যাশবোর্ড তৈরি করতে এটির কয়েকটি লাইন কোডের প্রয়োজন৷
কাস্টম মেট্রিক্স সম্পর্কে আপনার কোন প্রশ্ন থাকলে এবং আমরা আপনার অ্যাপ্লিকেশনে সেগুলি সেট আপ করতে সাহায্য করতে পারি কিনা তা আমাদের জানান। আমরা সাহায্য করতে পেরে খুশি!