Ինչպես է կատարվում բազմաբնույթ համաժամեցումը
1) Ի՞ նչ է բազմաբնույթ համաժամացումը, և ինչո՞ ւ է այն անհրաժեշտ։
Բազմաբնույթ համաժամացումը նույն տվյալների համակարգված նորարարությունն է տարբեր սարքերում և հաճախորդների վրա 'բջջային ծրագրերում (iOS/Android), վեբ/PWA, դեկտոպներ և ինտեգրումներ (բոտներ, մինի-ծրագրեր)։ Նպատակները
Շարունակականություն 'շարունակել նույն տեղից ցանկացած սարքի վրա։- Օֆլինի դիմադրությունը 'աշխատել առանց ցանցի և անվտանգ «վերցնել» սերվերը։
- Ապրանքի արագությունը 'նվազագույն ձգձգումներ գործողության և արդյունքի ամենուր։
2) Ռուսական ճարտարապետությունը (կմախքը)
1. Միասնական հիբրիդային մոդել 'հստակ էակներ (օգտագործող, դրամապանակ/հավասարակշռություն, գործարք, փոխանցումներ, ընտրված և այլն) և նրանց կապերը։
2. Համաժամացման սերվերը 'API-դարպասը (REST/GraphQL), տարբերակման շերտը, փոփոխությունների ամսագիրը (event log)։
3. Հաճախորդները ՝ տեղական BD (MSite/Room/Windows/Realm/IndexeddDB), ստատիկ ռեսուրսների քեշը (App Shell), բլոկը օֆլային վիրահատությունների համար։
4. Տեղափոխություն 'կարդալու/ձայնագրելու + «հաշմանդամության» ալիքները (WindoSocket, SSE, բջջային թնդանոթներ) նոր տարբերակների մասին տեղեկացնելու համար։
5. Նույնականացումը և հասանելիությունը ՝ OIDC/OAuth2 + կարճաժամկետ հոսանքներ (105) և refresh-tocens լուծարումը։
6. Դիտարկումը 'կապույտ, մետրանտներ, ալերտներ։
3) Տվյալների մոդելը և տարբերակումը
Գլոբալ տարբերակները ՝ «contated _ at »/« version» յուրաքանչյուր օբյեկտի վրա, որոնք միապաղաղ աճում են։
Ռուսական ռեմենտալ ֆիդներ ՝ «GET/changes»։ since = cursor "վերադարձնում է փոփոխությունը։- ETag/If-None-Match: խնայում է անփոխարինելի ռեսուրսների վրա։
- Տեղական «ստվերը» (shadow state), հաճախորդը պահպանում է վերջին հայտնի տարբերակը համեմատելու և չափելու համար։
4) Pattern ofline: www.box + idempotention
Ցանկացած գործողություն «ձայնագրման» մեջ հայտնվում է ժամանակավոր «client _ id», ժամանակի, վիրահատության տեսակի և հարցման մարմնի հետ։
Փաթեթների (batch) ուղարկումը էքսպոնենցիալ backoff սխալներով։- Idempotenty: վերնագրում/endpointe - գործողության բանալին («Idempotency-Key»)։ Խոհարարը չի ստեղծի դուբլներ։
- Ատոմականությունը 'ավելացումը www.box-ում և տեղական նորարարությունը' մեկ գործարքում BD-ում։
5) Կոնֆլիկտներ և մարջայի ռազմավարություն
LWW (Last Write Cors): Պարզապես և արագ; Ճիշտ կորստի ռիսկը հարմար է ռուսական/հավանումների/դրոշների համար։
Տարբերակումը/Precond.ru: Սերվերը մերժում է հնացած գրառումները («412 Precondom Failed») ռուսական հաճախորդը ցույց է տալիս գրանցումը և առաջարկում է վերագրանցել/միավորել։
OT (Operation Transform) 'տեքստերի/միասին խմբագրման համար։- CRDT (Delict-free Replicated DirecTypes) 'ցուցակների, հաշվարկների, հավաքածուների համար; ավտոմատ մերջ առանց հակամարտությունների։
- Դաշտային քաղաքականությունը '«սերվերի ճշմարտությունը» փողի/հավասարակշռության համար։ «հաճախորդի ճշմարտությունը» տեղական պիտակների համար։
UX-ը հակամարտության ժամանակ 'բեյջը «Լուծում է պահանջում», տարբերակների համեմատություն, ընտրություն «Թողնել իմ/Սլյատ/Լոկոմոտիվ»։
6) Տեղափոխություն և փոփոխություններ կատարելու մեթոդներ
Pox: changes-ի պարբերական հարցումները։ since = cursor '(doshevo և պարզ)։
Push-intalidate: Windows Socket/SSE-ը «hint» է նոր փոփոխությունների մասին ռուսական հաճախորդը արագ պոմպ է անում։
Webhooks: սերվերը տեղեկացնում է երրորդ կողմի ծառայությունները/բոտերը։ հաճախորդների համար ավելի լավ է push + pox։
GraphQL Corsportions: realtime-2019-ի համար, այնուամենայնիվ պահպանեք տեղական ֆորումը։
7) Ֆոնային առաջադրանքները և հարթակների սահմանափակումները
iOS: Background Tasks/Push with content-available; ժամանակի և էներգիայի սահմանափակումները։
Android: WorkExpress/Foreground Andround-ը կարիքի վրա (խնամելով մարտկոցին)։
PWA: Background Disnc/Periodic Disnc (iOS-ի նրբություններով), Direct Worker քեշի և օֆլինի համար։
retries: backoff, limits, stop low battery/roaming (prodivaemo)։
8) Անվտանգությունն ու գաղտնիությունը
Վավերացում ՝ OIDC/OAuth2, PKCE հանրային հաճախորդների համար։
Կոդավորումը տրանզիտում 'TFC 1։ 2/1. 3, խիստ ciphersuite, HSTS; հնարավորության դեպքում, certificate pinning-ում։
Սարքի վրա կոդավորումը 'բանալիներ/հոսանքներ - Keychain/Keystore; զգայուն տվյալները AES-GCM են։- Միջավայրերի մեկուսացումը 'dev/stage/www.ru տարբեր բեկորների հետ, արգելված է «մարտական» ամսաթիվը դուրս։
- Օբյեկտի հեղինակային իրավունքը 'յուրաքանչյուր էակի իրավունքների սերվերային ստուգում կապույտում (մի վստահեք հաճախորդին)։
- Ամսագիրը նշում է, թե ով է փոխել և երբ։ անհրաժեշտ է ֆինանսական/կարգավորող դեպքերի համար։
9) Արտադրողականություն և խնայողություններ
Դելտաները ամբողջական օբյեկտների փոխարեն (Patch/JSON Patch, GraphQL @ proder/@ stream)։- Սպիտակուցիա ՝ Brotli/Gzip; երկուական արձանագրություններ (WindoPack/Winobuf) չաթի/հեռաչափության համար։
- Կուրսորները և երգեցողությունը '«limit/next _ cursor», ոչ մի ծանր «ամեն ինչ անմիջապես»։
- Իրադարձությունների կոալեսենսը 'միացրեք հաճախակի փոքր փոփոխությունները (debounce) նախքան ուղարկելը։
- Քաշ-վերահսկումը 'խելացի TTL և ETag-ը անփոփոխ ռեսուրսների համար։
10) Համաժամացման և չափման նշաններ
Winnc Success Rate-ը 'կապույտ հաջողակ ցիկլերի մասը։- Time To Consistency (TTC) 'միջին ժամանակը, որի համար փոփոխությունը երևում է բոլոր ակտիվ սարքերում։
Conflict Rate и Resolve Time.
Medibox Depth-ը և միջին Age տարրերը։
Payload Size / Session и Retry Count.
Battery Impact (Drusage), Disusage-ը։- SLO: Օրինակ, փոփոխությունների 95 տոկոսը առցանց է։
11) Փորձարկումներ և քաոս սցենարներ
Network Shaping: 2G/3G, բարձր RTT, 1-10 տոկոսի կորուստ, Wi-Fi ֆայլ։
Kill & Resume: գործընթացի սպանությունը կապույտ պահին։
Dedloks/մրցակցություն 'զուգահեռ ուղղություններ երկու սարքերից տարբեր հաշիվների/դերերի տակ։- Սխեմայի զանգվածային միգրացիան 'արձագանք/խոհարար, երբ սխալվում է տեղական BD-ը։
- Անվտանգությունը 'հոսանքի փոփոխությունը, MITM թեստերը, re-use-idempotent-ի փորձերը։
12) Համակարգային սխեմաները և հակառակ համատեղելիությունը
Սխեմայի տարբերակները ՝ «schema _ version» հաճախորդի BD-ում։ Մենք պետք է ուշադիր ու ապահով լինենք։- Forward/Backward-ը API-ի համատեղելիությունը 'ավելացրեք դաշտերը անխուսափելի; հին հաճախորդները անտեսում են անհայտ։
- Feature flags: Նոր տվյալների/իրադարձությունների փուլային լուծումը։
- Կրկնակի ձայնագրությունը (dult-write) սերվերի վրա սերվերի վրա + կոնսիստենցիայի վալիդացիա է։
13) Հաճախակի սխալները և արագ ֆիքսումները
«Մենք անմիջապես գրում ենք ցանցում, իսկ հետո օֆլայնը» սկսում եք box-pattern-ից և idempotenty-ից։
Ոչ մի կուրսոր/108 տ է պայթում, և կապույտ ժամանակը։ Ներդրեք 'changes? since`.
LWW-ը քննադատական ֆինանսական տվյալների համար օգտագործեք խիստ ինվարատորներ, գործարքներ և բիզնես կանոնները սերվերի վրա։
Թաքնված հակամարտությունները առաջարկվում են ավելացնել օգտագործողը/լուծումը։- Ֆոնային առաջադրանքները առանց սահմանների նախատեսվում է տեղադրել մարտկոցը։ հարգեք OS քաղաքականությունը։
- Գաղտնիքների պահպանումը բաց տեսքով Keychain/Keystore + կոդավորումը։
- Մետրիկի բացակայությունը անհնար է հասկանալ, թե որտեղ է հոսում "։ Միացրեք Telemetry/Tracing-ը PII-ալֆիզերի հետ։
14) Ներդրման թուղթ (90 օր)
1. Մոդելի և տվյալների քարտեզների (ERD), մարջայի ռազմավարության ընտրությունը էակների վրա։
2. API-ի համար '
3. Disbox հաճախորդների վրա 'գործարքներ, idempotent բանալիներ, backoff։
4. Push-entalidate: Windows Socket/SSE կամ թնդանոթներ content-available-ից արագ power։
5. Տեղական BD + 108 (Room/Windows System/Realm/IndexeddDB)։
6. Անվտանգությունը 'OIDC, TMS, pinning, սարքի վրա ծածկագրումը, RBAC սերվերի վրա։
7. Մետրիկները և լոգները ՝ TTC, www.lict rate, www.box depth, retries, battery/wwww.usage։
8. Քաոս թեստերը 'վատ ցանցը, kill-resume, հակամարտությունները, ռուսական։
9. UX ազդանշաններ ՝ առցանց/օֆլայն/կապույտ արձաններ, որոնք տեղադրված են հակամարտության ժամանակ, «կրկնել/չեղարկել»։
10. Աստիճանական rollout 'դրոշներ, կանարեյներ, ֆիլտրեր տարածաշրջաններում։
15) Mini-FAQ
Pox կամ push?
Ավելի լավ է հիբրիդը 'push-medalidate-ը հայտարարում է «նոր», իսկ հետո թեթև պոմպ դասընթացով։
CRDT կամ LWW?
CRDT-ն ավելի թանկ է իրականացման մեջ, բայց լավ է միասին խմբագրելու/ցուցակների համար։ Ռուսական/դրոշների մեծամասնության համար բավարար է LWW, ֆինանսական համար 'խիստ սերվերային ինվարանտներ։
Ինչպե՞ ս կարող ես մարտկոցի մեջ դնել։- Batchi, backoff, խմբակային ուղարկումը, «հանգիստ պատուհանները» և ռոմինգում/ցածր լիցքավորման ագրեսիվ ռետրերի անջատումը։
- Նվազագույնի հասցնել, ծածկագրել, պահել բանալիները միայն Keychain/Keystore-ում։ Avto-մաքրում։
- Հարմար է ընտրության և հանգստյան օրերի համար։ ԲԱՅՑ REST-ը կուրսորների և ETag-ի հետ նույնպես հիանալի աշխատում է։ Ամենակարևորը տարբերակների կարգապահությունն է և հանգստավայրը։
Բազմաբնույթ համաժամեցումը ոչ թե մեկ «կախարդական» տեխնոլոգիա է, այլ համակարգ, տվյալների միասնական մոդել և տարբերակման, ակնթարթային հերթափոխի և գաղափարախոսության, մերգի խելացի ռազմավարության, push/pox հիբրիդ, ֆոնի առաջադրանքներ մարտկոցի նկատմամբ, խիստ անվտանգություն և թափանցիկ չափումներ։ Իրականացնելով այս շերտերը հետևողականորեն և ստուգելով դրանք քաոս սցենարներում, դուք կստանաք կանխատեսելի, արագ և ապահով համաժամեցում բոլոր հարթակներում 'առանց տվյալների և օգտագործողների նյարդերի։