Kotlin Multiplatform ਵਿੱਚ CRDTs: ਆਪਣੇ Sync Server ਨੂੰ ਖਤਮ ਕਰੋ
ਜ਼ਿਆਦਾਤਰ ਟੀਮਾਂ ਡਾਟਾ ਟਕਰਾਅ (conflicts) ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਇੱਕ ਕੇਂਦਰੀ ਸਰਵਰ ਬਣਾਉਂਦੀਆਂ ਹਨ। ਸਰਵਰ ਲਿਖਤਾਂ (writes) ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ, ਇੱਕ ਜੇਤੂ ਚੁਣਦਾ ਹੈ, ਅਤੇ ਉਮੀਦ ਕਰਦਾ ਹੈ ਕਿ ਸਭ ਕੁਝ ਠੀਕ ਰਹੇਗਾ। ਇਹ ਅਸਫਲਤਾ ਦਾ ਇੱਕ ਇਕੱਲਾ ਬਿੰਦੂ (single point of failure) ਅਤੇ ਬਣਾਈ ਰੱਖਣ ਲਈ ਗੁੰਝਲਦਾਰ ਕੋਡ ਪੈਦਾ ਕਰਦਾ ਹੈ।
Conflict-Free Replicated Data Types (CRDTs) ਇਸ ਨੂੰ ਬਦਲ ਦਿੰਦੇ ਹਨ। ਹਰ ਡਿਵਾਈਸ ਬਿਨਾਂ ਕਿਸੇ ਕੇਂਦਰੀ ਮਾਲਕ ਦੇ ਇੱਕੋ ਜਿਹੀ ਸਥਿਤੀ (state) ਤੱਕ ਪਹੁੰਚ ਜਾਂਦੀ ਹੈ। ਇਹ ਇੱਕ ਗਣਿਤਕ ਗਾਰੰਟੀ ਹੈ।
ਤੁਸੀਂ ਆਪਣੇ sync backend ਨੂੰ ਸਧਾਰਨ blob storage ਨਾਲ ਬਦਲ ਸਕਦੇ ਹੋ। ਤੁਹਾਡਾ ਸਰਵਰ ਇੱਕ ਰਿਲੇਅ ਬਣ ਜਾਂਦਾ ਹੈ ਜੋ data blobs ਨੂੰ ਰੱਖਦਾ ਹੈ। ਇਸ ਨੂੰ ਤੁਹਾਡੇ ਡਾਟਾ ਨੂੰ ਸਮਝਣ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।
ਆਪਣੇ ਮੋਬਾਈਲ ਐਪਸ ਲਈ ਇਹ primitives ਵਰਤੋ:
• LWW-Register: ਯੂਜ਼ਰ ਪ੍ਰੋਫਾਈਲਾਂ ਅਤੇ ਸੈਟਿੰਗਾਂ ਲਈ ਵਰਤੋ। • G-Counter: ਐਨਾਲਿਟਿਕਸ ਜਾਂ ਵਿਊ ਕਾਊਂਟਸ ਲਈ ਵਰਤੋ। • PN-Counter: ਇਨਵੈਂਟਰੀ ਜਾਂ ਕਾਰਟ ਟੋਟਲ ਲਈ ਵਰਤੋ। • OR-Set: ਟੈਗਸ ਅਤੇ ਫੇਵਰੇਟਸ ਲਈ ਵਰਤੋ।
ਜ਼ਿਆਦਾਤਰ ਮੋਬਾਈਲ ਐਪਸ ਲਈ, LWW-Registers ਅਤੇ OR-Sets ਲਗਭਗ ਸਭ ਕੁਝ ਕਵਰ ਕਰ ਲੈਂਦੇ ਹਨ।
Implementation Tip: ਜਦੋਂ ਤੁਸੀਂ LWW-Register ਬਣਾਉਂਦੇ ਹੋ, ਤਾਂ ਹਮੇਸ਼ਾ ਇੱਕ nodeId ਸ਼ਾਮਲ ਕਰੋ। ਜੇਕਰ ਦੋ ਅੱਪਡੇਟਸ ਦਾ ਟਾਈਮਸਟੈਂਪ ਬਿਲਕੁਲ ਇੱਕੋ ਜਿਹਾ ਹੈ, ਤਾਂ nodeId ਇੱਕ tiebreaker ਵਜੋਂ ਕੰਮ ਕਰਦਾ ਹੈ। ਇਸ ਤੋਂ ਬਿਨਾਂ, ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਇੱਕੋ ਜਿਹੀ ਸਥਿਤੀ (state) ਵਿੱਚ ਸਿੰਕ ਨਹੀਂ ਹੋਣਗੇ।
State-based ਬਨਾਮ Operation-based:
ਮੋਬਾਈਲ ਲਈ State-based (CvRDT) ਚੁਣੋ। ਇਹ ਅਸਥਿਰ ਨੈੱਟਵਰਕਾਂ 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ ਕਿਉਂਕਿ ਮਰਜ (merge) ਪ੍ਰਕਿਰਿਆ idempotent ਹੁੰਦੀ ਹੈ। ਜੇਕਰ ਸਿੰਕ ਅੱਧ ਵਿਚਕਾਰ ਫੇਲ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਬਸ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਦੇ ਹੋ।
ਸ਼ੁਰੂਆਤ ਵਿੱਚ Operation-based (CmRDT) ਤੋਂ ਬਚੋ। ਇਸ ਲਈ exactly-once delivery ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਮੋਬਾਈਲ ਨੈੱਟਵਰਕਾਂ 'ਤੇ ਅਜਿਹਾ ਬੁਨਿਆਦੀ ਢਾਂਚਾ ਬਣਾਉਣਾ ਮੁਸ਼ਕਲ ਹੈ ਅਤੇ ਇਹ ਉਸ ਗੁੰਝਲਤਾ ਨੂੰ ਵਧਾਉਂਦਾ ਹੈ ਜਿਸ ਤੋਂ ਤੁਸੀਂ ਬਚਣਾ ਚਾਹੁੰਦੇ ਹੋ।
The Architecture:
- ਆਪਣੇ Kotlin Multiplatform ਪ੍ਰੋਜੈਕਟ ਦੇ commonMain ਮੋਡਿਊਲ ਵਿੱਚ ਆਪਣਾ CRDT ਲੌਜਿਕ ਬਣਾਓ।
- ਡਾਟਾ ਨੂੰ ਸਥਾਨਕ ਤੌਰ 'ਤੇ ਸਟੋਰ ਕਰਨ ਲਈ SQLDelight ਦੀ ਵਰਤੋਂ ਕਰੋ।
- ਡਾਟਾ blobs ਨੂੰ S3 ਜਾਂ Cloud Storage ਵਰਗੀ ਸੇਵਾ ਵਿੱਚ ਸਿੰਕ ਕਰੋ।
- ਤੁਹਾਡਾ backend ਸਰਲ ਅਤੇ ਸਸਤਾ ਰਹਿੰਦਾ ਹੈ।
ਗੁੰਝਲਦਾਰ sync engines ਬਣਾਉਣਾ ਬੰਦ ਕਰੋ। ਲੌਜਿਕ ਨੂੰ ਕਲਾਇੰਟ 'ਤੇ ਲਿਜਾਣ ਲਈ CRDTs ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਤੁਹਾਨੂੰ ਸਰਵਰ ਰੋਟੇਸ਼ਨਾਂ ਦੇ ਪ੍ਰਬੰਧਨ ਦੀ ਬਜਾਏ ਫੀਚਰ ਬਣਾਉਣ 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਿਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ।
Source: https://dev.to/software_mvp-factory/crdts-in-kotlin-multiplatform-kill-your-sync-server-28n8