GH GambleHub

Кэш стратегиялары

1) Эмне үчүн кэш жана кайда

Кэш - бул жашыруун жана кымбат ресурстарга (CPU/DD/тышкы API) жүктү азайтуучу тез эс катмары. Маанилүү максаттар:
  • ылдамдыгы (p95/p99 төмөн), наркы (аз egress/CPU), туруктуулук (аз жогорку көз карандылык).
  • Чокуларды тегиздөө жана "ызы-чуу кошуналардан" обочолонуу.
Типтүү деңгээл:

1. Кардар (браузер/мобилдик) - HTTP кэш, IndexedDB, local storage.

2. Edge/CDN - POP түйүндөрү колдонуучуга жакын, статиканы жана API бөлүгүн кэш.

3. L7-шлюз/Reverse-прокси - Nginx/Envoy/Varnish (микрокеш, SWR).

4. Тейлөө кэш - Redis/кластердин ичинде Memcached.

5. Процесс ичиндеги - in-memory (Caffeine/Guava/LRU-map).

6. БДдагы кэш - материалдык түшүнүктөр, экинчилик индекстер.

Эреже: керектөөчүгө мүмкүн болушунча жакын кэш, бирок чындыкты бир жолу сактаңыз.

2) Кэш үлгүлөрү

2. 1 Cache-aside (“lazy loading”)

Колдонмо биринчи кэш окуйт; ката кетиргенде - булактан, анан кэшке жазат.
Артыкчылыктары: жөнөкөйлүк, башкаруу. Кемчиликтери: муздак баштоо, карама-каршы терезелер.

2. 2 Read-through

Окуу дайыма кэш аркылуу, ал өзү ката болгондо булакка барат (китепкана/прокс катмары).
TTL/serilization саясатын борборлоштуруу үчүн ыңгайлуу.

2. 3 Write-through / Write-back (write-behind)

Write-through: кэш жазуу жана булагы синхрондуу → ырааттуулук жогору, жашыруун жогору.
Write-back: кэш жаздыруу, булагы → тез, бирок жоготуу жана чыр-чатактар ​ ​ коркунучу үчүн асинхрондук Flash жазуу.

2. 4 Refresh-ahead (proactive)

Алдын ала "жакында TTL аяктайт" жана stampede алдын алуу алкагында ачкычын тактоо.

2. 5 Negative caching

кыска TTL боюнча кэш "эч кандай маалымат/404/бош" булагы боюнча жүктү азайтат.

2. 6 Micro-caching

Өтө кыска TTL (0. 5-5 с) "дээрлик динамикасы" үчүн L7 боюнча (тизмелери, негизги) - кескин куйруктарын азайтат.

3) HTTP кэш: аталыштары жана контролдоо

3. 1 Негизги аталыштар

`Cache-Control`: `max-age`, `s-maxage` (для shared кэшей), `public/private`, `no-store`, `stale-while-revalidate`, `stale-if-error`.
Валидаторлор: 'ETag', 'Last-Modified'.
шарттары менен суроолор: 'If-None-Match', 'If-Modified-Since' → 304 Not Modified.

3. 2 Vary жана ачкычтар

'Vary: Accept-Encoding, Authorization, Cookie, Accept-Language' - кэштин ар кандай варианттарын түзөт. "Vary" минималдаштыруу үчүн эмес, "жардыруу" кардиналдык.

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 ачкычтары

Структуралаштырыңыз: 'tenant: user: {id}: profile: v3' (схеманын версиясын кошуңуз).
PII ачкычында качуу.
Коллекциялар үчүн - ачкыч + суроо параметрлери (нормалдаштырылган жана иреттелген).

4. 2 TTL жана ырааттуулук

Кыска TTL айырмачылыктарды азайтат, бирок каталарды көбөйтөт.
Критикалык маалыматтар үчүн - валидаторлор ('ETag') жана SWR (stale-while-revalidate).
сейрек өзгөрүүлөр үчүн - узак TTL + "бомба" майыптыгы.

4. 3 Версиялоо/Бастинг

туура эмес өзгөрүүлөр менен - префикс/ачкычтын нускасын өзгөртүү ('v2 → v3').
Статикалык ресурстар үчүн - файлдын аталышындагы content hash.

5) Майыптык: стратегиялар жана практикалар

5. 1 Түздөн-түз алып салуу

'DEL key '/' PURGE' прокси. Коркунуч: алып салуу жана көп окурмандардын ортосундагы жарыш.

5. 2 Tags/Surrogate keys

Документти тегдер топтому менен байланыштырыңыз (категория/автор). Майыптык - тег боюнча.
В Varnish/Edge — `Surrogate-Key: article:42 tag:author:7` + `BAN tag:author:7`.

5. 3 Event-driven майыптыгы

Pub/Sub (Kafka/NATS): булагы өзгөргөндө - окуя "invalidate" жарыялайт.
Кэш-менеджерлер ачкычтарды угат жана өчүрөт/жаңыртат.

5. 4 Эки фазалуу

Адегенде ачкычты эскирген деп белгилейбиз (жумшак TTL), стейлерди тейлейбиз, фонунда жаңылайбыз жана атомдук түрдө алмаштырабыз.

6) stampede/dogpile жана ысык ачкычтар менен күрөшүү

6. 1 Request coalescing (singleflight)

Бир продюсер ачкычты жаңыртып жатат, калгандары натыйжаны күтүп жатышат (мьютекс/лейбл "жаңыланып жатат").

6. 2 Jitter к TTL

Синхрондуу шишип кетпөө үчүн TTLге кокустукту (10-20% ±) кошуңуз.

6. 3 Soft-TTL + hard-TTL

soft-TTL чейин кызмат кэш, параллелдүү триггерим refresh; боюнча hard-TTL - биз ката деп эсептейбиз.

6. 4 ысык ачкычтар

жалпы үстүнөн жергиликтүү кэш (two-tier).
Hot ачкычты бир нече шардага жана рандомдук тандоого репликациялоо (гана read-only үчүн).
Белгилүү бир ачкычты жаңыртуу үчүн Rate limit.

6. 5 Redis + Lua мисал (singleflight эскиз)

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 Eviction

LRU: жөнөкөй жана жергиликтүү үчүн жакшы.
LFU: "узак" ысык ачкычтар менен жакшы.
ARC/TinyLFU: баланс recency/frequency.

7. 2 Admission (киргизүү)

ири сейрек кездешүүчү объектилерди (TinyLFU/Bloom-Filters) киргизбеңиз.
"Көлөм/жашыруун" чегинде чоң баалуулуктарды (LZ4/Zstd) кысуу.

8) Шардана жана топология

8. 1 Consistent hashing

Ноддор боюнча ачкычтарды туруктуу бөлүштүрөт, кластердин өсүшү/кысылышы менен кыймылдарды азайтат.

8. 2 Топология Redis/Memcached

Redis Cluster (Slots/Шарлар), Sentinel (Feylover), репликация read-only.
Memcached - кардар-сайт шардинг (ketama hashing), Server деъгээлинде репликация жок.

8. 3 Жергиликтүү + бөлүштүрүлгөн

Cascade: in-proc (микро-TTL/LRU) → Redis (TTL узун) → булак.
TTL жана кэш-валидаторлор менен сак болуңуз.

9) Edge, CDN жана L7 кэш

9. 1 Micro-cache на 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 Envoy (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 Varnish (Surrogate keys)

'Surrogate-Key' жана 'ban' колдонуңуз.

10) Кэш жана маалыматтардын шайкештиги

10. 1 Read-your-writes

Колдонуучунун профилдери/корзиналары үчүн же кыска TTL, же кэш аркылуу жазууну (write-through), же кардардын маркировкасын (жазуудан кийин N секундага айланып өтүүнү) камсыз кылыңыз.

10. 2 Eventual vs Strong

сунуш/аналитикалык үчүн - eventual + узун TTL.
Акча/заказ статусу үчүн - кыска TTL, валидация, кээде маанилүү жолдордо кэшсиз.

10. 3 Инварианттар

Катуу TTL жана кайра текшерүү жок, коопсуздук/ACL таасир талааларды кэш жок.

11) Байкоо, SLO жана башкаруу

11. 1 Метрика

hit_ratio (общий и per-route), byte_hit_ratio, miss_rate.
stampede_prevented_total, refresh_ahead_total, ban/purge_total.
Latentity: p50/p95/p99 vs булагы кэш.
hot_keys_topN жана алардын QPS/байт.

11. 2 Логи жана Tracking

Логин 'X-Cache: HIT/MISS/STALE/UPDATING'.
Трестерде жооп булагын белгилеңиз ('cache = true', 'tier = edge' service 'local').

11. 3 SLO ыкмасы

Мисалы: "үчүн API/catalog p99 ≤ 250 ms, cache hit ≥ 85%, stampede ≤ 0. 1% суроо".

11. 4 Runbooks

"Каталар өсүп жатат" → TTL текшерүү, жылытуу/майыптык, hot-keys, кэш өлчөмү жана кабыл алуу саясаты.

12) Коопсуздук жана көп тенанттуулук

tenant-id ачкычтар (жана 'Vary' HTTP менен).
Жеке жоопторду 'public' деп кэштоого болбойт.
сезимтал маалыматтар менен кэш шифрлөө же гана эмес PII/ID сактоо.

13) типтүү Recipes

13. 1 Каталог/лента (дээрлик динамикасы)

Edge-микрокеш 1-3 с + SWR, ичинде - Redis 15-60 с, жаңылануу окуялары боюнча майыптык.

13. 2 Колдонуучунун профили

Cache-aside менен TTL 30-120 с, bypass 5-10 с кийин профиль (cookie/heder), же write-through.

13. 3 алмашуу курсу/колдонмо

Узун TTL (мүнөт-саат) + жаңы маалыматтарды жарыялоодо максаттуу майып; шарттуу GET үчүн 'ETag'.

13. 4 Издөө натыйжалары

Edge-микрокеш 1-2 с, ичинде - refresh-ahead жана coalescing, негизги query-параметрлерин нормалдаштыруу.

14) Анти-үлгүлөрү

майыптыгы жок кэш: TTL гана үмүт → узак терезелер маанисиз.
Гигант 'Vary': "жарылуу" параметрлери → төмөн hit-rate.
prod/experiments → булганышы үчүн бирдиктүү кэш.
TTL аяктагандан кийин булакта stampede → чокулардан коргоо жок.
накталай акча/укуктар/ACL катуу кепилдиктери жок.
Компрессия "бир катар" - кошумча CPU, чакан объектилерде p99 начарлашы.

15) Киргизүү чек-тизмеси

  • Кэш деңгээлдерин жана алардын максаттарын аныктаңыз (edge/service/local).
  • ачкычтарды долбоорлоо (чыгаруу, tenant, параметрлерин нормалдаштыруу).
  • Үлгү тандоо (cache-aside/read-through/refresh-ahead).
  • TTL/soft-TTL/jitter, SWR кирет.
  • coalescing/singleflight, stampede коргоо ишке ашыруу.
  • майып уюштуруу (окуялар, теги, purge/ban).
  • hit-ratio/жашыруун жана dashboard 'X-Cache' параметрлерин киргизиңиз.
  • ысык ачкычтар менен жүктөө сыноолорду жүргүзүү.
  • SLO жана runbooks жазып.
  • Коопсуздук/tenant-обочолонуу жана 'Vary' текшерүү.

16) FAQ

Q: тандоо үчүн эмне - cache-aside же read-through?
A: жөнөкөй кызматтар үчүн - cache-aside. Борборлоштуруу жана бирдиктүү саясат керек - read-through.

Q: Кантип оптималдуу TTL түшүнүүгө болот?
A: жол эскирүү, тактоо жыштыгы жана максаттуу hit-rate баштап; jitter кошуу жана p95/p99/наркы байкоо.

Q: Качан туура write-back?
A: eventual-консистенттүүлүк алгылыктуу жана "кошумча" үчүн ишенимдүү кезек/журнал бар жогорку жүктөлгөн агымдар үчүн.

Q: Уруксат берилген жоопторду кэштоого болобу?
A: Ооба, бирок 'private' жана/же tenant/колдонуучуну ачкычка/' Vary 'деп белгилеңиз. truly-private үчүн - кардар кэш.

Q: Кантип кэш жылытат?
A: популярдуу ачкычтардын тизмеси, Background-Wormer, ийбадатканалардан реплика, чыгаруу/чокусуна чейин жылытуу (кара жума ж.б.).

17) Натыйжалары

Натыйжалуу кэш - бул ачкычтын дизайны + акылга сыярлык TTL + иш-чаралардын майыптыгы, SWR/refresh-ahead жана stampede коргоо менен күчөтүлгөн туура тандалган үлгү. Cache деңгээл (кардар/edge/кызматы), байкоо жана SLO кошуу - жана туруктуу кечигүү куйруктарын алуу, алдын ала баасы жана жогорку жүктөрдү туруктуулук.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.