У меня есть приложение, которое вызвало довольно жаркую дискуссию между парой разработчиков.
По сути, он разделен на веб-слой и внутренний слой. Веб-слой собирает информацию с помощью простой веб-формы и сохраняет эти данные в виде документа JSON (буквально в виде файла .json) в папку наблюдения, используемую серверной частью. Серверная часть опрашивает эту папку каждые несколько секунд, выбирает файл и выполняет свои функции.
Сами файлы очень просты (т. Е. Все строковые данные, без вложенности), и их размер составляет около 1-2 тыс., При этом система большую часть времени простаивает (но в каждый момент времени может обрабатываться до 100 сообщений). Шаг обработки бэкэнда занимает около 10 минут для каждого сообщения.
Аргумент приходит, когда один разработчик предполагает, что использование файловой системы в качестве уровня обмена сообщениями является плохим решением, когда вместо этого следует использовать что-то вроде реляционной базы данных (MySQL), базы данных noSQL (Redis) или даже простой вызов REST API.
Следует отметить, что Redis используется в других местах организации для обработки сообщений в очереди.
Аргументы, которые я слышал, распадаются следующим образом
В пользу плоских файлов:
Плоские файлы более надежны, чем любое другое решение, поскольку файл перемещается только из папки «watch», в папку «processing» после его получения и, наконец, в папку «done» после завершения. Существует нулевой риск исчезновения сообщений, за исключением ошибок очень низкого уровня, которые в любом случае могут сломать другие вещи.
Плоские файлы требуют меньшей технической сложности, чтобы понять - только
cat
это. Нет запросов для записи, нет риска случайного удаления сообщения из очереди и его исчезновения навсегда.Код управления файлами проще, чем API баз данных с точки зрения программирования, поскольку он является частью стандартной библиотеки каждого языка. Это уменьшает общую сложность кодовой базы и объем стороннего кода, который необходимо ввести.
Принцип YAGNI гласит, что плоские файлы сейчас работают отлично, нет очевидной необходимости переходить на более сложное решение, поэтому оставьте его.
В пользу базы данных:
Проще масштабировать базу данных, чем каталог, полный файлов
Плоские файлы рискуют скопировать «готовый» файл обратно в каталог «watch». Из-за характера этого приложения (управление виртуальной машиной) это может привести к катастрофической потере данных.
Требуя большей технической сложности для T / S, приложение означает, что необразованный персонал с меньшей вероятностью что-то испортит, просто ткнув в вещи.
Код подключения к БД, особенно для чего-то вроде Redis, по меньшей мере такой же надежный, как стандартные функции управления файлами библиотеки.
Код подключения к БД заметно (если не функционально) проще с точки зрения разработчика, поскольку его уровень выше, чем манипулирование файлами.
Из того, что я вижу, оба разработчика имеют много правильных точек.
Итак, из этих двух людей, разработчика pro-files или разработчика pro-database, какой из них больше соответствует передовой практике разработки программного обеспечения и почему?