Masalah #
Sistem GPS fleet tracking yang menangani pelacakan kendaraan secara real-time berjalan di atas Laravel (PHP) dengan MySQL. Seiring pertumbuhan jumlah device dan volume data lokasi, sistem mengalami bottleneck:
- Respons time yang semakin lambat pada endpoint reporting dan history
- Koneksi database yang sering terkuras oleh query kompleks di tabel device data yang sangat besar
- Maintenance yang mahal — setiap perubahan butuh understanding PHP codebase yang sudah kompleks
Solusi #
Konversi total backend dari Laravel → Go menggunakan Clean Architecture pattern, dengan migrasi database dari MySQL → PostgreSQL + TimescaleDB.
Arsitektur #
Request → Controller → UseCase → Repository → PostgreSQL/TimescaleDB
↕
Gateway → External API / Kafka
Setiap layer punya tanggung jawab yang jelas:
- Entity: 33 domain model (device, geofence, vehicle, driver, invoice, dll)
- UseCase: 40 business logic layer
- Repository: 82 file data access (read/write split, master-slave aware)
- Route: 370+ API endpoint
Stack Teknis #
| Komponen | Teknologi |
|---|---|
| Language | Go 1.24 |
| HTTP Framework | GoFiber v2 |
| Database | PostgreSQL + TimescaleDB (hypertable untuk device data) |
| ORM/Driver | pgx/v5 (raw SQL performance) |
| Messaging | Apache Kafka (Sarama) |
| Cache | Ristretto (in-memory) |
| Migration | golang-migrate |
| Validation | go-playground/validator |
| Auth | JWT + unified auth |
Fitur Utama #
- Real-time tracking — data lokasi device diproses dan disimpan ke TimescaleDB hypertable
- Geofencing — alert masuk/keluar area, schedule geofence
- Dashboard & reporting — device summary, history route, fuel monitoring
- Fleet management — vehicle, driver, device assignment
- Billing — invoice, partner, payment integration (BCA VA)
- Multi-tenancy — enterprise, user group, shared link
- IoT Hub — device command, incident tracking
Hasil #
- ~194K lines of Go code menggantikan codebase PHP
- 370+ API endpoint dengan full parity terhadap versi Laravel
- Read/write split otomatis — query berat dialihkan ke slave DB
- TimescaleDB hypertable untuk tabel device data yang menerima jutaan record per hari
- Build time dan binary yang efisien — single binary deployment via Docker
Pelajaran #
- Clean Architecture membantu migrasi bertahap — setiap endpoint bisa dikonversi satu per satu tanpa breaking changes, memungkinkan v2 (Laravel) dan v3 (Go) berjalan paralel selama transisi
- pgx/v5 > ORM untuk high-throughput — kontrol penuh terhadap SQL query memberikan performa yang lebih predictable dibanding ORM abstraction
- TimescaleDB mengubah permainan — hypertable + continuous aggregate menggantikan query reporting yang sebelumnya butuh menit menjadi detik