Kalau anda pernah alami error di Bacalah dalam beberapa bulan lepas — bab yang tak nak load, log masuk yang timeout, atau pembayaran yang berpusing-pusing tanpa kesudahan — artikel ini akan terangkan apa yang berlaku, dan apa yang kami buat untuk selesaikannya.
Masalah: Satu Worker Buat Semua Benda
Bacalah dahulunya berjalan di atas satu Cloudflare Worker tunggal. Satu proses sahaja yang handle semuanya: log masuk, baca bab, pembayaran, fungsi komuniti, dan task berjadual seperti hantar notifikasi emel.
Pelan percuma Cloudflare memberi setiap Worker hanya 10ms masa CPU setiap request. Kedengaran cukup — dan untuk benda mudah macam serve halaman statik, memang cukup. Tapi ciri-ciri web moden bukan mudah. Verify sesi login, query sejarah bacaan, decrypt data pembayaran, semak watermark — semua operasi ini bertimbun dengan cepat.
Bila trafik meningkat atau bila satu request yang berat tiba pada waktu yang salah, request akan melebihi had CPU dan Cloudflare akan tamatkan proses itu separuh jalan. Dari perspektif pengguna: halaman kosong, spinner yang tak habis-habis, atau mesej error yang membingungkan.
Paling menyusahkan ialah ia tak boleh dijangka. 95% masa semua berjalan lancar. Lepas tu tiba-tiba tidak — dan corak kegagalan tu memang susah nak predict.
Penyelesaian: Lima Worker Khusus
Kami susun semula keseluruhan backend kepada lima Cloudflare Worker berasingan, setiap satu bertanggungjawab untuk satu domain sahaja:
| Worker | Tanggungjawab |
|---|---|
| novel-auth | Log masuk, daftar, Google OAuth, urus sesi pengguna |
| novel-core | Baca bab, katalog novel, gambar kulit, penjadualan |
| novel-pay | Beli syiling, pengeluaran, integrasi Billplz & Finverse |
| novel-community | Komen, pengesahan KYC, alat penulis |
| novel-cron | Kerja berjadual: terbit bab, digest mingguan, laporan |
Setiap worker dapat peruntukan CPU sendiri. Apa yang dulunya lima tenant bersaing dalam satu peruntukan dikongsi, kini menjadi lima proses bebas, setiap satu disesuaikan dengan beban kerja sebenarnya.
Apa Kesannya Untuk Anda
Respons lebih laju. Setiap worker lebih ringan — ia hanya load kod yang diperlukan. Worker auth tak bawa logik pembayaran. Worker bacaan tak bawa kod hantar emel. Bundle lebih kecil bermakna startup lebih cepat.
Kegagalan terpencil. Sebelum pemisahan, kalau servis pembayaran kena CPU spike, ia boleh perlahankan proses baca bab. Sekarang timeout pembayaran kekal dalam novel-pay dan tak ada langsung kesan pada novel-core. Anda boleh teruskan membaca walaupun pembayaran sedang diproses.
Lebih mudah untuk dikembangkan. Bila Bacalah membesar, kami boleh naik taraf worker individu tanpa menyentuh yang lain. Bila kami perlukan lebih CPU untuk authentication (lebih ramai pengguna log masuk), kami naik taraf satu worker sahaja — bukan seluruh platform.
Keputusan
Selepas pemisahan ini:
- 5 Worker berjaya di-deploy, setiap satu lulus health check dalam masa beberapa saat selepas go-live
- Sifar error semasa migrasi — kami deploy worker sebelum alihkan trafik kepadanya
- Masa respons purata bertambah baik kerana bundle setiap worker 15–20% lebih kecil
Apa Seterusnya
Langkah berikut ialah tambah routing domain khas supaya setiap worker berada di bawah api.bacalah.app dan bukannya URL dalaman. Kami juga akan tambah amaran error per-worker supaya kami boleh kesan CPU spike sebelum pengguna sedar.
Bacalah masih dalam fasa pertumbuhan. Seni bina yang anda gunakan hari ini dibina untuk berkembang bersama platform ini.
— Pasukan Kejuruteraan Bacalah
Ditulis oleh
Redaksi Bacalah
Pasukan Kejuruteraan — Bacalah