dbtool-cli: Otomatisasi Operasional Database dengan Go

dbtool-cli: Otomatisasi Operasional Database dengan Go

Daftar Isi

Saya membuat user database secara manual jauh lebih lama daripada yang pantas saya akui.

Seorang developer meminta sebuah schema. Saya membuka terminal, mengingat lagi apakah yang ini PostgreSQL atau MariaDB, mencari sintaks grant-nya sekali lagi, lalu mengetiknya. Sepuluh menit, dua kali sepekan, tanpa habis.

Backup lebih buruk lagi. Saya punya shell script yang menjalankan mysqldump lewat cron, dan script itu bekerja tepat sebagaimana ditulis: menyimpan setiap backup, selamanya, sampai satu disk penuh dan sesuatu yang lebih penting tumbang pukul tiga pagi.

Kedua persoalan itu sebenarnya satu persoalan yang sama. Pekerjaan yang seharusnya dilakukan mesin.

Maka saya menulis sebuah CLI

dbtool-cli adalah satu command-line tool, ditulis dengan Go dan Cobra, yang memperlakukan administrasi database sebagai sesuatu yang Anda deklarasikan alih-alih sesuatu yang harus Anda ingat.

Provisioning

Satu perintah membuat user, schema, dan hak akses yang dibatasi. Perbedaan antar driver disembunyikan di balik sebuah Go interface, sehingga PostgreSQL dan MariaDB tampak identik dari luar.

User baru mendapat hak akses paling sempit yang masih memungkinkan mereka bekerja. Bukan karena saya keras, tetapi karena saya sudah cukup sering mewarisi database yang setiap akun aplikasinya praktis setara root.

Backup yang mengatakan kebenaran

Bagian inilah yang paling saya pedulikan.

Tool ini memverifikasi integritas arsip sebelum menyatakan berhasil. Sebuah proses backup yang melaporkan “selesai” tanpa memeriksa apa pun lebih buruk daripada tidak ada backup sama sekali, karena ia memberi Anda rasa tenang yang belum Anda dapatkan.

Retensi adalah kebijakan, bukan harapan. Simpan tujuh harian dan empat mingguan, lalu rotasinya berjalan sendiri. Penggunaan disk mendatar alih-alih terus memanjat sampai ada yang rusak.

Mengapa Go

Tiga alasan, dan portabilitas adalah yang terbesar.

Ia dikompilasi menjadi satu binary statis. Tidak ada runtime yang perlu dipasang di server, tidak ada konflik dependensi dengan versi Python apa pun yang kebetulan dibawa OS. Salin file-nya, jalankan.

Ia cukup cepat sehingga tidak ada yang menyadari saat ia berjalan, dan itu lebih berarti daripada kedengarannya ketika sebuah tool dipanggil dari cron pada mesin yang memang sudah sibuk.

Dan ia bertipe. Script bash lama saya gagal secara diam-diam dan penuh kreativitas. Go gagal saat kompilasi, di editor saya, tempat kegagalan masih murah harganya.

Apa yang berubah

Developer sekarang menyiapkan environment mereka sendiri. Permintaan itu tidak lagi sampai ke saya, dan itulah kemenangan sesungguhnya: bukan waktu yang dihemat, melainkan antrean yang berhenti ada.

Penyimpanan backup kini mendatar dan bisa diperkirakan. Kebijakan retensi menanganinya, jadi tidak ada yang perlu mengingat untuk memangkas apa pun.

Dan ada satu sintaks perintah, apa pun database di bawahnya. Kedengarannya kemudahan kecil, sampai Anda menyadari bahwa banyak hambatan dalam pekerjaan operasional sebenarnya bukan soal kesulitan, melainkan biaya kecil yang terus-menerus dari menahan dua dialek yang sedikit berbeda di kepala lalu memilih yang salah ketika sedang lelah.

Saya tidak lagi mencari-cari sintaks grant.

Lihat source code di GitHub

call to action

Siap membangun proyek bersama saya?

Saya siap membantu membangun, mengembangkan, dan meluncurkan proyek Anda berikutnya — kirim pesan sekarang dan ayo kita mulai!

Mulai Sekarang