التكنولوجيا والبنية التحتية → مستويات المخبأ وتخزين البيانات
مستويات التخزين المؤقت وتخزين البيانات
1) لماذا تحتاج إلى مخبأ متعدد الطبقات
Cache هو مسار قصير للإجابة دون الذهاب إلى النظم الفرعية «باهظة الثمن» (قواعد البيانات وواجهات برمجة التطبيقات الخارجية والشبكات). توزع الطبقات الحمل: متصفح → CDN/حافة طبقة تطبيق → → ذاكرة التخزين المؤقت الموزعة → قاعدة البيانات/التخزين. الأهداف: تقليل P95/P99، وتفريغ المنشأ، وتحمل الذروة بشكل أكثر ثباتًا وتقليل تكلفة البايت.
2) خريطة مستوى التخزين المؤقت
1. Браузер: "Cache-Control' و" ETag "و" Last-Modified "و" stale-whine-revalidate ".
2. CDN/Edge: TTL/ключ, Vary, Signed URLs, image-resize; متدرجة/درع.
3. API Gateway/Service Mesh: ذاكرة تخزين مؤقت للاستجابة قصيرة العمر للحصول على GET آمنة.
4. التطبيق (قيد التشغيل): LRU/LFU، مخبأ قريب للمفاتيح الساخنة، مللي ثانية.
5. ذاكرة التخزين المؤقت الموزعة (Redis/Memcached): الطبقة الرئيسية للديناميكيات.
6. مخابئ DB: Pg/Innodb buffers، PgBouncer multiplexing، مناظر ملموسة.
7. مخازن القرص/الكائن: لقطات مسبقة، مخبأ النقطة (على سبيل المثال، S3 + CDN).
المبدأ: "كلما اقترب المستخدم، قصر السجل التكنولوجي الانتقالي وقل التخصيص ؛ كلما اقتربت البيانات، زادت ثراء سياسة الاتساق"
3) أنماط المخبأ
Cache-Aside (Lazy): نقرأ → مع MISS نحملها من المصدر → نضعها في المخبأ. بسيط، يعطي TTL التحكم.
قراءة من خلال: يقرأ التطبيق من خلال ذاكرة التخزين المؤقت التي تسحب من المصدر نفسه. ومن الملائم إضفاء الطابع المركزي على هذه السياسة.
الكتابة من خلال: يذهب التسجيل إلى المخبأ وإلى المصدر على الفور. أكثر اتساقًا، لكنه أكثر تكلفة على الإطلاق.
Write-Back (Write-Behind): نكتب إلى المخبأ، ويتم تحديث المصدر بشكل غير متزامن (قائمة انتظار). مطلوب سرعة عالية وضمانات شحن وحماقة.
Refresh-Ahead: للحصول على مفاتيح «أعلى»، قم بتحديث القيمة قبل انتهاء صلاحية TTL.
أين ماذا: بطاقات/أدلة اللعبة - تنحية المخبأ جانباً/قراءة ؛ العدادات/اللوحات القيادية - إعادة الكتابة + CRDT/التجميع ؛ أدلة العملات/الحدود - قراءة مع TTL الخاضعة للرقابة.
4) المفاتيح والتجزئة والتسمية
Шаблон: 'المجال: الكيان: {معرف}: v{schema}|region={R}|currency={C}|lang={L}'.
ضع في المفتاح فقط ما يغير الإجابة بالفعل (المنطقة والعملة واللغة ونسخة المخطط).
إصدار المخطط: للتغييرات غير المتوافقة - ارفع «vN» في المفتاح، وتجنب التطهير الجماعي.
تفسير الأسماء حسب المنتج/المستأجر: «المستأجر: {t}:»... - حاسم بالنسبة للمستأجر المتعدد.
يمكن أن يقلل مرشح Bloom لـ «الوجود الرئيسي» من الرحلات إلى المصدر.
5) TTL، النضارة والإعاقة
TTL-matrix:- ثابتة (ملفات مجزأة): 30-365 يوماً + 'ثابتة' ؛
- الكتالوجات/اللافتات: 5-60 دقيقة + «إعادة التحقق من صحة الأشياء» ؛
- المتصدرين/الاقتباسات: 2-15 ثانية ؛
- الدلائل (العملات/الحدود): 1-10 دقائق.
- أحداث الإعاقة: منتج النشر. تم تحديث '→ dot key/prefix disability.
- التطهير القائم على العلامة: عمليات التطهير الجماعية حسب العلامة (إصدار ترويجي/كتالوج).
- Soft-Expiry: بعد انتهاء صلاحية TTL، نعطي TTL القديم على أنه «قديم»، قم بتحديثه بالتوازي (SWR/SIE).
- Versioned Keys> تطهير جماعي: أرخص وأكثر أمانًا.
6) التدافع والمفاتيح الساخنة والمنافسة
حماية Dogpile/Stampede:- رحلة واحدة (طلب الدمج): يقوم أحد القادة بتحديث المفتاح، والباقي ينتظر.
- TTL jitter: طمس التدفق الخارجي، وتجنب الانهيار لمرة واحدة.
- SWR محليًا: نعطي القيمة المنتهية الصلاحية للمستخدم، ونحدثها في الخلفية.
- تكرار المفتاح الساخن لمفتاح متعدد # 1.. عدد الفترات الموزعة بالقراءة
- شبه مخبأ في ذاكرة العملية ؛
- ما قبل الحرب/التحديث قبل الاختيارات (البطولات/المباريات).
- قيود على تحديثات العملات الموحدة للمفاتيح الثقيلة.
7) الاتساق والطبقات المتقاطعة
اكتب-أبطل: عند الكتابة إلى المصدر - قم بتعطيل المفاتيح المقابلة (حانة/فرعية) بشكل متزامن.
إصلاح القراءة: في حالة وجود تناقضات، قم بتحديث المخبأ بالقيمة الصحيحة.
في نهاية المطاف مقابل قوي: تتم قراءة المعاملات النقدية الحرجة مباشرة/مع TTL قصير ؛ يعرض واجهة المستخدم والإحصاءات - في نهاية المطاف.
CRDT/المجمعات: للعدادات/التصنيفات الموزعة - الهياكل «الآمنة للدمج» (G-Counter، Top-K على الجداول).
الإعاقة المتتالية: يؤدي تحديث «اللعبة» إلى تعطيل قائمة + البطاقة + ذاكرة التخزين المؤقت للتوصية المخصصة.
8) التسلسل والضغط والشكل
التنسيقات: protobuff/MessagePack أسرع من JSON ؛ لـ CDN/متصفح - JSON with Brotli.
الضغط في Redis: مفيد للأجسام> 1-2 KB، ولكن راقب وحدة المعالجة المركزية.
الاستجابات الجزئية/المجالات عند الطلب: أقل بايت → أقل من TTFB و RAM.
9) سياسات الاستباق والحجم
LRU (افتراضي) - آمن ؛ LFU أفضل للمحتوى «الشهير».
حجم المفتاح/القيمة: إبقاء تحت السيطرة (المقاييس «حجم قيمة avg»، «الحد الأقصى»).
حصص مساحة الأسماء/المستأجر بحيث لا «يأكل» منتج واحد المخبأ بأكمله.
10) الأمن و PII/PCI
البيانات الشخصية/المالية - لا تختبئ في مخبأ CDN/edge وفي طبقات مشتركة ؛ استخدام الرموز/الإسقاطات.
تشفير القيم الحساسة في Redis عبر التشفير على جانب العميل (مع توخي الحذر بشأن خسائر التحكم في TTL).
الرباط الصليبي الأمامي الصارم وعزل الشبكات ؛ ثبت NAT/IP للخروج إلى مقدمي الخدمة.
11) إمكانية الرصد ومخبأ SLO
المقاييس:- نسبة الضرب (حسب الطبقة والبادئة)، Origin Offload.
- TTFB/P95/P99 قبل/بعد المخبأ، Latency Redis.
- عمليات الإخلاء، OOM، ضربات/أخطاء فضاء المفاتيح.
- معدل التدافع، وقت التحديث.
- قدم Stale٪ и تأخر النضارة.
- كتالوج اللعبة: نسبة الضرب ≥ 85٪، TTFB P95 ≤ 150 مللي ثانية (حافة).
- أدلة API: ضرب إعادة التصديق ≥ 60٪، P95 ≤ 200 مللي ثانية.
- Redis: عملية P99 ≤ 5 مللي ثانية، عمليات الإخلاء لا تزيد عن 1٪ في الساعة.
12) FinOps: قيمة مخبأ
$/GB الشهر RAM مقابل $/RPS الأصل: احسب نقطة الاسترداد.
التفريغ والخروج: CDN + Redis يقلل من حركة المرور الخارجية من المنطقة الأصلية.
توفر الصورة/WebP/AVIF وإلغاء التطبيع أكبر مدخرات بايت.
حد من «MISS باهظ الثمن»: تحليلات «bytes × MISS × region».
13) أمثلة (شظايا)
13. 1 Cache-Aside مع رحلة واحدة (pseudocode)
python def get(key, ttl, loader):
val = redis. get(key)
if val: return val with single_flight (key): # only one updates val = redis. get (key) # double check if val: return val data = loader () # request to source redis. setex(key, ttl_with_jitter(ttl), serialize(data))
return data
13. 2 نشر الإعاقة حسب الحدث
json
{
"event": "game. updated",
"game_id": "g123",
"affected": ["catalog:list:region=TR", "game:card:g123:"]
}
يشترك المستهلك في القناة ويجعل «DEL »/« PUBLISH» يطابق المفاتيح/العلامات.
13. 3 مفتاح مع نسخة المخطط والموقع
game:card:v2:id=g123 region=BR currency=BRL lang=pt-BR
14) قائمة التنفيذ المرجعية
1. خريطة مستوى مخبأ ومصفوفة TTL (ساكنة/شبه ثابتة/واجهة برمجة التطبيقات).
2. التسمية الرئيسية: المجال، إصدار المخطط، المحلي/الإقليمي/العملة، المستأجر.
3. حدد نمط كل نقطة نهاية (اسأل/اقرأ/اكتب/ارجع).
4. SWR/SIE، رحلة واحدة و TTL jitter مقابل التدافع.
5. معاق حسب الأحداث (حانة/فرعية)، تطهير للمجموعات.
6. شبه مخبأ للمفاتيح الساخنة والذراع قبل الذروة.
7. التنسيقات والضغط (protobuf/MsgPack، Brotli)، التحكم في الحجم.
8. سياسات LRU/LFU، وحصص الأسماء/المستأجر.
9. SLO/метрики: نسبة الإصابة، زمن الكمون، عمليات الإخلاء، نسبة قديمة، تأخر النضارة.
10. الأمان: لا يوجد متجر للشخص، الترميز، الشبكة/الرباط الصليبي الأمامي.
15) الأنماط المضادة
«no-cache» «فقط في حالة» وفشل TTL هو صفر تفريغ.
يشمل المفتاح جميع الاستفسارات/الرؤوس → انفجار الكاردينالية.
التطهير بالجملة "إجمالي CDN/Redis' مع كل إصدار.
عدم وجود حماية من التدافع وانتهاء صلاحية «المفاتيح العلوية» لمرة واحدة.
Redis واحد مشترك بدون حصص/عزلة ؛ المستأجر «الساخن» يأكل المخبأ بأكمله.
تخزين الاستجابات الشخصية للحافة/CDN.
لا يوجد قياس عن بعد للنضارة/الإخلاء → السيطرة العمياء.
16) سياق iGaming/fintech: ملاحظات عملية
لوحات الصدارة/التصنيفات: TTL 2-10 s، التدفقات الإجمالية + CRDT، SWR في الحوادث.
فهرس/لافتات الألعاب: CDN + Redis ؛ المفتاح: المنطقة/العملة/اللغة ؛ الإعاقة من خلال علامات «الترويج: التحديث».
حالات الدفع: لا توجد مخبأ في مسار الكتابة ؛ اقرأ - TTL قصير (≤3 -5 ثوانٍ) أو طلب مباشر.
إجابات KYC/AML: لا تخزن الصور/المستندات في Redis.
مسار VIP: مساحة اسم منفصلة/تجمع Redis، خدمة ذات أولوية.
المجموع
استراتيجية ذاكرة التخزين المؤقت القوية هي بنية المستوى، وأنماط التحديث الصحيحة، و TTL/الإعاقة المدروسة، ومقاومة التدافع، والمفاتيح والإصدارات الأنيقة، وقابلية الملاحظة و FinOps. من خلال اتباع هذه المبادئ، ستعمل على تثبيت ذيول P95/P99، وتقليل الحمل على المصادر والحصول على تكلفة متوقعة لكل مللي ثانية - بالضبط حيث يكون أكثر أهمية للمنتج والأعمال.