تعظيم معدل نجاح CDN/التخزين المؤقت لـ Discourse؟

مرحبًا بالجميع،

لدي إعداد CDN كالتالي:

  • منطقة سحب (pullzone) لملفات JavaScript
  • منطقة سحب للشعارات ورسومات الصفحة الرئيسية (التي يتم الوصول إليها بشكل متكرر)
  • منطقة سحب لأصول S3 (المخزنة في Digital Ocean Spaces)

أستخدم BunnyCDN. ويبلغ حجم حركة المرور على منتداي حوالي 85% من أمريكا الشمالية، و5% من المملكة المتحدة وفرنسا، و10% من جنوب شرق آسيا.

بالنسبة لمنطقتي السحب الأوليين، أستخدم جميع خوادم الحافة الـ34 التابعة لـCDN حول العالم، لأن هذه الملفات يتم الوصول إليها بشكل متكرر، مما يسمح لي بالحفاظ على زمن انتقال منخفض مع الحفاظ على نسبة التخزين المؤقت/معدل الوصول (92% و99.8% على التوالي) مرتفعة نسبيًا. أود مثاليًا رفع نسبة التخزين المؤقت لملفات JavaScript، لكن التحدي يكمن في أن مراكز البيانات ذات حركة المرور المنخفضة تعاني من نسبة تخزين مؤقت ضعيفة بسبب ندرة الوصول إلى ملفات JavaScript هذه (بضع مرات في الشهر).

أما بالنسبة لمنطقة السحب الثالثة الخاصة بأصول S3، فأستخدم 10 خوادم حافة موزعة في أمريكا الشمالية وأوروبا، لأن الأصول المُنشأة من قبل المستخدمين على S3 يتم الوصول إليها أحيانًا بشكل غير متكرر، لذا لا أرغب في وجود عدد كبير جدًا من خوادم CDN يُقلل من نسبة التخزين المؤقت/معدل الوصول، وبالتالي يُؤثر سلبًا على وقت الوصول. أود مثاليًا وجود خادم حافة في جنوب شرق آسيا، لكن خدمة CDN لا تسمح لي باختيار مراكز البيانات المحددة التي أريد استخدامها. تبلغ نسبة التخزين المؤقت/معدل الوصول لدي على BunnyCDN حوالي 78%، وهو ما اعتبرته معقولاً لأن الوصول إلى صورة أصلية بحجمها الكامل بدلاً من النسخة المحسّنة، أو إحالة من محرك بحث إلى نقاش قديم نادر الوصول، سيؤدي حتمًا إلى خفض النسبة. كنت أستخدم سابقًا Cloudfront، وكانت نسبة التخزين المؤقت/معدل الوصول حوالي 55%، لكن قد يكون ذلك بسبب وجود Cloudfront للعديد من مواقع خوادم الحافة لشبكتها، أو لأن حركة المرور على منتداي صغيرة نسبيًا بالنسبة لهم. (انتقلت بعيدًا عن Cloudfront بسبب التكلفة، حيث إننا منتدى هاوٍ ذو إيرادات ضئيلة.)

سؤالي للمجموعة هو: هل لديكم أي استراتيجيات أو طرق تسمح لكم بالحفاظ على نسبة التخزين المؤقت/معدل الوصول مرتفعة؟ وما هي النسبة التي تحصلون عليها؟

هل لديكم أي اقتراحات لضبط إعداداتي لزيادة النسبة؟ هل توجد خدمات CDN اقتصادية تسمح باختيار مواقع خوادم الحافة المحددة؟ هل يمكنني فعل ذلك عبر قواعد الحافة؟ إذا كان الأمر كذلك، فيمكنني ببساطة اختيار خمسة مواقع للحفاظ على نسبة التخزين المؤقت مرتفعة: الساحل الغربي للولايات المتحدة، والساحل الشرقي للولايات المتحدة، وجنوب الولايات المتحدة، والمملكة المتحدة، وسنغافورة، حيث تتركز حركة المرور لدي.

فكرة واحدة هي تقديم الأصول المحسّنة من S3 والأصول الأصلية من مساحات DO، لكن الفصل غير ممكن افتراضيًا من خلال البرنامج.

هل لديكم أي أفكار أخرى؟

I see, so your idea is to reduce the number of geographical points to increase hit rate? Because if you have “one” location aka everything on one server, that’s a perfect hit rate. :wink:

I would imagine this comes down to knowing your specific audience, and where they are – so metrics would need to be gathered first about which geographical CDN points are being hit, then consolidate to the most used?

If you want a higher hit rate then your choices are 1) fewer PoPs or 2) longer retention. The first choice is going to make the experience worse for some clients, the second is going to cost more money (if it’s even available).

This is exactly what you need to find out. What are your misses and where are they coming from?

The 5 PoPs closest to the majority of our traffic are averaging about low 80s% hit cache rate, whereas the other ones with more sporadic traffic- the lower the traffic is, the lower the hit rate, sometimes below 50%. That’s when I think consolidating the PoPs can bring the hit rate up so the CDN doesn’t always have to go back to the origin to fetch, which, speedwise is worse than just serving from the origin. Its a tradeoff between additional latency with PoPs located farther away, and reduced latency from increased cache rate at the PoP.

Longer retention is tougher to solve. That’s the lever that can bring up the hit rate for the high traffic PoPs, and I don’t necessarily have a solution for that, yet.

I am curious about others’ experience- Does high-70s% and low-80s% cache rate for user-uploaded assets feel low/ about right?

It really depends how often the Discourse instance is updated/deployed though. For us, we deploy a lot so that colors the data significantly.