Mencentang 650.000.000 kotak centang: menghadapi popularitas yang tak terduga
26 Juni 2024, situs web One Million Checkboxes (OMCB) diluncurkan
- Situs dengan 1 juta kotak centang global, dan ketika sebuah kotak dicentang, perubahan langsung tercermin ke semua pengguna
- Dalam 30 menit setelah peluncuran, ribuan pengguna mencentang jutaan kotak centang
- Trafik datang dari Hacker News, /r/InternetIsBeautiful, Mastodon, Twitter, dan lainnya
- Juga diliput oleh Washington Post dan New York Times
- Pada hari pertama, lebih dari 50 juta kotak centang dicentang
- Hingga situs ditutup dua minggu kemudian, lebih dari 650 juta kotak centang telah dicentang
Arsitektur awal
- Status kotak centang disimpan sebagai 1 juta bit (125KB)
- Klien menggunakan bitset untuk merender kotak centang dan memberi tahu server tentang status centang
- Server menggunakan Redis untuk memperbarui bit dan menyiarkannya ke semua klien
- Konten statis disajikan melalui nginx, sementara server Flask menangani status bitset dan koneksi WebSocket
- Redis berperan sebagai penyimpanan status sekaligus message queue
Prinsip penskalaan
- Batas biaya: menghitung biaya secara matematis agar bisa menskalakan secara serverless tanpa bangkrut
- Menerima solusi jangka pendek: mengasumsikan popularitas situs hanya sementara dan memilih solusi yang cepat
- Menggunakan teknologi yang sederhana dan self-hosted: hanya menambahkan teknologi yang bisa dijalankan dan di-debug sendiri
- Mengejar kesenangan: memprioritaskan kesenangan dibanding uang
- Mempertahankan sifat global: menjaga status tetap global agar semua pengguna bisa langsung melihat perubahan
Hari pertama: popularitas meledak
- Dalam 30 menit, beban server melonjak tajam
- Menyalakan server tambahan untuk membagi beban
- Memperkenalkan pembaruan batch untuk mengatasi masalah koneksi Redis
- Meningkatkan instance Redis terkelola dari Digital Ocean
Tidak ada rencana semalaman
- Menyusun rencana sambil memamerkan game Pacman pengenalan wajah di kamp ITP
- Membawa iPad dan menyalakan server dari sana
- Mengembangkan aturan penamaan server sambil mengoperasikan 8 VM worker
- Mengurangi jumlah proses Flask dan memperbesar ukuran batch pembaruan untuk menurunkan beban
Masalah bandwidth
- Tidak mempertimbangkan harga bandwidth Digital Ocean
- Mengurangi frekuensi snapshot status dan memperkecil ukuran pembaruan
- Menggunakan utilitas
tc untuk membatasi jumlah data yang dikirim per detik
Hari kedua: terus bertumbuh
- Situs sempat down karena validasi input tidak dilakukan dengan benar
- Menambahkan replika Redis untuk membagi beban
- Proses Flask terus crash, sehingga dibuat skrip restart otomatis
Masalah pembaruan lama
- Terjadi masalah ketika klien menerapkan pembaruan lama sehingga status tampil salah
- Menambahkan timestamp untuk menjamin urutan pembaruan
Ditulis ulang dengan Go
- Backend ditulis ulang ke Go bersama seorang teman performance engineer
- Kinerja meningkat secara signifikan
- Serangan DDOS ditangkal melalui CloudFlare
Penutupan situs
- Diubah agar kotak centang membeku jika tidak segera di-uncheck
- Menggunakan Redis untuk mengelola status beku
- Situs ditutup setelah dua minggu
Hal yang dipelajari
- Ini adalah pengalaman kedua merilis server dengan backend yang "nyata" ke internet publik
- Memilih solusi jangka pendek ternyata merupakan keputusan yang baik
- Kembali menegaskan betapa kuatnya Redis dan nginx
- Menegaskan adanya hasrat orang-orang terhadap situs tempat mereka bisa berinteraksi secara anonim
Ringkasan GN⁺
- Artikel ini membahas masalah teknis yang muncul karena popularitas situs web yang tak terduga serta proses penyelesaiannya
- Menunjukkan bahwa arsitektur sederhana dengan Redis dan nginx pun dapat menangani trafik berskala besar
- Menjelaskan cara menyelesaikan masalah dengan cepat dan menstabilkan situs melalui solusi jangka pendek
- Membahas berbagai tantangan teknis seperti penulisan ulang ke Go dan pertahanan DDOS melalui CloudFlare
- Proyek serupa dengan fungsi sebanding antara lain proyek kolaboratif skala besar seperti /r/Place milik Reddit
1 komentar
Komentar Hacker News
Bisa belajar banyak pelajaran dan pengetahuan historis
Tulisan yang luar biasa! Selamat juga untuk situs webnya, tetapi bagian yang paling patut dibanggakan adalah tulisannya sendiri
Membangun situs ini dalam dua hari adalah pilihan yang bagus
Proyek terkait terbaru:
Proyek yang menarik
Tulisan yang hebat - saya penasaran berapa biayanya
Keyakinan bahwa orang-orang merindukan interaksi anonim yang terbatas terasa terkonfirmasi
Sebagai pemula backend, saya penasaran apakah ada arsitektur alternatif yang lebih sederhana untuk proyek ini
Keren!
Saya penasaran apakah game ini masih live