Skip to content
← Blog

Mengapa Analytics Tidak Boleh Menjatuhkan Website

Arsitektur website dengan analytics yang dipisahkan dari jalur respons utama
Fitur observability harus mengamati layanan, bukan menjadi ketergantungan yang menjatuhkannya.

Kasus sederhana: setiap page load memanggil track_page_view(). Ketika tabel page_views hilang, exception database tidak ditangkap dan seluruh website gagal. Halaman sebenarnya sehat; fitur sekunder membuatnya tidak tersedia.

Critical path vs optional path#

Critical path meliputi routing, otorisasi, mengambil content, dan menghasilkan respons. Analytics, audit non-keamanan, recommendation, dan counter biasanya optional. Kegagalan optional path harus terisolasi.

Perbaikan minimum: fail-open terukur#

function track_page_view(PDO $db, string $path): void
{
    try {
        $stmt = $db->prepare(
            'INSERT INTO page_views(page_path, ip_hash) VALUES (?, ?)'
        );
        $stmt->execute([$path, privacy_safe_ip_hash()]);
    } catch (Throwable $e) {
        error_log('[analytics] dropped page view: ' . $e->getCode());
        // Jangan melempar kembali exception ke request pengguna.
    }
}

Jangan log data sensitif atau pesan database mentah ke output pengguna. Tambahkan counter internal agar kegagalan tidak diam-diam berlangsung berbulan-bulan.

Desain lebih kuat: outbox atau queue#

Browser request → Render page → Emit event → Queue/buffer → Analytics worker → Store

Request tidak menunggu database analytics. Worker dapat batch insert, retry dengan backoff, dan masuk dead-letter queue bila event terus gagal.

Failure budget#

KondisiRespons halamanAnalytics
Tabel tersedia200Tersimpan
Tabel hilang200Dropped + alert
Queue penuh200Sample/drop terukur
Database utama mati503Tidak relevan

Privasi sejak desain#

Kumpulkan hanya yang dibutuhkan. Hash IP dengan secret yang dirotasi, truncation bila cukup, retention pendek, dan jangan menganggap hash tanpa secret sebagai anonimisasi. Hindari menyimpan URL query yang mungkin mengandung token/email.

Pengujian yang membuktikan isolasi#

  1. Rename tabel analytics di database test.
  2. Request homepage.
  3. Pastikan status tetap 200 dan content lengkap.
  4. Pastikan satu metric/log kegagalan dibuat.
  5. Pulihkan tabel dan pastikan tracking kembali tanpa restart.

Aturan arsitektur: jika bisnis tetap dapat melayani user tanpa sebuah fitur, fitur itu tidak boleh menjadi single point of failure pada request path.

Sampling dan backpressure#

Ketika buffer mendekati kapasitas, jangan membiarkan memory tumbuh tanpa batas. Terapkan sampling, batas queue, dan drop counter. Page views dapat disampling; security audit events biasanya tidak boleh diperlakukan sama. Klasifikasikan event berdasarkan kebutuhan durability.

Data contract event#

{
  "event": "page_view",
  "schema_version": 1,
  "occurred_at": "2026-08-11T13:04:22+07:00",
  "path": "/blog/example",
  "request_id": "req_...",
  "visitor_bucket": "rotating-hash"
}

Schema version mencegah worker lama salah membaca producer baru. Validasi panjang path dan hapus parameter sensitif sebelum event keluar dari request.

SLO terpisah#

Website dapat memiliki availability 99,9%, sedangkan analytics delivery 99%. Jangan menyatukan keduanya. Alert analytics ketika drop rate melewati budget, tetapi jangan otomatis mematikan halaman publik.

Pertanyaan desain#

Apa yang terjadi bila analytics database lambat 30 detik? Jawaban yang baik: request user tetap selesai cepat, event masuk buffer atau di-drop terukur, operator mendapat alert, dan tidak ada retry storm.

💬 Comments (0)

No comments yet. Be the first to share your thoughts!

Related reading

Aug 11, 2026 · 3 min Postmortem: Menangani “Too Many Connections” pada MySQL Contoh postmortem tanpa menyalahkan individu: timeline, diagnosis process list, connection lifetime, mitigasi, dan tindakan pencegahan yang terukur. Aug 11, 2026 · 3 min Stored XSS dan Rich Text Editor: Cara Membuat Sanitizer HTML yang Aman Membedakan escaping dan sanitization, menyusun allowlist tag/attribute/URL, serta menguji payload stored XSS pada rich text editor. Aug 11, 2026 · 2 min Membangun Website PHP Aman Tanpa Framework Studi kasus praktis membangun CSRF token, session hardening, prepared statement, upload validation, CSP, rate limiting, dan output encoding pada PHP native.
Now Playing Loading...