GH GambleHub

Wakalaryň duplikasiýasy

1) Näme üçin duplikasiýa gerek?

Dublikatlar retraýlar, tor wagtlary, feýllerden soň dikeldişler we taryhy maglumatlaryň gaýtalanmagy sebäpli ýüze çykýar. Eger olara gözegçilik edilmese:
  • inwariantlar bozulýar (goşa ýazylmalar, gaýtalanýan email/SMS, "iki gezek döredilen" sargyt);
  • çykdajylar artýar (gaýtadan ýazga almak/gaýtadan işlemek);
  • analitika ýoýulýar.

De-duplikasiýanyň maksady - ulagyň rugsat berilýän gaýtalanmalarynda, köplenç dempotentlik bilen bilelikde bir gezek syn edilýän täsiri üpjün etmek.

2) De-duplikasiýany nirede ýerleşdirmeli (derejeler)

1. Edge/API-şlýuz - aç-açan dubllary kesýäris 'Idempotency-Keu '/beden + gol.
2. Broker/akym - açar/sekwens boýunça logiki duplikasiýa, sypdyrylanda coalescing (köplenç - bahasy sebäpli).
3. Wakalary kabul ediji (consumer) - esasy ýer: Inbox/açar tablisasy/kesh.
4. Sink (BD/kesh) - özboluşly açarlar/UPSERT/wersiýalary/kompaksiýa.
5. ETL/analiz - wagt penjiresi we sütün sütünlerindäki açar boýunça deepup.

Düzgün: mümkin boldugyça ir, ýöne ýalan işleriň bahasyny we repleýiň zerurlygyny göz öňünde tutup.

3) De-duplikasiýa açarlary

3. 1 Tebigy (has gowusy)

`payment_id`, `order_id`, `saga_id#step`, `aggregate_id#seq`.
Durnuklylygy we manyny kepillendirýärler.

3. 2 Komponent

`(tenant_id, type, external_id, version)` или `(user_id, event_ts_truncated, payload_hash)`.

3. 3 Yzy (fingerprint)

Meýdanlaryň kesgitlenen kiçi köplüginiň heşi (tertibi/registrleri kadalaşdyrmak), opsiýa 'HMAC (secret, payload)'.

3. 4 Yzygiderlilik/wersiýa

Monoton 'seq' per aggregate (optimistik blokirleme/wersiýa).

Anti-pattern: "random UUID" iş düýp manysy bilen baglanyşyksyz - dedup mümkin däl.

4) Wagtlaýyn penjireler we tertip

Duplikasiýa penjiresi - wakanyň gaýtadan gelip biljek döwri (adatça 24-72 sagat; maliýe üçin - has uzyn).
Out-of-order: gijä galmaga rugsat berýäris (lateness). Akym çarçuwalarynda - waka wagty + watermarks.
Sliding/Fix-window dedup: "Soňky N minutda açary gördüňizmi? ».
Sequence-aware: eger 'seq' iň soňkusyny ≤ - dubl/gaýtalamak.

5) Maglumatlaryň we durmuşa geçirmegiň gurluşlary

5. 1 Takyk hasap (exact)

Redis SET/STRING + TTL: 'SETNX key 1 EX 86400' → "ilkinji gezek - gaýtadan işleýäris, ýogsam - SKIP".
LRU/LFU keş (in-proc): çalt, ýöne volatile → diňe ilkinji päsgelçilik hökmünde has gowudyr.
SQL özboluşly indeksler + UPSERT: "goýuň ýa-da täzeläň" (idempotent effekti).

5. 2 Takmynan gurluşlar (probabilistic)

Bloom/Cuckoo filter: arzan ýat, ýalan täsirler bolup biler (false positive). Maliýe/sargytlar üçin däl-de, aç-açan "şowhunly" aýlaw (mysal üçin, telemetriýa) üçin amatlydyr.
Count-Min Sketch: "gyzgyn" jübütlerden goramak üçin ýygylyklary bahalandyrmak.

5. 3 Akym ýagdaýlary

Kafka Streams/Flink: keyed state store c TTL, penjirede açar boýunça dedup; checkpoint/restore.
Watermark + allowed lateness: gijä galan wakalaryň penjiresini dolandyrýar.

6) Geleşik patternleri

6. 1 Inbox (gelýän tablisa)

'message _ id '/düwmesini we netijesini zyýanly täsirlere çenli saklaň:
pseudo
BEGIN;
ins = INSERT INTO inbox(id, received_at) ON CONFLICT DO NOTHING;
IF ins_not_inserted THEN RETURN cached_result;
result = handle(event);
UPSERT sink with result; -- idempotent sync
UPDATE inbox SET status='done', result_hash=... WHERE id=...;
COMMIT;

Gaýtalamak ýazgyny görer we täsirini gaýtalamaz.

6. 2 Outbox

Bir geleşikdäki iş ýazgysy we waka → çap ediji dellalyna berýär. Sarp edijiden goşa ýok etmeýär, ýöne "deşikleri" aradan aýyrýar.

6. 3 Özboluşly indeksler/UPSERT

sql
INSERT INTO payments(id, status, amount)
VALUES ($1, $2, $3)
ON CONFLICT (id) DO NOTHING; -- "create once"
ýa-da gözegçilik edilýän wersiýa täzelenmesi:
sql
UPDATE orders
SET status = $new, version = version + 1
WHERE id=$id AND version = $expected; -- optimistic blocking

6. 4 Agregatlaryň wersiýalary

Eger 'event' bolsa, bu waka ulanylýar. version = aggregate. version + 1`. Başgaça - goşa/gaýtalamak/gapma-garşylyk.

7) Dedup we brokerler/akymlar

7. 1 Kafka

Idempotent Producer girelgede goşa azalýar.
Transactions, ofset + çykyş ýazgylaryny atom bilen birleşdirmäge mümkinçilik berýär.
Compaction: per key - post-faktum dedup/koalitesing (tölegler üçin däl) iň soňky manysyny saklaýar.
Consumer-side: state store/Redis/DB penjire açarlary üçin.

7. 2 NATS / JetStream

Ack/redaktirleme → at-least-once. Sarp edijide (Inbox/Redis).
JetStream sequence/durabot sarp edijiniň gaýtalanmalaryny aňsatlaşdyrýar.

7. 3 nobatlar (Rabbit/SQS)

Visibility timeout + gaýtadan eltip bermek → açar + dedup-stor gerek.
SQS FIFO 'MessageGroupId '/' DeduplicationId' bilen kömek edýär, ýöne TTL penjireleri üpjün ediji bilen çäklenýär - iş talap etse açarlary has uzak saklaň.

8) Ammar we analitika

8. 1 ClickHouse/BigQuery

"ORDER BY key, ts 'i' argMax '/' anyLast 'şerti bilen.

ClickHouse:
sql
SELECT key,
anyLast(value) AS v
FROM t
WHERE ts >= now() - INTERVAL 1 DAY
GROUP BY key;

Ýa-da "täsin" wakalaryň materiallaşdyrylan gatlagy (açar/wersiýa boýunça merj).

8. 2 Logi/telemetriýa

Mysal üçin approximate-dedup (Bloom) ingest → tory/diski tygşytlaýarys.

9) Gaýtadan işlemek, bellik etmek we yzyna gaýtarmak

Dap açarlary sesi başdan geçirmeli (TTL ≥ sesi penjiresi).
Arka fil üçin, onlaýn penjirä päsgel bermezlik üçin açar giňişligini ('key #source = batch2025') ýa-da aýratyn "erikleri" ulanyň.
Netijäniň artefaktlaryny (hash/wersiýa) saklaň - bu "fast-skip" -ni gaýtalamalarda çaltlaşdyrýar.

10) Metrikler we gözegçilik etmek

'dedup _ hit _ total '/' dedup _ hit _ rate' - tutulan dubllaryň paýy.
Ähtimal süzgüçler üçin 'dedup _ fp _ rate'.
'window _ size _ seconds' hakyky (telemetry late arrivals boýunça).
`inbox_conflict_total`, `upsert_conflict_total`.
`replayed_events_total`, `skipped_by_inbox_total`.
tenant/key/type boýunça profiller: iň köp goşa we näme üçin.

Логи: `message_id`, `idempotency_key`, `seq`, `window_id`, `action=process|skip`.

11) Howpsuzlyk we gizlinlik

PII-ni açara goýmaň; heş/lakamlary ulanyň.
Barmak yzy üçin - HMAC (secret, canonical_payload), gapma-garşylyklardan/galplyklardan gaça durmak üçin.
Açarlary saklamagyň wagtyny (GDPR retenshn) ylalaşyň.

12) Öndürijiligi we bahasy

In-proc LRU ≪ Redis ≪ SQL bir amalyň gizlinligi/bahasy boýunça.
Redis: arzan we çalt, ýöne açarlaryň we TTL-iň göwrümini göz öňünde tutuň; 'tenant/hash'.
SQL: p99 gymmat, ýöne güýçli kepillik we tomaşaçylyk berýär.
Probabilistic süzgüçleri: gaty arzan, ýöne FP mümkin - "goşmaça SKIP" möhüm bolmadyk ýerlerde ulanyň.

13) Anti-patternler

"Bizde Kafka exactly-once - açar gerek däl". Zerur - sinka/iş gatlagynda.
Açarlar üçin gaty gysga TTL → bellikler/gijikdirmeler goşa getirer.
Global ýeke-täk dip stor → hotspot we SPOF; tenant/açar bilen tertiplenmedi.
Dadup diňe ýatda - prosesiň ýitmegi = iki gezek tolkun.
Pul/sargytlar üçin Bloom - false positive kanuny amaldan mahrum eder.
Ylalaşylmadyk kanonizasiýa payload - manysy boýunça birmeňzeş habarlara dürli heşler.
Out-of-order-i äsgermezlik etmek - giç wakalar ýalňyşlyk bilen iki gezek bellik edilýär.

14) Girizmegiň çek-sanawy

  • Tebigy açary (ýa-da birleşdirilen/yzy) kesgitläň.
  • Dedup penjiresini we 'lateness' syýasatyny guruň.
  • Derejäni saýlaň: edge, consumer, sink; şardlanmagy göz öňünde tutuň.
  • Inbox/UPSERT ýerine ýetiriň; akymlar üçin - keyed state + TTL.
  • Approximate-baryer gerek bolsa - Bloom/Cuckoo (diňe kritiki däl domenler üçin).
  • Rebound laýyklygyny sazlaň (TTL ≥ rebound/arka penjire).
  • 'dedup _ hit _ rate' metrikleri, gapma-garşylyklar we penjireler; per-tenant dashbordlary.
  • Game Day: wagt/retraut, bellik, out-of-order, kesiň ýykylmagy.
  • Payload kanonizasiýasyny we açar wersiýalaryny resminamalaşdyryň.
  • "Gyzgyn açarlar" we uzyn penjirelerde ýük synaglaryny geçiriň.

15) Konfigurasiýa/kod mysallary

15. 1 Redis SETNX + TTL (päsgelçilik)

lua
-- KEYS[1] = "dedup:{tenant}:{key}"
-- ARGV[1] = ttl_seconds local ok = redis. call("SET", KEYS[1], "1", "NX", "EX", ARGV[1])
if ok then return "PROCESS"
else return "SKIP"
end

15. 2 PostgreSQL Inbox

sql
CREATE TABLE inbox (
id text PRIMARY KEY,
received_at timestamptz default now(),
status text default 'received',
result_hash text
);
-- In the handler: INSERT... ON CONFLICT DO NOTHING -> check, then UPSERT in blue.

15. 3 Kafka Streams (penjirede)

java var deduped = input
.selectKey((k,v) -> v.idempotencyKey())
.groupByKey()
.windowedBy(TimeWindows. ofSizeWithNoGrace(Duration. ofHours(24)))
.reduce((oldV,newV) -> oldV)   // first wins
.toStream()
.map((wKey,val) -> KeyValue. pair(wKey. key(), val));

15. 4 Flink (keyed state + TTL, psevdo)

java
ValueState<Boolean> seen;
env. enableCheckpointing(10000);
onEvent(e):
if (!seen.value()) { process(e); seen. update(true); }

15. 5 NGINX/API-şlýuz (edge-de Idempotency-Key)

nginx map $http_idempotency_key $idkey { default ""; }
Proxy the key to the backend; backend solves deadup (Inbox/Redis).

16) FAQ

Q: Näme saýlamaly: dedup ýa-da arassa idempotentlik?
A: Adatça ikisi hem: dedup - çalt "süzgüç" (tygşytlamak), idempotentlik - dogry täsiriň kepili.

Q: Haýsy TTL goýmaly?
A: Mümkin bolan gaýtadan eltmegiň iň ýokary wagtynyň ≥ + ätiýaçlyk. Adatça 24-72s; maliýe we yza süýşürilen meseleler üçin - günler/hepdeler.

S: Giç wakalary nädip bejermeli?
A: 'allowed lateness' we 'late _ event' duýduryşyny sazlaň; giç - aýratyn şahanyň üsti bilen (recompute/skip).

Q: Telemetriýanyň ähli akymyny aýyrmak mümkinmi?
A: Hawa, edge-de approximate-süzgüçleri (Bloom), ýöne FP-ni göz öňünde tutuň we möhüm iş täsirlerine ulanmaň.

Q: Dedup arka fille päsgel berýärmi?
A: Açar ýerlerini bölüň ('key #batch2025') ýa-da arka aýlawda päsgelçiligi öçüriň; Açarlar TTL diňe onlaýn penjireleri öz içine almalydyr.

17) Netijeler

Deduplikasiýa - bu kompozisiýa: dogry açar, penjire we ýagdaýyň gurluşy + geleşik patternleri (Inbox/Outbox/UPSERT) we tertip we gijä galan wakalar bilen aňly işlemek. Päsgelçilikleri iň arzan ýerde goýuň, çeňňeklerde idempotentligi üpjün ediň, 'dedup _ hit _ rate' ölçäň we bellikleri/faýllary synagdan geçiriň - şonuň üçin artykmaç gizlinlik we baha guýruklary bolmazdan "täsirli exactly-once" alarsyňyz.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.