Multiplatform sinxronizasiyası necə həyata keçirilir
1) Multi-platforma sinxronizasiyası nədir və niyə lazımdır
Multiplatform sinxronizasiyası müxtəlif cihazlarda və müştərilərdə eyni məlumatların razılaşdırılmış yenilənməsidir: mobil tətbiqlər (iOS/Android), veb/PWA, masaüstü və inteqrasiyalar (botlar, mini-tətbiqlər). Məqsədlər:- Davamlılıq: hər hansı bir cihazda eyni yerdən davam edin.
- Oflayn dayanıqlıq: şəbəkəsiz işləmək və təhlükəsiz şəkildə serverə «yetişmək».
- Məhsul sürəti: hərəkət və nəticənin görünüşü arasında minimum gecikmələr hər yerdə.
2) Əsas memarlıq (skelet)
1. Vahid domen modeli: aydın varlıqlar (istifadəçi, cüzdan/balans, əməliyyat, parametrlər, seçilmiş və s.) və onların əlaqələri.
2. Sinxronizasiya serveri: API-şlyuz (REST/GraphQL), version təbəqəsi, dəyişiklik jurnalı (event log).
3. Müştərilər: lokal DD (SQLite/Room/Core Data/Realm/IndexedDB), statik resurs cache (App Shell), oflayn əməliyyatlar üçün outbox.
4. Nəqliyyat: oxumaq/yazmaq üçün sorğular + yeni versiyaları bildirmək üçün «push-əlillik» kanalları (WebSocket, SSE, mobil toplar).
5. Identifikasiya və giriş: OIDC/OAuth2 + qısa ömürlü tokenlər (access) və refresh tokenlərinin rotasiyası.
6. Müşahidə olunma müddəti: sink loğları, metriklər, həyəcanlar.
3) Data modeli və versiyalaşdırma
Qlobal versiyalar: 'updated _ at '/' version' hər bir obyektdə monoton böyüyür.
İnkremental fidlər: 'GET/changes? since = cursor 'dəyişmə deltasını qaytarır.
ETag/If-None-Match: dəyişməyən resurslarda trafikə qənaət edir.
Yerli «kölgələr» (shadow state): müştəri müqayisə və merj üçün ən son məşhur versiyasını saxlayır.
4) Oflayn nümunə: outbox + idempotentlik
Hər hansı bir «qeyd» hərəkəti müvəqqəti 'client _ id', vaxt, əməliyyat növü və sorğu bədən ilə outbox-a düşür.
Səhv olduqda eksponensial backoff paketləri (batch) göndərin.
İdempotentlik: başlıqda/endpointdə - əməliyyatın açarı ('Idempotency-Key'). Təkrarlama dubl yaratmayacaq.
Atom: outbox əlavə və yerli yeniləmə - bir əməliyyat DB.
5) Merj münaqişələri və strategiyaları
LWW (Last Write Wins): sadə və sürətli; düzəlişlərin itirilməsi riski, parametrlər/bəyənmələr/bayraqlar üçün uyğundur.
Version/Precondition: server köhnəlmiş qeydləri rədd edir ('412 Precondition Failed') → müştəri diff göstərir və yenidən yazmağı/birləşdirməyi təklif edir.
OT (Operational Transform): mətnlər/birgə redaktə üçün.
CRDT (Conflict-free Replicated Data Types): siyahılar, sayğaclar, dəstlər üçün; münaqişə olmadan avtomatik merj.
Sahə siyasəti: pul/balans üçün «server həqiqəti»; yerli etiketlər üçün «müştərinin həqiqəti».
Münaqişə zamanı UX: «Həll tələb olunur» nişanı, versiyaların müqayisəsi, «Məni saxla/Sızdır/Yenidən yüklə» seçimi.
6) Nəqliyyat və dəyişikliklər çatdırılması yolları
Pull: periodik sorğular 'changes? since = cursor '(ucuz və sadə).
Push-invalidate: WebSocket/SSE yeni dəyişikliklər haqqında «hint» göndərir → müştəri sürətli pull edir.
Webhooks: Server üçüncü tərəf xidmətləri/botları xəbərdar edir; müştərilər üçün - daha yaxşı push + pull.
GraphQL Subscriptions: realtime ssenariləri üçün, yenə də yerli kursoru saxlayın.
7) Platformaların fon vəzifələri və məhdudiyyətləri
iOS: Background Tasks/Push with content-available; vaxt və enerji məhdudiyyətləri.
Android: WorkManager/Foreground service (batareyaya diqqətlə).
PWA: Background Sync/Periodic Sync (iOS nüansları ilə), Cache və Offline üçün Xidmət Worker.
retries siyasəti: backoff, limitlər, low battery/roaming (xüsusi) zaman stop.
8) Təhlükəsizlik və məxfilik
Autentifikasiya: OIDC/OAuth2, PKCE ictimai müştərilər üçün.
Tranzitdə şifrələmə: TLS 1. 2/1. 3, ciddi ciphersuite, HSTS; mümkünsə - Mobile certificate pinning.
Cihazda şifrələmə: Keychain/Keystore-da açarlar/tokenlər; həssas məlumatlar - AES-GCM.
Mühit izolyasiyası: müxtəlif açarları olan dev/stage/prod, prod xaricində «döyüş» dataseti qadağandır.
Obyekt üçün avtorizasiya: hər bir mahiyyət üçün hüquqların server yoxlaması (müştəriyə etibar etməyin).
Audit jurnalı: kim nə dəyişdi və nə vaxt; maliyyə/tənzimləyici hallar üçün lazımdır.
9) Performans və trafik qənaət
Tam cisimli obyektlər əvəzinə deltalar (patch/JSON Patch, GraphQL @defer/ @stream).
Kompressiya: Brotli/Gzip; söhbət/telemetriya üçün ikili protokollar (MessagePack/Protobuf).
Kursorlar və paginasiya: 'limit/next _ cursor', heç bir ağır «hər şey və bir anda».
Hadisələrin koalisiyası: göndərilmədən əvvəl tez-tez kiçik dəyişiklikləri (debounce) birləşdirin.
Cash Control: dəyişməz resurslar üçün ağıllı TTL və ETag.
10) Müşahidə və sinxronizasiya metrikası
Sync Success Rate: Uğurlu sink dövrlərinin payı.
Time To Consistency (TTC): bütün aktiv cihazlarda dəyişikliyin görüldüyü orta vaxt.
Conflict Rate и Resolve Time.
Outbox Depth və orta Age elementləri.
Payload Size / Session и Retry Count.
Battery Impact (mobile), Data usage.
SLO: Məsələn, dəyişikliklərin 95% -i onlayn olaraq 3 saniyə ≤ sabitdir.
11) Test və xaos ssenariləri
Network Shaping: 2G/3G, yüksək RTT, 1-10% itki, «flop» Wi-Fi.
Kill & Resume: Bir sink anında bir prosesi öldürmək.
Dedlock/rəqabət: müxtəlif hesablar/rollar altında iki cihaz ilə paralel düzəlişlər.
Kütləvi sxem miqrasiyası: yerli DB miqrasiyası səhv olduqda geri/təkrar.
Təhlükəsizlik: tokenin dəyişdirilməsi, MITM testləri, idempotent açarlarını yenidən istifadə etmək cəhdləri.
12) Sxem miqrasiya və əks uyğunluq
Sxemin versiyaları: müştəri DB-də 'schema _ version'; addım-addım miqrasiya və geri dönüş təhlükəsiz.
Forward/Backward API uyğunluğu: dağıdıcı olmayan sahələr əlavə edin; köhnə müştərilər bilinməyənlərə məhəl qoymur.
Feature flags: Yeni növ verilənlərin/hadisələrin mərhələli daxil edilməsi.
Server miqrasiyası zamanı ikiqat qeyd (dual-write) + sabitlik təsdiqi.
13) Tez-tez səhvlər - və sürətli fikslər
«Dərhal şəbəkəyə yazın və sonra oflayn» → outbox nümunəsi və idempotentliyi ilə başlayın.
Heç bir kursor/delta → trafik və sink vaxtı partlayır. changes daxil edin? since`.
Kritik maliyyə məlumatları üçün LWW → serverdə ciddi invariantlardan, əməliyyatlardan və iş qaydalarından istifadə edin.
Gizli konfliktlər → xüsusi diff/grid əlavə edin.
Limitsiz fon vəzifələri → batareyanı oturtun; OS siyasətlərinə hörmət edin.
Sirləri açıq saxlamaq → Keychain/Keystore + şifrələmə.
Metriklərin olmaması → harada «axdığını» anlamaq mümkün deyil. PII-sanitizator ilə Telemetry/Tracing daxil edin.
14) Giriş çek siyahısı (90 gün)
1. Model spesifikasiyası və məlumat xəritəsi (ERD), mahiyyətlərinə görə merj strategiyalarının seçimi.
2. Delta üçün API: '/changes? since ', kursorlar, ETag, pagination.
3. Müştərilərdə Outbox: əməliyyatlar, idempotent açarları, backoff.
4. Push-invalidate: WebSocket/SSE və ya content-available → sürətli pull ilə top.
5. Lokal DB + miqrasiya (Room/Core Data/Realm/IndexedDB).
6. Təhlükəsizlik: OIDC, TLS, pinning, cihazda şifrələmə, serverdə RBAC.
7. Metrik və log: TTC, conflict rate, outbox depth, retries, battery/data usage.
8. Xaos testləri: pis şəbəkə, kill-resume, münaqişələr, miqrasiyalar.
9. UX siqnalları: online/oflayn/sink statusları, münaqişə zamanı diff, «təkrarlamaq/ləğv etmək».
10. Tədricən rollout: bayraqlar, kanaryalar, bölgələrə görə filtr.
15) Mini-FAQ
Pull və ya push?
Daha yaxşı hibrid: push-invalidate «yeni var», daha sonra kursda yüngül pull bildirir.
CRDT və ya LWW?
CRDT həyata daha bahalıdır, lakin birgə redaktə/siyahılar üçün yaxşıdır. Əksər parametrlər/bayraqlar üçün LWW, maliyyə üçün isə ciddi server alternativləri kifayətdir.
Batareyaya necə uyğunlaşmaq olar?
Batchy, backoff, qrup göndərmə, «sakit pəncərələr» və rouminqdə/aşağı yükdə aqressiv retrajları söndürmək.
Şəxsi məlumatlarla nə etmək lazımdır?
Minimuma endirin, şifrələyin, açarları yalnız Keychain/Keystore-da saxlayın; avtomatik təmizləmə təmin edin.
GraphQL lazımdır?
Seçimi və delta üçün əlverişlidir; lakin REST kursorları və ETag ilə də əla işləyir. Əsas odur ki, versiyaların və deltaların nizam-intizamı.
Multiplatform sinxronizasiya tək bir «sehrli» texnologiya deyil, bir sistemdir: vahid data modeli və versiyası, oflayn növbə və idempotentlik, ağlabatan merj strategiyaları, push/pull hibrid, batareyaya hörmətlə arxa plan vəzifələri, ciddi təhlükəsizlik və şəffaf metriklər. Bu layları ardıcıl olaraq həyata keçirərək və xaos ssenarilərində yoxlayaraq, bütün platformalarda proqnozlaşdırıla bilən, sürətli və təhlükəsiz sinxronizasiya əldə edəcəksiniz - məlumat itkisi və istifadəçilərin əsəbləri olmadan.