How/where 存储云应用程序的临时文件和日志?
How/where to store temp files and logs for a cloud app?
我正在开发具有相当复杂架构的 Python/MySQL 云应用程序。运行此系统(当前)会生成临时文件(纯文本、YAML)和日志文件,我打算将它们存储在文件系统中。
然而,我们未来的云运营商只为应用程序提供一个临时的、非持久性的文件系统。这意味着存储临时文件和日志文件的初始方法将不起作用。
必须有一个标准的方法来解决我不知道的这个问题。我不想使用像 S3 这样的对象存储,因为它会扩展当前堆栈并增加复杂性。但是我有可能在同一提供商的不同服务器上安装一个额外的专用应用程序(如果有为此目的制作的任何东西)。唯一的限制是它必须在 PHP、Python、MySQL.
中
一般性问题:当没有持久文件系统可用时,存储文件的标准方法是什么?
对于我的具体情况:是否有任何使用 Python and/or MySQL 的解决方案既简单又快速实施?这是 Redis 的用例吗?
将您的日志存储在 MySQL 中。像这样制作一个 table:
x***time*****source*****action
----------------------------
****unixtime*somemodule*error/event
您的临时存储应该足够存放临时文件:)
对于这个问题,Redis 是一个糟糕的选择。
它将所有数据保存在内存中,因此长期保存日志文件既昂贵又不实用。
MySql 可以,但是 MongoDB 是更灵活和快速的解决方案。
实际上这是它的主要用例之一:https://docs.mongodb.com/ecosystem/use-cases/storing-log-data/
既然你问了两个问题,我也一一回答:
The generic question: What is the standard approach to storing files when no persistent filesystem is available?
如果文件的内容不适合常规数据库存储,但您确实想持久存储文件本身(如图像、二进制文件等),Amazon S3 和类似服务通常是您的选择。还有免费的替代品,例如 Riak, Aerospike or the more heavy Cassandra。
虽然所有这些服务都是免费的(或提供免费版本),但它们需要设置和持续维护。此外,您不太可能达到与 S3 等托管云服务相同级别的可用性和可扩展性。如果您考虑到这一点,那么不使用像 S3 这样的云服务所节省的费用至少是值得怀疑的。但一如既往,YMMV.
And for my specific case: Is there any solution using Python and/or MySQL which is simple and quick to implement? Is this a usecase for Redis?
你的问题有点自相矛盾。您提到您的应用程序生成 临时 文件,但您不想丢失它们?
如果您的文件是临时文件,那么像 Redis or memcached 这样的解决方案将非常适合这项工作,只要您了解两者都是 缓存 和数据将在重新启动时丢失,或者(如果启用 Redis 快照)至少不保证写入持久保存到磁盘。
如果您不想扩展您的堆栈,并且 Redis 没有为您提供您正在寻找的保证级别,MySQL 支持存储 blobs, which can be used for storing files (binary data) in MySQL. This generally does not scale very well, but again, deciding whether this is acceptable for you highly depends on your situation. (See also this 关于专业人士和将文件存储在 MySQL 中的缺点。)
我正在开发具有相当复杂架构的 Python/MySQL 云应用程序。运行此系统(当前)会生成临时文件(纯文本、YAML)和日志文件,我打算将它们存储在文件系统中。
然而,我们未来的云运营商只为应用程序提供一个临时的、非持久性的文件系统。这意味着存储临时文件和日志文件的初始方法将不起作用。
必须有一个标准的方法来解决我不知道的这个问题。我不想使用像 S3 这样的对象存储,因为它会扩展当前堆栈并增加复杂性。但是我有可能在同一提供商的不同服务器上安装一个额外的专用应用程序(如果有为此目的制作的任何东西)。唯一的限制是它必须在 PHP、Python、MySQL.
中一般性问题:当没有持久文件系统可用时,存储文件的标准方法是什么?
对于我的具体情况:是否有任何使用 Python and/or MySQL 的解决方案既简单又快速实施?这是 Redis 的用例吗?
将您的日志存储在 MySQL 中。像这样制作一个 table:
x***time*****source*****action ---------------------------- ****unixtime*somemodule*error/event
您的临时存储应该足够存放临时文件:)
对于这个问题,Redis 是一个糟糕的选择。 它将所有数据保存在内存中,因此长期保存日志文件既昂贵又不实用。
MySql 可以,但是 MongoDB 是更灵活和快速的解决方案。 实际上这是它的主要用例之一:https://docs.mongodb.com/ecosystem/use-cases/storing-log-data/
既然你问了两个问题,我也一一回答:
The generic question: What is the standard approach to storing files when no persistent filesystem is available?
如果文件的内容不适合常规数据库存储,但您确实想持久存储文件本身(如图像、二进制文件等),Amazon S3 和类似服务通常是您的选择。还有免费的替代品,例如 Riak, Aerospike or the more heavy Cassandra。
虽然所有这些服务都是免费的(或提供免费版本),但它们需要设置和持续维护。此外,您不太可能达到与 S3 等托管云服务相同级别的可用性和可扩展性。如果您考虑到这一点,那么不使用像 S3 这样的云服务所节省的费用至少是值得怀疑的。但一如既往,YMMV.
And for my specific case: Is there any solution using Python and/or MySQL which is simple and quick to implement? Is this a usecase for Redis?
你的问题有点自相矛盾。您提到您的应用程序生成 临时 文件,但您不想丢失它们?
如果您的文件是临时文件,那么像 Redis or memcached 这样的解决方案将非常适合这项工作,只要您了解两者都是 缓存 和数据将在重新启动时丢失,或者(如果启用 Redis 快照)至少不保证写入持久保存到磁盘。
如果您不想扩展您的堆栈,并且 Redis 没有为您提供您正在寻找的保证级别,MySQL 支持存储 blobs, which can be used for storing files (binary data) in MySQL. This generally does not scale very well, but again, deciding whether this is acceptable for you highly depends on your situation. (See also this 关于专业人士和将文件存储在 MySQL 中的缺点。)