GH GambleHub

استراتيجيات التخزين المؤقت

1) لماذا المخبأ وأين تفعل ذلك

Cache هي طبقة ذاكرة سريعة تقلل من زمن الوصول والتحميل على الموارد باهظة الثمن (CPU/DB/API الخارجي). أهداف مهمة:
  • السرعة (p95/p99 أقل)، التكلفة (ناقص الخروج/وحدة المعالجة المركزية)، الاستقرار (أقل التبعيات تحت الذروة).
  • ذروة التنعيم والعزلة عن «الجيران الصاخبين».
المستويات النموذجية:

1. العميل (متصفح/محمول) - مخبأ HTTP، IndexedDB، التخزين المحلي.

2. Edge/CDN - عقد الملوثات العضوية الثابتة أقرب إلى المستخدم، وتخزين مؤقت ثابت وجزء من واجهة برمجة التطبيقات.

3. L7-gateway/Reverse-proxy - Nginx/Envoy/Varnish (microcash، SWR).

4. مخبأ الخدمة - Redis/Memcached داخل المجموعة.

5. In-process - in-memory (Caffeine/Guava/LRU-map).

6. ذاكرة التخزين المؤقت في قاعدة البيانات - تمثيلات المواد، الفهارس الثانوية.

القاعدة: التخزين المؤقت لأقرب ما يمكن من المستهلك، لكن احتفظ بالحقيقة مرة واحدة.

2) أنماط المخبأ

2. 1 مخبأ جانبا («تحميل كسول»)

يقرأ الطلب أولاً من المخبأ ؛ في حالة حدوث خطأ - من المصدر، ثم يكتب إلى المخبأ.
الإيجابيات: البساطة والتحكم. السلبيات: بدايات باردة، نوافذ غير متطابقة.

2. 2 قراءة

القراءة دائمًا من خلال ذاكرة التخزين المؤقت، والتي تذهب نفسها إلى المصدر عندما تفتقد (طبقة المكتبة/الوكيل).
ومن الملائم إضفاء الطابع المركزي على سياسات التسلسل في مجال تكنولوجيا المعلومات والاتصالات.

2. 3 الكتابة/الكتابة (الكتابة)

الكتابة من خلال: اكتب إلى المخبأ والمصدر بشكل متزامن → الاتساق أعلى، والكمون أعلى.
اكتب مرة أخرى: اكتب إلى مخبأ، فلاش غير متزامن يكتب للمصدر → بسرعة، ولكن خطر الخسارة والصراع.

2. 4 تحديث للأمام (استباقي)

تتوقع «انتهاء صلاحية TTL قريبًا» وتحديث المفتاح في الخلفية، ومنع التدافع.

2. 5 التخزين المؤقت السلبي

التخزين المؤقت «بدون بيانات/404/فارغة» إلى TTL قصير يقلل الحمل على المصدر.

2. 6 التخزين المؤقت الصغير

TTLs قصيرة جدًا (0. 5-5 ث) على L7 لـ «الديناميكيات تقريبًا» (القوائم، الرئيسية) - يقلل بشكل حاد من الذيول.

3) مخبأ HTTP: الرؤوس والتحكم

3. 1 العناوين الأساسية

'Cache-Control':' max-age ',' 'maxage' (для shared кэшей), 'public/private', 'no-store', 'cale-whine-revalidate', 'cale-in-error'.
المعتمدون: «ETag» (تجزئة المحتوى)، «آخر تعديل».
الاستفسارات بشروط: «If-Non-Match»، «If-Modified-Above» → 304 غير معدلة.

3. 2 تنوع والمفاتيح

«تنوع: قبول الترميز، التفويض، ملف تعريف الارتباط، قبول اللغة» - يولد خيارات تخزين مؤقت مختلفة. تقليل «تنوع» حتى لا «تفجير» الكاردينالية.

3. 3 مثال استجابة HTTP


Cache-Control: public, max-age=60, s-maxage=300, stale-while-revalidate=60
ETag: "a1b2c3"
Vary: Accept-Encoding

4) تصميم رئيسي و TTL

4. 1 مفاتيح

الهيكل: 'المستأجر: المستخدم: {id}: الملف الشخصي: v3' (بما في ذلك نسخة المخطط).
تجنب PII في المفتاح.
للمجموعات - بارامترات المفتاح + الاستعلام (طبيعية ومرتبة).

4. 2 TTL والاتساق

يقلل TTL القصير من عدم التطابق ولكنه يزيد من الأخطاء.
بالنسبة للبيانات الحرجة - المؤكدات («ETag») و SWR (إعادة التحقق من صحة البيانات القديمة).
لندرة التغيير - «قنابل» TTL + طويلة من الإعاقة.

4. 3 النسخ/العصا

للتغييرات غير المتوافقة، قم بتغيير النسخة البادئة/المفتاح ('v2 → v3').
للموارد الثابتة - تجزئة المحتوى في اسم الملف.

5) الإعاقة: الاستراتيجيات والممارسات

5. 1 الحذف المباشر

«مفتاح DEL »/« تطهير» على الوكيل. الخطر: السباقات بين الإزالة والعديد من القراء.

5. 2 مفاتيح بديلة

اربط الوثيقة بمجموعة من العلامات (الفئة/المؤلف). الإعاقة - حسب العلامة.
В Varnish/Edge - 'Surrogate-Key: article: 42 tag: author: 7' + 'BAN tag: author: 7'.

5. 3 الإعاقة الناجمة عن الأحداث

Pub/Sub (Kafka/NATS): عندما يتغير المصدر، ننشر الحدث «المبطل».
يستمع مستهلكو ذاكرة التخزين المؤقت ويحذفون/يحدثون المفاتيح.

5. ٤ مرحلتان

أولاً، نضع علامة على المفتاح العتيق (TTL الناعم)، ونقدم الخدمة القديمة، ونحدثها في الخلفية ونحل محلها ذريًا.

6) التعامل مع التدافع/الكلاب والمفاتيح الساخنة

6. 1 طلب دمج (رحلة فردية)

يقوم أحد المنتجين بتحديث المفتاح، والباقي ينتظر النتيجة (mutex/label «updates»).

6. 2 جيتر к TTL

أضف العشوائية (± 10-20٪) إلى TTL لتجنب التورم المتزامن.

6. 3 Soft-TTL + hard-TTL

قبل TTL اللينة، نخدم من المخبأ، بالتوازي مع مشغل التحديث ؛ بواسطة TTL الصعبة - نحن نعتبر خطأ.

6. 4 مفاتيح ساخنة

مخابئ محلية مشتركة (من مستويين).
تكرار المفتاح الساخن إلى شظايا متعددة واختيار عشوائي (قراءة فقط).
حد السعر لتحديث مفتاح معين.

6. 5 مثال على Redis + Lua (رسم فردي)

lua
-- SETNX lock with TTL to avoid deadlocks local ok = redis. call("SET", KEYS[1], "1", "NX", "EX", ARGV[1])
if ok then return "LOCKED"
else return "WAIT"
end

7) سياسات الاستباق والاستقبال المخبأ

7. 1 الإخلاء

LRU: بسيط وجيد للمحلية.
LFU: أفضل للمفاتيح الساخنة «طويلة العمر».
ARC/TinyLFU: توازن الحداثة/التردد.

7. 2 القبول

لا تسمح بدخول الأجسام النادرة العملاقة (مرشحات TinyLFU/Bloom).
ضغط القيم الكبيرة (LZ4/Zstd) عند حدود الحجم/الكمون.

8) الفحم والطوبولوجيا

8. 1 التجزئة المتسقة

يوزع بشكل ثابت مفاتيح العقد، ويقلل الحركة أثناء نمو/ضغط العنقود.

8. 2 طوبولوجيات Redis/Memcached

Redis Cluster (فتحات/شظايا)، Sentinel (feilover)، تكرار للقراءة فقط.
Memcached هو شحن بجانب العميل (تجزئة الكتاما)، بدون تكرار على مستوى الخادم.

8. 3 محلي + موزع

Cascade: in-proc (micro-TTL/LRU) → Redis (TTL أطول) مصدر →.
كن حذرًا مع قولون TTL وأجهزة التحقق من صحة المخبأ.

9) مخبأ Edge و CDN و L7

9. 1 مخبأ صغير на Nginx

nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api:100m inactive=10m;
map $request_method $skip_cache { default 0; POST 1; PUT 1; DELETE 1; }

server {
location /api/list {
if ($skip_cache) { add_header Cache-Control "no-store"; }
proxy_cache api;
proxy_cache_valid 200 2s;       # micro-cache proxy_cache_use_stale error timeout updating;
proxy_cache_background_update on;   # SWR add_header X-Cache $upstream_cache_status;
proxy_pass http://upstream;
}
}

9. 2 مبعوث (SWR والشروط)

yaml http_filters:
- name: envoy. filters. http. cache typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. http. cache. v3. CacheConfig typed_config:
"@type": type. googleapis. com/envoy. extensions. http. cache. file_system_http_cache. v3. FileSystemHttpCacheConfig cache_path: "/var/cache/envoy"

9. 3 ورنيش (مفاتيح بديلة)

استخدم «المفتاح البديل» و «الحظر» على العلامات الخاصة بالإعاقة الجماعية.

10) المخبأ واتساق البيانات

10. 1 اقرأ كتاباتك

بالنسبة لملفات تعريف المستخدم/سلة إعادة التدوير، قدم إما TTLs قصيرة، أو كتابة، أو وضع علامات على العملاء (تجاوز لثواني N بعد الكتابة).

10. 2 في نهاية المطاف مقابل قوي

للتوصية/التحليل - في نهاية المطاف + TTL طويل.
بالنسبة لحالات المال/الطلب - TTL قصير، التحقق من الصحة، وأحيانًا بدون ذاكرة تخزين مؤقت على المسارات الحرجة.

10. 3 الثوابت

لا تخبئ الحقول التي تؤثر على الأمن/الرباط الصليبي الأمامي بدون قيود TTL صارمة وإعادة التحقق.

11) القابلية للرصد، والمكتب والإدارة

11. 1 مقاييس

hit_ratio (общий и لكل مسار)، byte_hit_ratio، miss_rate.
stampede_prevented_total، refresh_ahead_total، ban/purge_total.
زمن الكمون: p50/p95/p99 من ذاكرة التخزين المؤقت مقابل المصدر.
hot_keys_topN و QPS/bytes.

11. 2 جذوع الأشجار والآثار

سجل 'X-Cache: HIT/MISS/STALE/UPDATING'.
في الآثار، حدد مصدر الاستجابة («cache = true»، «tier = edge» service «local»).

11. 3 نهج SLO

مثال: "بالنسبة لواجهة برمجة التطبيقات/الكتالوج p99 ≤ 250 مللي ثانية، وصل المخبأ ≥ 85٪، تدافع ≤ 0. 1٪ من الطلبات"

11. 4 كتب تشغيل

«Misses grow» → تحقق من TTL والإحماء/الإعاقة والمفاتيح الساخنة وحجم المخبأ وسياسة القبول.

12) السلامة وتعدد الحيازات

تم تضمين معرف المستأجر في المفاتيح (وفي «Vary» لـ HTTP).
لا تخفي الردود الخاصة على أنها «عامة».
تشفير ذاكرة التخزين المؤقت مع بيانات حساسة أو تخزين فقط غير PII/ID.

13) وصفات نموذجية

13. 1 كتالوج/شريط (شبه ديناميكي)

Edge-microcash 1-3 s + SWR، بالداخل - Redis for 15-60 s، الإعاقة حسب أحداث التحديث.

13. 2 ملف تعريف المستخدم

بصرف النظر عن ذاكرة التخزين المؤقت مع TTL 30-120 s، تجاوز 5-10 s بعد تحديث الملف الشخصي (ملف تعريف الارتباط/الرأس)، أو الكتابة.

13. 3 دورات/كتب مرجعية للعملات

TTL الطويل (دقائق - ساعات) + الإعاقة المستهدفة عند نشر بيانات جديدة ؛ «ETag» لـ GETs المشروطة.

13. 4 نتائج البحث

Edge-microcash 1-2 s، في الداخل - تحديث للأمام ودمج، وتطبيع معلمات الاستعلام في المفتاح.

14) الأنماط المضادة

النقد بدون إعاقة: الأمل فقط في TTL → نوافذ طويلة غير ذات صلة.
«تنوع» عملاق: «انفجار» الخيارات → معدل إصابة منخفض.
مخبأ واحد للحث/التجارب → التلوث.
لا توجد حماية من التدافع → يرتفع المصدر عندما تنتهي صلاحية TTL.
مخبأ النقد/الحقوق/الرباط الصليبي الأمامي بدون ضمانات صارمة.
ضغط «كل شيء على التوالي» - وحدات المعالجة المركزية الإضافية، وتدهور p99 على الأجسام الصغيرة.

15) قائمة التنفيذ المرجعية

  • تحديد مستويات المخبأ وأهدافها (الحافة/الخدمة/المحلية).
  • مفاتيح التصميم (النسخ، المستأجر، تطبيع البارامتر).
  • حدد النمط (تنحية المخبأ جانباً/قراءة/تحديث).
  • تكوين TTL/soft-TTL/jitter، تمكين SWR.
  • تنفيذ حماية الدمج/الطيران الفردي والتدافع.
  • تنظيم الإعاقة (الأحداث والعلامات والتطهير/الحظر).
  • أدخل مقاييس نسبة الضرب/الكمون ولوحات القيادة «X-Cache».
  • إجراء اختبارات حمل المفاتيح الساخنة.
  • اكتب SLO وكتب التشغيل.
  • تحقق من عزلة الضمان/المستأجر و «تنوع».

16) الأسئلة الشائعة

س: ماذا تختار - تنحي المخبأ جانبًا أم تقرأ ؟

ج: للخدمات البسيطة - بغض النظر عن المخبأ. نحن بحاجة إلى المركزية وسياسة واحدة - القراءة.

س: كيف تفهم TTL الأمثل ؟

ج: البدء من التقادم المسموح به، وتواتر التحديثات ومعدل إصابة الهدف ؛ تضاف رعشة وتلاحظ p95/p99/cost.

س: متى يكون الشطب مناسبًا ؟

ج: بالنسبة للتدفقات عالية الحمل، حيث يكون الاتساق النهائي مقبولاً وهناك قائمة انتظار/سجل موثوق لـ «إضافة».

س: هل يمكن إخفاء الردود المصرح بها ؟

ج: نعم، ولكن ضع علامة «خاصة» و/أو ضع المستأجر/المستخدم في مفتاح/« Vary ». لمخبأ العميل الخاص حقًا.

س: كيف تقوم بتدفئة المخبأ ؟

ج: قوائم المفاتيح الشعبية، ديدان الخلفية، إعادة التشغيل من جذوع الأشجار، الإحماء قبل الإصدار/الذروة (الجمعة السوداء، إلخ).

17) المجاميع

التخزين المؤقت الفعال هو تصميم رئيسي + TTL معقول + نمط تم اختياره جيدًا، يتم تعزيزه من خلال إعاقة الحدث، و SWR/التحديث المسبق، وحماية التدافع. طبق ذاكرة التخزين المؤقت (العميل/الحافة/الخدمة)، وأضف إمكانية الملاحظة و SLO - واحصل على ذيول زمن انتقال مستقرة وتكلفة يمكن التنبؤ بها وذروة المرونة.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

Telegram
@Gamble_GC
بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.