Birkaç geliştirici arasında oldukça sıcak bir tartışma yaratan bir uygulamam var.
Temel olarak, bir web katmanına ve bir arka uç katmanına ayrılır. Web katmanı, bilgileri basit bir web formuyla toplar, bu verileri bir JSON belgesi (kelimenin tam anlamıyla bir .json dosyası) olarak arka uç tarafından kullanılan bir izleme klasörüne saklar. Arka uç bu klasörü birkaç saniyede bir yoklar, dosyayı alır ve işlevlerini yerine getirir.
Dosyaların kendileri çok basittir (yani tüm dize verileri, yuvalama yok) ve en büyüklerinde yaklaşık 1-2k, sistem zamanının çoğunu boşta geçirir (ancak herhangi bir zamanda 100 mesaja kadar patlar). Arka uç işleme adımı mesaj başına yaklaşık 10 dakika sürer.
Argüman, bir geliştirici dosya sistemini mesajlaşma katmanı olarak kullanmanın kötü bir çözüm olduğunu öne sürdüğünde, ilişkisel veritabanı (MySQL), noSQL veritabanı (Redis) veya düz REST API çağrısı gibi bir şey kullanılması gerektiğinde ortaya çıkar.
Redis'in sıralı mesaj işleme için kuruluşun başka bir yerinde kullanıldığı unutulmamalıdır.
Duyduğum argümanlar aşağıdaki gibi çöktü
Düz dosyalar lehine:
Düz dosyalar, diğer tüm çözümlerden daha güvenilirdir, çünkü dosya yalnızca "watch" klasöründen, alındıktan sonra "işleme" klasörüne ve son olarak da tamamlandığında "done" klasörüne taşınır. Zaten başka şeyleri kıracak çok düşük seviyeli hataların engellenmesi mesajlarının kaybolma riski yoktur.
Düz dosyaları anlamak için daha az teknik karmaşıklık gerekir - sadece
cat
. Yazmak için sorgu yok, yanlışlıkla bir iletiyi kuyruktan atma ve sonsuza kadar gitme riski yok.Her dilin standart kitaplığının bir parçası olduğundan, dosya yönetimi kodu programlama açısından veritabanı API'lerinden daha basittir. Bu, kod tabanının genel karmaşıklığını ve getirilmesi gereken üçüncü taraf kod miktarını azaltır.
YAGNI prensibi düz dosyalar şu anda sadece iyi çalıştığını devletler hiçbir böylece bırakın, daha karmaşık bir çözüme geçmeyi ihtiyacını orada gösterdi oluyor.
Bir veritabanı lehine:
Veritabanını ölçeklemek, dosyalarla dolu bir dizinden daha kolaydır
Düz dosyaların birisinin "tamamlandı" dosyasını tekrar "watch" dizinine kopyalaması riski vardır. Bu uygulamanın (sanal makine yönetimi) doğası gereği, bu felaket veri kaybına neden olabilir.
T / S için daha fazla teknik karmaşıklık gerektiren uygulama, eğitimsiz personelin sadece şeylere atarak bir şeyi berbat etme olasılığının düşük olduğu anlamına gelir.
DB bağlantı kodu, özellikle Redis gibi bir şey için, en azından standart kütüphane dosya yönetimi işlevleri kadar sağlamdır.
DB bağlantı kodu, geliştiricinin bakış açısıyla gözle görülür şekilde (işlevsel değilse), dosya manipülasyonundan daha yüksek olduğundan.
Görebildiğim kadarıyla, her iki geliştiricinin de birçok geçerli puanı var.
Yani bu iki kişiden, dosya yanlısı ya da yan yana veritabanları yanlısı, hangisi yazılım mühendisliği en iyi uygulaması ile daha uyumludur ve neden?