如何/在何处存储云应用程序的临时文件和日志?

时间:2015-04-15 17:04:09

标签: python mysql redis cloud storage

我正在开发一个具有相当复杂架构的Python / MySQL云应用程序。操作此系统(当前)会生成临时文件(纯文本,YAML)和日志文件,我本来打算将它们存储在文件系统中。

但是,我们的预期云运营商仅向应用提供临时的非持久性文件系统。这意味着存储临时文件和日志文件的初始方法将无效。

必须有一种解决这个问题的标准方法,我不知道。我不想像S3那样使用对象存储,因为它会扩展当前的堆栈并增加复杂性。但我可以在具有相同提供程序的其他服务器上安装其他专用应用程序(如果有任何用于此目的的内容)。唯一的限制是它必须是PHP,Python,MySQL。

一般性问题:当没有可用的永久文件系统时,存储文件的标准方法是什么?

对于我的具体案例:有没有使用Python和/或MySQL的解决方案,它实现简单快捷?这是Redis的用例吗?

3 个答案:

答案 0 :(得分:2)

当你提出两个问题时,我也要逐一回答:

  

一般性问题:当没有可用的永久文件系统时,存储文件的标准方法是什么?

如果文件的内容不适合常规数据库存储,但您确实想要永久存储文件本身(如图像,二进制文件等),那么Amazon S3和类似服务通常是您的选择。还有免费的替代方案,例如RiakAerospike或更重的Cassandra

虽然所有这些服务都是免费的(或者提供免费版本),但它们需要设置和持续维护。此外,您不太可能像S3这样的托管云服务实现相同级别的可用性和可伸缩性。如果您考虑到这一点,那么不使用像S3这样的云服务可以节省成本。但一如既往,YMMV。

  

对于我的具体案例:是否有任何使用Python和/或MySQL的解决方案,它实现简单快捷?这是Redis的用例吗?

你的问题有点矛盾。你提到你的应用程序会生成临时文件,但你不想丢失它们吗?

如果您的文件是临时文件,那么Redismemcached等解决方案将非常适合作业,只要您了解两者都是缓存和数据将在重新启动时丢失,或者(如果启用Redis快照)至少不保证写入持久保存到磁盘。

如果您不想扩展堆栈,并且Redis没有为您提供所需的保证级别,MySQL支持blobs的存储,可用于存储文件(二进制数据)在MySQL中。这通常不能很好地扩展,但同样,再次决定这是否可以接受,这在很大程度上取决于您的情况。 (另请参阅this关于在MySQL中存储文件的专业人士和合作伙伴的优秀答案。)

答案 1 :(得分:1)

Redis是解决这个问题的不错选择。 它将所有数据保存在内存中,因此对于长期保存日志文件而言,这样做既昂贵又不实用。

MySql没问题,但MongoDB是一个更灵活,更快速的解决方案。 实际上它是它的主要用例之一:https://docs.mongodb.com/ecosystem/use-cases/storing-log-data/

答案 2 :(得分:0)

将您的日志存储在MySQL中。只要做一个这样的表:

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

您的临时存储应该足以存放临时文件:)