Как/где хранить временные файлы и журналы для облачного приложения?

Я работаю над облачным приложением Python/MySQL с довольно сложной архитектурой. Управление этой системой (в настоящее время) создает временные файлы (обычный текст, YAML) и файлы журналов, и я планировал их хранить в файловой системе.

Однако наш потенциальный оператор облака предоставляет только временную, непостоянную файловую систему для приложений. Это означает, что первоначальный подход с сохранением временных файлов и журналов не будет работать.

Должен быть стандартный подход к решению этой проблемы, о котором я не знаю. Я не хочу использовать хранилище объектов, такое как S3, потому что оно расширяет текущий стек и увеличивает сложность. Но у меня есть возможность установить дополнительное специализированное приложение (если оно сделано для этой цели) на другом сервере с одним и тем же провайдером. Единственное ограничение заключается в том, что это должно было быть в PHP, Python, MySQL.

Общий вопрос: каков стандартный подход к хранению файлов, когда нет постоянной файловой системы?

И для моего конкретного случая: есть ли какое-либо решение с использованием Python и/или MySQL, которое просто и быстро реализовать? Является ли это обязательным для Редиса?

Ответ 1

Как вы задаете два вопроса, позвольте мне также ответить на них один за другим:

Общий вопрос: каков стандартный подход к хранению файлов, когда нет постоянной файловой системы?

Если содержимое файла не подходит для обычного хранилища баз данных, но вы действительно хотите сохранить этот файл (например, изображения, двоичные файлы и т.д.) настойчиво, Amazon S3 и аналогичные службы обычно являются вашим путем. Существуют также бесплатные альтернативы, доступные как Riak, Aerospike или более тяжелый Cassandra.

Хотя все эти услуги бесплатны (или доступны бесплатные версии), они потребуют установки и текущего обслуживания. Кроме того, вы вряд ли достигнете того же уровня доступности и масштабируемости, что и размещенные облачные сервисы, такие как S3. Если вы учтете это, экономия за счет использования облачного сервиса, такого как S3, по крайней мере сомнительна. Но, как всегда, YMMV.

И для моего конкретного случая: есть ли какое-либо решение с использованием Python и/или MySQL, которое просто и быстро реализовать? Является ли это обязательным для Редиса?

Ваш вопрос немного противоречив. Вы упомянули, что ваше приложение генерирует временные файлы, но вы не хотите их потерять?

Если ваши файлы являются временными, такое решение, как Redis или memcached будет идеально подходящим для работы, если у вас есть понимание того, что оба являются кешами, и данные будут потеряны при перезагрузке или (если будут включены снимки Redis), по крайней мере, не гарантируют, что записи сохраняются на диске.

Если вы не хотите расширять свой стек, а Redis не дает вам уровней гарантий, которые вы ищете, MySQL поддерживает хранение blobs, который может использоваться для хранения файлов (двоичных данных) в MySQL. Это, как правило, не очень хорошо масштабируется, но опять же, решение о том, приемлемо для вас, зависит от вашей ситуации. (См. Также этот отличный ответ относительно pro и con для хранения файлов в MySQL.)

Ответ 2

Сохраните свои журналы в MySQL. Просто создайте таблицу следующим образом:

x***time*****source*****action
----------------------------
****unixtime*somemodule*error/event

Ваше временное хранилище должно быть достаточно для временных файлов:)

Ответ 3

Redis - плохой выбор для этой проблемы. Он хранит все данные в памяти, поэтому он дорог и непрактичен для длительного хранения файлов журналов.

MySql в порядке, однако MongoDB является более гибким и быстрым решением. На самом деле это один из основных случаев использования: https://docs.mongodb.com/ecosystem/use-cases/storing-log-data/