Anggep aplikasi iki minangka : saben piranti yaiku lokal. Tumindak sinau ditulis menyang plus append-only (outbox); nalika nyambung maneh piranti lan wiwit sync pungkasan. Konflik dirampungake nganggo siji aturan global nanging nganggo .
Anggep aplikasi iki minangka : saben piranti yaiku lokal. Tumindak sinau ditulis menyang plus append-only (outbox); nalika nyambung maneh piranti lan wiwit sync pungkasan. Konflik dirampungake nganggo siji aturan global nanging nganggo .
Model mental: bayangna kaya git — saben piranti "commit" lokal nalika offline, lan sync iku merge, dudu overwrite.
Device (offline) Server = source of truth
┌──────────────────┐ on reconnect ┌───────────────────────────┐
│ Local DB (SQLite)│ push ops (delta) │ Sync API /sync │
│ + Op log (outbox)│ ─────────────────▶ │ • idempotent by op.id │
│ cursor = lastSeen│ ◀───────────────── │ • merge by semantics │
└──────────────────┘ pull changes>cursor└───────────────────────────┘
Progress DB (Postgres)
Jam telpon ora bisa dipercaya lan rong piranti bisa ngowahi record sing padha nalika offline, mula "last write wins" (LWW) ilang data tanpa ana sing weruh. Rampungna nganggo semantik:
// op nduwe id -> terapke kanthi idempoten (retry ora ngetung pindho). clientTs ORA dipercaya.
function mergeProgress(server, op) {
return {
// progress mung mundhak -> max: op lawas sing telat ora tau narik mundur
progress: Math.max(server.progress ?? 0, op.progress),
// studiedMs iku counter aditif -> tambahi delta, aja overwrite
studiedMs: (server.studiedMs ?? 0) + op.studiedMs,
completedAt: server.completedAt ?? (op.progress >= 1 ? op.clientTs : null),
};
}
Ing kene, LWW biasa bakal ngidini piranti kadhaluwarsa sing sync telat kanthi progress: 0.3 overwrite 0.9 ing server → progress ilang. Njupuk max lan njumlah studiedMs ndadekake sync ora gumantung urutan — aman nalika mayuta-yuta piranti sync kanthi jam sing miring.
Pewawancara nyelidiki apa kowe ngerti jam client ora bisa dipercaya (mula dudu LWW timestamp murni), apa kowe ndadekake sync idempoten (op id), lan apa kowe nggabung miturut makna data. Jawaban lemah: "nganggo timestamp, last write wins." Jawaban kuwat: replica + op log + idempotensi + merge saben-field + server minangka source of truth — lan nyebut kegagalan ilang-data LWW kanthi cetha.
LWW murah nanging ilang data; merge semantik butuh pikiran saben-field nanging ora ilang apa-apa. Nggunakake CRDT/OT kebak mung yen kowe butuh editing kolaboratif tenan (cathetan, dokumen) — larang, mula aja dienggo kanggo kabeh.
Pustaka pitakon wawancara IT kanthi jawaban rinci — saka Junior nganti Senior.
Nyumbang