Sebuah solusi database yang kreatif telah memicu diskusi di komunitas developer setelah seorang engineer membagikan bagaimana mereka mencegah potensi kegagalan sistem dengan memanfaatkan fitur yang terabaikan dari signed integer. Kisah ini menyoroti bagaimana terkadang pendekatan yang tidak konvensional dapat memberikan waktu yang krusial untuk perbaikan yang tepat.
Situasi ini melibatkan sebuah platform kalender yang mendekati ambang batas kritis: primary key dari tabel occurrence mereka hampir mencapai 2,147,483,647, nilai maksimum untuk signed 32-bit integer. Dengan dua belas tahun data kalender dan jutaan pengguna yang bergantung pada sistem tersebut, kehabisan ruang primary key akan menjadi bencana.
Batas Integer Bertanda 32-bit:
- Nilai positif maksimum: 2,147,483,647
- Nilai negatif minimum: -2,147,483,648
- Total nilai unik yang tersedia: ~4,3 miliar
- Waktu yang diperoleh dengan menggunakan ruang negatif: Hingga 3 tahun (pembersihan yang direncanakan: 6-8 bulan)
Solusi Cerdas yang Membagi Pendapat
Sementara tim telah mempersiapkan migrasi yang tepat ke 64-bit integer, mereka menemukan hambatan besar hanya seminggu sebelum deployment. Integer key tersebut terekspos di public API, dan mengubahnya bisa merusak integrasi pelanggan. Departemen IT universitas, yang sering bertanggung jawab atas integrasi ini, biasanya memiliki backlog yang diukur dalam bulan bukan minggu.
Solusinya sangat sederhana namun elegan: reset sequence untuk dimulai dari -2,147,483,648 dan melanjutkan auto-increment melalui ruang bilangan negatif. Pendekatan ini secara efektif menggandakan ruang key yang tersedia tanpa mengubah tipe data atau merusak integrasi yang sudah ada.
Reaksi komunitas terhadap pendekatan ini beragam namun sebagian besar positif. Beberapa developer bahkan tidak menganggapnya sebagai hack yang aneh, mencatat bahwa bilangan negatif sama validnya dengan bilangan positif untuk unique identifier. Namun, yang lain menunjukkan potensi masalah dengan kode yang mengasumsikan primary key selalu meningkat, yang bisa menyebabkan masalah ketika sequence berpindah dari positif ke negatif.
Timeline Strategi Migrasi:
- Identifikasi masalah: 1,5 bulan sebelum deployment
- Penemuan dependensi API: 1 minggu sebelum deployment
- Implementasi negative key: Segera
- Migrasi yang direncanakan dengan benar: 6-8 bulan
- Waktu maksimum yang tersedia: 3 tahun
Technical Debt yang Dilakukan dengan Benar
Kisah ini beresonansi dengan developer karena mendemonstrasikan manajemen technical debt yang bertanggung jawab. Daripada terburu-buru melakukan perubahan yang berpotensi merusak, tim memilih solusi sementara yang memberi mereka tiga tahun waktu bernapas sambil berkomitmen untuk mengimplementasikan perbaikan yang tepat dalam enam hingga delapan bulan.
Solusi jangka panjang melibatkan tidak hanya upgrade ke 64-bit integer, tetapi juga mendesain ulang API untuk menggunakan opaque handle alih-alih mengekspos raw database key. Pendekatan ini mencegah dictionary attack dan memberikan developer lebih banyak fleksibilitas dalam implementasi backend tanpa mempengaruhi konsumen API.
Key perlu menjadi nomor unik, -1 dan 1 adalah dua nomor yang berbeda.
Pelajaran untuk Desain Database
Insiden ini menyoroti beberapa pertimbangan penting untuk arsitek database. Eksposur internal database identifier melalui public API menciptakan coupling antara detail implementasi dan kontrak eksternal. Ketika API tersebut digunakan oleh organisasi dengan proses perubahan yang lambat, coupling ini menjadi lebih bermasalah.
Kisah ini juga mendemonstrasikan pentingnya memantau batas sistem jauh-jauh hari. Meskipun tim telah mengidentifikasi batas yang mendekat dan mempersiapkan solusi, ketergantungan API ditemukan hampir terlambat. Identifikasi yang lebih awal bisa memberikan lebih banyak waktu untuk komunikasi pelanggan dan perencanaan migrasi.
Solusi tersebut bekerja dengan sempurna, memungkinkan transisi pelanggan yang mulus dan pembersihan yang tepat dalam jangka waktu yang direncanakan. Ini berfungsi sebagai pengingat bahwa terkadang solusi engineering terbaik bukanlah yang paling elegan, tetapi yang menyelesaikan masalah langsung sambil menciptakan ruang untuk perbaikan jangka panjang yang tepat.
Referensi: The best worst hack that saved our bacon
