Hari Saat Kami Memperbaiki Pipeline Pendaftaran Kami
Angka pendaftaran kami tumbuh setiap minggu. Tim merasa bersemangat. Namun, datanya terasa salah. Pengguna tidak pernah kembali. Alamat email terlihat aneh. Tingkat aktivasi kami menurun.
Saya melihat datanya. Saya tidak menemukan pertumbuhan. Saya menemukan gangguan (noise).
Masalahnya
Saya menjalankan kueri untuk mengelompokkan pendaftaran berdasarkan alamat IP. Satu alamat IP mendaftarkan ratusan akun dalam 24 jam. Ia menggunakan sidik jari browser (browser fingerprint) yang sama. Sebuah skrip menyerang endpoint registrasi kami. Ia menggunakan domain email sekali pakai (throwaway email domains). Itu adalah bot, bukan manusia.
Pipeline pendaftaran kami terbuka lebar.
Solusinya
Kami membangun tiga lapisan perlindungan dalam satu sprint.
Lapisan 1: Throttling
Kami menggunakan dua jenis pembatasan laju (rate limiting).
- Per-IP throttling: Kami membatasi upaya pendaftaran dari satu IP dalam jendela waktu yang singkat.
- Per-domain throttling: Kami membatasi pendaftaran dari domain email yang sama dalam jendela waktu yang lebih lama. Ini menghentikan bot yang menggunakan IP berbeda dengan domain yang sama.
Lapisan 2: Daftar Blokir (Blocklists)
- Domain email yang diblokir: Kami menolak pendaftaran apa pun yang menggunakan domain email sekali pakai.
- User agent yang diblokir: Kami menolak permintaan dari alat non-browser. Kami tidak memberikan detail apa pun kepada penyerang.
Lapisan 3: Daftar Blokir IP
Beberapa IP bersifat persisten. Mereka menyalahgunakan berbagai bagian sistem kami. Kami menggunakan daftar blokir keras (hard blocklist). IP ini ditolak untuk setiap permintaan. Middleware menghentikan mereka seketika.
Hasilnya
Sebelum perbaikan:
- Satu IP membuat ratusan akun dalam sehari.
- Domain sekali pakai menyusun sebagian besar pendaftaran.
- Akun palsu menurunkan tingkat aktivasi kami.
- Data kami salah.
Setelah perbaikan:
- Registration farming turun menjadi nol.
- Pendaftaran dengan domain sekali pakai terhenti.
- Angka pendaftaran menunjukkan niat manusia yang nyata.
- Tingkat aktivasi kami pulih.
Pelajaran yang Dipetik
- Sinyal lebih penting daripada volume. Bot membuat metrik seperti retensi dan pendapatan menjadi tidak dapat diandalkan.
- Perbaikan kode kecil dapat menyelesaikan masalah besar. Kami menggunakan tiga mekanisme sederhana.
- Lapisan itu perlu. Satu batasan saja tidak cukup. Kombinasi akan mencakup lebih banyak hal.
- Kendalikan respons Anda. Berikan umpan balik kepada pengguna yang sah. Berikan keheningan kepada aktor jahat.
Pertumbuhan bukan hanya tentang mendapatkan pengguna. Ini tentang mendapatkan pengguna yang nyata. Keputusan produk Anda bergantung pada data yang baik. Data tersebut dimulai dari endpoint registrasi Anda.
Sumber: https://dev.to/ogeobubu/the-day-we-fixed-our-signup-pipeline-3664