Kembali ke Insights
Optimasi Server & Cloud7 Menit Membaca

Mengenal Keandalan Sinkronisasi Mikro: Menjaga Data Jawaban Peserta Ujian Aman dari Mati Lampu.

KI

Oleh Lead Technical Specialist

Dipublikasikan pada: 15 Maret 2026

Bayangkan skenario mimpi buruk ini dalam pelaksanaan ujian online (CBT) sekolah atau seleksi masuk kerja: seorang peserta ujian telah berkonsentrasi penuh mengerjakan soal selama 110 menit dan berhasil mengisi 98 dari 100 soal pilihan ganda yang rumit. Tiba-tiba, terjadi pemadaman listrik (mati lampu) mendadak di area sekolah, membuat komputer mati total, atau sinyal koneksi internet Wi-Fi terputus secara mendadak. Ketika komputer dihidupkan kembali setelah listrik menyala, seluruh jawaban ujian yang tadinya telah diisi menghilang bersih. Peserta menangis histeris karena panik, orang tua melayangkan protes keras ke panitia, dan kredibilitas penyelenggara ujian hancur seketika. Bagaimana tim engineering Klikto ID mengatasi masalah krusial ini?

Key Analogi & Esensi

Keamanan sebuah sistem digital diuji bukan saat semuanya berjalan normal, melainkan saat bencana terburuk melanda. Di Klikto ID, kami merancang sistem dengan prinsip 'Zero Data Loss' agar jawaban peserta ujian dilindungi sedalam milidetik sejak tombol diklik.

Chief Software Architect Klikto ID

Spesifikasi Arsitektur Sistem

Teknologi Zero Data Loss

Visualisasi Arsitektur: Sinkronisasi Mikro CBT Klikto ID

1. Klik Siswa
Jawaban Dipilih
Mulai Proses
< 3 milidetik
2. Database Lokal Browser
Kunci di IndexedDB

Jawaban langsung terpatri di harddisk browser siswa. Kebal terhadap mati lampu PC mendadak.

Micro-Buffer Sync
3. CBT Cloud Server
Database Ujian Pusat
100% Synced

1. Mengapa Fitur Auto-Save Biasa Sering Gagal Menghadapi Putus Koneksi?

Banyak pengembang aplikasi ujian online mengklaim telah memasang fitur 'Auto-Save' biasa. Cara kerjanya adalah dengan menembakkan request HTTP POST ke server database setiap kali siswa mencentang pilihan jawaban.

Namun, mekanisme auto-save konvensional ini memiliki dua kelemahan fatal yang sangat membahayakan:

Pertama, Server Overload akibat Lock Database. Jika ada 2.000 peserta ujian mengklik tombol jawaban secara acak dalam kurun waktu beberapa detik yang sama, server database akan dibombardir oleh ribuan antrean transaksi tulis (write requests) secara bersamaan. Database akan terkunci (deadlock), antrean transaksi macet, dan akhirnya server crash total.

Kedua, Kerentanan Koneksi Drop. Jika koneksi internet siswa tiba-tiba tidak stabil (loss packet) persis saat ia mengklik jawaban nomor 50, request HTTP POST tersebut akan gagal terkirim ke server. Browser akan memunculkan error, dan data jawaban nomor 50 tersebut lenyap selamanya tanpa sempat tercatat di database server.

2. Solusi: Arsitektur Sinkronisasi Mikro (Micro-Buffering) Klikto ID

Untuk mengatasi kelemahan mendasar tersebut, tim R&D Klikto ID merancang arsitektur Sinkronisasi Mikro (Micro-Buffering) yang membagi beban pengamanan data antara server dan perangkat lokal browser siswa secara cerdas.

Kami memindahkan tanggung jawab pengamanan jawaban paling awal langsung ke browser client (browser-first approach). Mengapa? Karena koneksi lokal ke internal komputer siswa tidak akan pernah terputus meskipun internet dunia mati total.

Langkah-langkah mekanismenya berjalan sebagai berikut:

Langkah A (Instan Offline Save): Begitu siswa mengklik jawaban A, sistem dalam waktu di bawah 3 milidetik langsung mengunci jawaban tersebut ke dalam IndexedDB lokal (database bawaan Google Chrome/Safari yang tersimpan di harddisk siswa). Di tahap ini, jawaban siswa sudah aman 100% dari mati lampu komputer.

Langkah B (Micro-Buffering & Scheduler): Sebuah background service worker di dalam browser secara konstan menyapu IndexedDB lokal setiap 3 detik. Ia mengumpulkan jawaban-jawaban baru yang belum tersinkronisasi, menggabungkannya ke dalam paket data mikro yang sangat kecil, lalu mengirimkannya ke server di latar belakang secara asinkron (background HTTP Sync).

Mekanisme antrean ini secara radikal memangkas beban server database hingga 90% karena ribuan request individu yang acak kini dikonsolidasikan menjadi satu request berkala yang rapi. Berikut adalah implementasi inti algoritma mesin Sinkronisasi Mikro Klikto ID:

micro-sync-engine.ts
// Mesin Sinkronisasi Mikro Klikto ID untuk Aplikasi Ujian CBT
export class MicroSyncEngine {
  private dbName: string = "cbt_exam_db";
  private isSyncing: boolean = false;

  constructor() {
    this.initializeLocalDatabase();
  }

  private async initializeLocalDatabase() {
    // Membuka koneksi ke IndexedDB lokal browser siswa
    return new Promise((resolve) => {
      const request = indexedDB.open(this.dbName, 1);
      request.onupgradeneeded = (event: any) => {
        const db = event.target.result;
        if (!db.objectStoreNames.contains("answers")) {
          db.createObjectStore("answers", { keyPath: "questionId" });
        }
      };
      request.onsuccess = () => resolve(true);
    });
  }

  // 1. Simpan Jawaban ke Browser Lokal dalam kurun < 3ms (Instant & Anti Mati Lampu)
  public async saveAnswerLocally(questionId: number, selectedOption: string) {
    const dbRequest = indexedDB.open(this.dbName, 1);
    dbRequest.onsuccess = (event: any) => {
      const db = event.target.result;
      const transaction = db.transaction(["answers"], "readwrite");
      const store = transaction.objectStore("answers");

      store.put({
        questionId,
        selectedOption,
        synced: 0, # Status 0 berarti belum tersinkronisasi ke server pusat
        updatedAt: Date.now()
      });

      transaction.oncomplete = () => {
        // Memicu sinkronisasi asinkron di latar belakang
        this.triggerBackgroundSync();
      };
    };
  }

  // 2. Scheduler Asinkron untuk Sinkronisasi ke Server Pusat
  public async triggerBackgroundSync() {
    if (this.isSyncing) return;
    this.isSyncing = true;

    const dbRequest = indexedDB.open(this.dbName, 1);
    dbRequest.onsuccess = (event: any) => {
      const db = event.target.result;
      const transaction = db.transaction(["answers"], "readonly");
      const store = transaction.objectStore("answers");
      const getUnsynced = store.getAll();

      getUnsynced.onsuccess = async () => {
        const allItems = getUnsynced.result;
        const unsyncedItems = allItems.filter(item => item.synced === 0);

        if (unsyncedItems.length === 0) {
          this.isSyncing = false;
          return;
        }

        try {
          // Mengirim seluruh draf jawaban yang belum tersinkronisasi dalam 1 request mikro
          await fetch("/api/exam/sync-answers", {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({ answers: unsyncedItems })
          });

          // Jika sukses, ubah status sinkronisasi di database lokal menjadi Sukses (1)
          await this.markAsSynced(unsyncedItems.map(item => item.questionId));
        } catch (error) {
          console.warn("Koneksi Internet Putus. Jawaban tetap aman tersimpan di browser lokal.");
        } finally {
          this.isSyncing = false;
        }
      };
    };
  }

  private async markAsSynced(questionIds: number[]) {
    const dbRequest = indexedDB.open(this.dbName, 1);
    dbRequest.onsuccess = (event: any) => {
      const db = event.target.result;
      const transaction = db.transaction(["answers"], "readwrite");
      const store = transaction.objectStore("answers");

      questionIds.forEach(id => {
        const getReq = store.get(id);
        getReq.onsuccess = () => {
          const item = getReq.result;
          if (item) {
            item.synced = 1;
            store.put(item);
          }
        };
      });
    };
  }
}

3. Ketahanan Sinyal Internet Putus Total (Zero Network Resilience)

Apa yang terjadi jika router Wi-Fi sekolah hang atau kabel LAN terputus selama 15 menit saat ujian?

Di dalam sistem ujian Klikto ID, peserta ujian tidak akan melihat halaman error putih browser yang menakutkan. Di pojok kanan atas layar mereka, sebuah lampu indikator kecil berwarna kuning akan menyala bertuliskan 'Koneksi Offline - Jawaban Anda Tersimpan Aman di Komputer'.

Siswa tetap bisa melanjutkan membaca soal demi soal dan menjawabnya hingga selesai tanpa hambatan. Ketika teknisi sekolah berhasil memperbaiki jaringan internet dan sinyal kembali menyala, background task asinkron kami seketika mendeteksi pemulihan sinyal dan langsung menyapu seluruh timbunan jawaban di IndexedDB lokal untuk disalurkan ke server pusat dalam hitungan detik. Dari sudut pandang siswa, tidak ada hambatan, tidak ada data yang hilang, dan tidak ada waktu berharga yang terbuang sia-sia.

Perbandingan Keandalan Data: CBT Standar vs. CBT Klikto ID

Matriks evaluasi performa operasional dan tingkat keandalan sistem.

Aspek OperasionalManual / SebelumKlikto ID Way
Saat Terjadi Pemadaman ListrikSeluruh jawaban siswa sejak nomor awal hilang bersih dari memori RAM komputer yang matiJawaban aman terkunci di IndexedDB harddisk siswa, otomatis dimuat kembali saat PC menyala
Beban Request Menulis DatabaseSangat ekstrim (1 request tulis per klik jawaban dari ribuan siswa serentak, rawan database deadlock)Sangat ringan (jawaban dikonsolidasikan menjadi 1 paket request berkala per 3-5 detik)
Indikasi Status KoneksiTidak ada indikator. Siswa baru tahu internet putus saat mengklik tombol dan halaman memunculkan errorLampu indikator real-time mendeteksi status sinyal internet, memberikan rasa tenang secara visual bagi siswa
Persentase Kehilangan JawabanHingga 15-30% kasus kehilangan data jawaban di sekolah dengan kondisi listrik & Wi-Fi tidak stabilJaminan 100% data terselamatkan utuh tanpa ada satu pun jawaban siswa yang hilang (Zero Data Loss)
CBT & High Concurrency Specialists

Butuh Sistem Ujian Online Skala Besar yang Aman dari Mati Lampu?

Jangan biarkan kepanikan siswa merusak jalannya ujian penting instansi Anda. Klikto ID siap membangun atau mengoptimalkan platform CBT sekolah/bimbel/instansi Anda agar memiliki keandalan setingkat militer dengan jaminan data aman.

Hubungi Kami