Saya punya aplikasi yang telah menghasilkan diskusi yang agak panas antara beberapa pengembang.
Pada dasarnya, itu dibagi menjadi lapisan web dan lapisan backend. Lapisan web mengumpulkan informasi dengan formulir web sederhana, menyimpan data ini sebagai dokumen JSON (secara harfiah file .json) ke dalam folder arloji yang digunakan oleh bagian belakang. Bagian belakang polling folder ini setiap beberapa detik, mengambil file, dan menjalankan fungsinya.
File-file itu sendiri sangat sederhana (yaitu semua data string, tidak ada sarang), dan sekitar 1-2k pada ukuran terbesarnya, dengan sistem menghabiskan sebagian besar waktunya menganggur (tetapi meledak hingga 100 pesan pada waktu tertentu). Langkah pemrosesan backend memakan waktu sekitar 10 menit per pesan.
Argumen muncul ketika salah satu pengembang menyarankan bahwa menggunakan sistem file sebagai lapisan pesan adalah solusi yang buruk, ketika sesuatu seperti database relasional (MySQL), database noSQL (Redis), atau bahkan panggilan API REST sederhana harus digunakan sebagai gantinya.
Perlu dicatat bahwa Redis digunakan di tempat lain dalam organisasi untuk penanganan pesan yang antri.
Argumen yang saya dengar rusak sebagai berikut
Dalam mendukung file datar:
File flat lebih dapat diandalkan daripada solusi lain, karena file hanya dipindahkan dari folder "watch", ke folder "processing" setelah diambil, dan akhirnya ke folder "selesai" ketika selesai. Tidak ada risiko hilangnya pesan kecuali bug tingkat sangat rendah yang akan memecah hal-hal lain.
File flat membutuhkan kecanggihan teknis yang lebih sedikit untuk mengerti - cukup
cat
itu. Tidak ada pertanyaan untuk ditulis, tidak ada risiko secara tidak sengaja muncul pesan dari antrian dan setelah itu hilang selamanya.Kode manajemen file lebih sederhana daripada API basis data dari sudut pandang pemrograman, karena itu bagian dari pustaka standar setiap bahasa. Ini mengurangi keseluruhan kompleksitas basis kode dan jumlah kode pihak ketiga yang harus dimasukkan.
The prinsip YAGNI menyatakan bahwa file flat bekerja dengan baik sekarang, ada tidak ada menunjukkan kebutuhan untuk berubah untuk solusi yang lebih rumit, jadi biarkan.
Dalam Mendukung database:
Lebih mudah untuk skala database dari direktori yang penuh dengan file
File flat memiliki risiko seseorang menyalin file "selesai" kembali ke direktori "watch". Karena sifat aplikasi ini (manajemen mesin virtual), ini dapat mengakibatkan hilangnya data yang sangat besar.
Membutuhkan kecanggihan teknis yang lebih untuk T / S aplikasi berarti bahwa staf yang tidak berpendidikan cenderung mengacaukan sesuatu dengan hanya menyodok sesuatu.
Kode koneksi DB, terutama untuk sesuatu seperti Redis, setidaknya sekuat fungsi manajemen file perpustakaan standar.
Kode koneksi DB terlihat (jika tidak secara fungsional) lebih sederhana dari sudut pandang pengembang, karena levelnya lebih tinggi daripada manipulasi file.
Dari apa yang saya lihat, kedua pengembang memiliki banyak poin yang valid.
Jadi dari dua orang ini, pengembang pro-file, atau pengembang basis data, mana yang lebih sesuai dengan praktik terbaik rekayasa perangkat lunak, dan mengapa?