Daripada Supabase kepada Go untuk Produksi: Bulan 1
Dua bulan lalu, saya membina Info Links. Ia merupakan platform sumber percuma untuk pelajar di Le CNAM Lebanon. Ia melayani 300 pelajar dan 50 kursus.
Pada mulanya, bahagian backend menggunakan Supabase secara terus. Ia berfungsi, tetapi saya tidak dapat mempertahankannya dalam temu duga teknikal. Matlamat saya untuk Bulan 1 bukan sekadar mempelajari sintaks Go. Saya mahu membina sistem yang akan dihormati oleh jurutera kanan.
Berikut adalah apa yang telah berubah:
- Backend berpindah daripada hanya menggunakan Supabase kepada Go REST API.
- Kod sumber berkembang daripada 6 fail kepada lebih 100 fail.
- Saya melaksanakan seni bina berlapis: API, Service, Repository, dan Middleware.
- Saya menambah dependency injection untuk menghapuskan pemboleh ubah global.
- Saya menulis 6 Architecture Decision Records (ADR) untuk menjelaskan pilihan saya.
Struktur baharu ini mengikut laluan yang jelas: HTTP request → Router → Handler → Service → Repository → Postgres.
Saya memberi tumpuan kepada kesediaan produksi melalui penambahan berikut:
- Structured logging dengan slog.
- Semakan kesihatan (health checks) dan metrik.
- Had kadar (rate limiting) untuk mengelakkan penyalahgunaan.
- CI dengan pengesanan race dan linting.
- Binaan Docker pelbagai peringkat (multi-stage).
- Liputan ujian yang tinggi (93% untuk API dan 96% untuk Service).
Saya juga melakukan ujian beban dengan k6. Saya menghantar 4,400 permintaan sesaat ke API. Had kadar (rate limiter) menyekat trafik berlebihan dalam masa kurang daripada 1ms. Sistem tidak crash.
Satu pengajaran besar adalah peraturan saya dalam menggunakan AI. Saya meluangkan masa 45 minit setiap hari bekerja tanpa AI. Saya menggunakan masa ini untuk melakukan refactor kod atau menjelaskan sesuatu fail dengan kuat. Jika saya tidak dapat menjelaskannya, saya tidak akan melancarkannya. Ini merapatkan jurang antara "ia berfungsi" dan "saya faham mengapa ia berfungsi."
Kejuruteraan kini selaras dengan misi tersebut. Produk ini kekal percuma untuk pelajar, tetapi bahagian backend kini bertaraf temu duga.
Bulan depan, saya akan membina perkhidmatan Go sokongan untuk menyemak kesihatan pautan menggunakan goroutines dan context.
Laman web langsung: infolinks.app GitHub: github.com/MohamadObeid9/Info_Links Telegram: @Info_Links9