Multiplatform sinhronizasiýasy nähili amala aşyrylýar
1) Multiplatform sinhronizasiýasy näme we näme üçin zerur?
Multiplatform sinhronizasiýasy - dürli enjamlarda we müşderilerde: ykjam programmalarda (iOS/Android), web/PWA, iş stollarynda we integrasiýalarda (botlar, kiçi programmalar) birmeňzeş maglumatlaryň utgaşdyrylan täzelenmesidir. Maksatlar:- Dowamlylyk: islendik enjamda şol ýerden dowam etmek.
- Awtonom durnuklylyk: torsyz işlemek we serweri howpsuz "tutmak".
- Önümiň tizligi: hereketiň we netijäniň ýüze çykmagynyň arasynda iň az gijikdirmeler.
2) Esasy arhitektura (skelet)
1. Ýeke-täk domen modeli: anyk zatlar (ulanyjy, gapjyk/balans, geleşik, sazlamalar, saýlanan we ş.m.) we olaryň baglanyşyklary.
2. Sinhronizasiýa serweri: API-şlýuz (REST/GraphQL), wersiýa gatlagy, üýtgeşmeler magazineurnaly (event log).
3. Müşderiler: Ýerli DB (SQLite/Room/Core Data/Realm/IndexedDB), Statik-resurs keşi (App Shell), oflayn amallar üçin outbox.
4. Ulag: okamak/ýazmak üçin haýyşlar + täze wersiýalary habar bermek üçin "push-maýyplyk" kanallary (WebSocket, SSE, ykjam toplar).
5. Şahsyýet we elýeterlilik: OIDC/OAuth2 + gysga ömürli tokenler (access) we refresh-tokenleriň aýlanmagy.
6. Syn edilişi: sinka, metrika, aladalar.
3) Maglumatlaryň nusgasy we wersiýalaşdyrylmagy
Global wersiýalary: 'updated _ at '/' version' her bir obýektde monoton ösýän.
"GET/changes?" since = cursor 'üýtgemeleriň deltasyny getirýär.
ETag/If-None-Match: üýtgemedik çeşmelerde traffigi tygşytlaýar.
Ýerli "kölegeler" (shadow state): müşderi deňeşdirmek we merj üçin iň soňky belli wersiýasyny saklaýar.
4) Oflayn pattern: outbox + idempotentlik
Islendik "ýazga almak" hereketi wagtlaýyn 'client _ id', wagt, amalyň görnüşi we haýyşnamanyň bedeni bilen outbox-a düşýär.
Hatalar ýüze çykan halatynda eksponensial backoff bukjalary (batch) bilen iberiň.
Idempotentlik: sözbaşyda/endpointde - amalyň açary ('Idempotency-Key'). Gaýtalamak köplügi döretmez.
Atomarlyk: outbox-a goşmak we lokal täzelenmek - bir DB geleşiginde.
5) Merj konfliktleri we strategiýalary
LWW (Last Write Wins): ýönekeý we çalt; düzedişleri ýitirmek töwekgelçiligi, sazlamalar/halaýanlar/baýdaklar üçin amatlydyr.
Wersiýalaşdyrmak/Precondition: serwer köne ýazgylary ret edýär ('412 Precondition Failed') → müşderi diff görkezýär we täzeden ýazmagy/birleşdirmegi teklip edýär.
OT (Operational Transform): tekstler/bilelikde redaktirlemek üçin.
CRDT (Conflict-free Replicated Data Types): sanawlar, hasaplaýjylar, toplumlar üçin; gapma-garşylyksyz awtomatiki merj.
Meýdan syýasaty: pul/balanslar üçin "serweriň hakykaty"; ýerli bellikler üçin "müşderiniň hakykaty".
Gapma-garşylykda UX: "Çözgüt talap edilýär" nyşany, wersiýalary deňeşdirmek, "Meniňkini goýmak/Syzmak/Täzeden ýüklemek" saýlamak.
6) Ulag we üýtgetmeleri eltmegiň usullary
Pull: Wagtal soraglar 'changes? since = cursor '(arzan we ýönekeý).
Push-invalidate: WebSocket/SSE täze üýtgeşmeler barada "hint" iberýär → Müşderi çalt pull edýär.
Webhooks: serwer daşarky hyzmatlara/botlara habar berýär; müşderiler üçin - push + pull has gowudyr.
GraphQL Subscriptions: realtime-ssenariler üçin, şol bir wagtyň özünde-de ýerli kursoryňyzy saklaň.
7) Fon wezipeleri we platformalaryň çäklendirmeleri
iOS: Background Tasks/Push with content-available; wagt we energiýa çäklendirmeleri.
Android: WorkManager/Foreground service (batareýasyna seresap).
PWA: Background Sync/Periodic Sync (iOS-da nuanslar bilen), Kesh we oflayn üçin hyzmat Worker.
Retries syýasaty: backoff, limitler, low battery/roaming-de durmak (sazlap bolýar).
8) Howpsuzlyk we gizlinlik
Tassyklamak: OIDC/OAuth2, PKCE.
Tranzitde şifrlemek: TLS 1. 2/1. 3, berk ciphersuite, HSTS; mümkin boldugyça - mobile-da certificate pinning.
Enjamda şifrlemek: KeyChain/Keystore-da açarlar/bellikler; duýgur maglumatlar - AES-GCM.
Gurşaw izolýasiýasy: dev/stage/prod dürli açarlary bilen, prod daşyndaky "söweş" dataseti gadagan.
Obýekti ygtyýarlandyrmak: her bir manyda bolan hukuklaryň serwer barlagy (müşderä ynanmaň).
Audit žurnaly: kim näme üýtgetdi we haçan; maliýe/kadalaşdyryjy ýagdaýlar üçin zerurdyr.
9) Öndürijilik we traffigi tygşytlamak
Doly jisimli obýektleriň ýerine deltalar (patch/JSON Patch, GraphQL @defer/ @stream).
Gysyş: Brotli/Gzip; söhbetdeşlik/telemetriýa üçin ikilik protokollar (MessagePack/Protobuf).
Kursorlar we paginasiýa: 'limit/next _ cursor', agyr "hemme zat birbada" ýok.
Wakalaryň koalisiýasy: iberilmezden ozal ýygy-ýygydan ownuk üýtgeşmeleri (debounce) birleşdiriň.
Nagt gözegçilik: üýtgewsiz çeşmeler üçin akylly TTL we ETag.
10) Synlamak we simulýasiýa metrikleri
Sync Success Rate: Üstünlikli sink siklleriniň paýy.
Time To Consistency (TTC): Ähli işjeň enjamlarda üýtgeşmeleri görmek üçin ortaça wagt.
Conflict Rate и Resolve Time.
Outbox Depth we orta Age elementleri.
Payload Size / Session и Retry Count.
Battery Impact (mobile), Data usage.
SLO: Mysal üçin, üýtgeşmeleriň 95% -i onlaýn ýagdaýda 3 sekunt ≤.
11) Synag we bulam-bujarlyk ssenariýalary
Tor Shaping: 2G/3G, ýokary RTT, ýitgiler 1-10%, "flaping" Wi-Fi.
Öldürmek & Resume: Bir gezek öldürmek.
Dedloklar/bäsdeşlik: dürli hasaplarda/rollarda iki enjamdan paralel düzedişler.
Shemanyň köpçülikleýin göçmegi: ýerli DB göçmekde ýalňyşlyk ýüze çykan halatynda yza gaýdyp/gaýtalamak.
Howpsuzlyk: belgi çalyşmak, MITM-synaglar, idempotent açarlarynyň re-use synanyşyklary.
12) Shemanyň göçmegi we ters gabat gelmek
Shemanyň wersiýalary: "schema _ version" müşderi DB-sinde; ädimme-ädim we yza gaýdyp howpsuz göçmek.
Forward/Backward API laýyklygy: ýok etmeýän meýdanlary goşuň; köne müşderiler näbelli zady äsgermezlik edýärler.
Feature flags: Täze görnüşli maglumatlary/wakalary tapgyrlaýyn goşmak.
Serwerde göçmegiň wagty üçin goşa ýazgy (dual-write) + yzygiderlilik tassyklamasy.
13) Ýygy-ýygydan ýalňyşlyklar - we çalt fiksler
"Derrew tora ýazýarys, soň bolsa awtonom" → outbox-pattern we idempotentlik bilen başlaň.
Kursor/delta → traffigi we sink wagty partlaýar. 'changes' girýärsiňizmi? since`.
Möhüm maliýe maglumatlary üçin LWW → serwerde berk üýtgemeleri, amallary we iş düzgünlerini ulanyň.
Gizlin gapma-garşylyklar → ulanyjy diff/çözüji goşuň.
Çäksiz fon meseleleri → batareýany goýuň; OS syýasatlaryna hormat goýuň.
Syrlary açyk görnüşde saklamak → KeyChain/KeyStore + şifrlemek.
Metrleriň ýoklugy → nirede "akýandygyny" bilmek mümkin däl. PII arassalaýjy bilen Telemetry/Tracing-i açyň.
14) Giriş çek-sanawy (90 gün)
1. Modeliň we maglumatlar kartasynyň (ERD) aýratynlygy, mazmuny boýunça merj strategiýalaryny saýlamak.
2. Deltalar üçin API: '/changes? since ', kursorlar, ETag, paginasiýa.
3. Müşderilerde Outbox: amallar, idempotent açarlary, backoff.
4. Push-invalidate: WebSocket/SSE ýa-da content-available → çalt pull.
5. Ýerli DB + migrasiýa (Room/Core Data/Realm/IndexedDB).
6. Howpsuzlyk: OIDC, TLS, pinning, enjamda şifrlemek, serwerde RBAC.
7. Metrikler we loglar: TTC, conflict rate, outbox depth, retries, battery/data usage.
8. Bulam-bujarlyk synaglary: erbet tor, öldürmek-resume, gapma-garşylyklar, migrasiýa.
9. UX signallary: onlaýn/oflayn/sink statuslary, gapma-garşylykda diff, "gaýtalamak/ýatyrmak".
10. Ýuwaş-ýuwaşdan rollout: baýdaklar, kanareýkalar, sebitler boýunça süzgüç.
15) Mini-FAQ
Pull ýa-da push?
Has gowusy gibrid: push-invalidate "täze bar", soň bolsa kursor boýunça ýeňil pull habar berýär.
CRDT ýa-da LWW?
CRDT durmuşa geçirmek üçin has gymmat, ýöne bilelikde redaktirlemek/sanawlar üçin amatly. Sazlamalaryň/baýdaklaryň köpüsi üçin LWW, maliýe üçin bolsa serwer üýtgemeleri ýeterlikdir.
Batareýany nädip saklamaly?
Batchi, backoff, toparlaýyn iberiş, "ýuwaş penjireler" we roumingde/pes zarýadda agressiw retraýlary öçürmek.
Şahsy maglumatlar bilen näme etmeli?
Açarlary diňe KeyChain/KeyStore-da minimallaşdyrmak, şifrlemek, saklamak; awto-arassalamagy üpjün etmek.
GraphQL gerekmi?
Seçimler we deltalar üçin amatly; ýöne kursorly REST we ETag hem gowy işleýär. Esasy zat wersiýalaryň we deltalaryň düzgünidir.
Multiplatformly sinhronizasiýa bir "jadyly" tehnologiýa däl-de, ulgam: maglumatlaryň ýeke-täk modeli we wersiýalaşdyrmak, oflayn nobat we idempotentlik, merjiň paýhasly strategiýalary, push/pull gibrid, batareýany hormatlaýan fon meseleleri, berk howpsuzlyk we aç-açan metrikler. Bu gatlaklary yzygiderli durmuşa geçirip, bulam-bujarlyk ssenariýalarynda barlamak bilen, ähli platformalarda öňünden aýdyp boljak, çalt we ygtybarly sinhronizasiýa alarsyňyz - maglumat ýitgileri we ulanyjylaryň nerwleri bolmazdan.