我们制作分布式软件,在a)数据库或b)Amazon S3中存储一些数据(附件)。使用该数据库是因为它不需要其他配置。 Amazon S3是更好的选择。
我们现在想要的是一个不想使用Amazon S3的客户的解决方案。我们显然可以只使用文件系统,但如果有多个Web服务器并且需要复制文件,这可能会有问题;它还要求我们编写额外的代码来处理可能发生的各种问题。
如果有一台服务器软件基本上复制了Amazon S3的API,我们会优先考虑。这样我们的客户就可以在一个盒子上安装服务器;我们不需要更改任何代码。那么......那里有没有这样的软件?
答案 0 :(得分:34)
minio对此非常有用。用Go编写,易于部署。
答案 1 :(得分:31)
这可以通过OpenStack Object Storage (code-named Swift)来实现,这是开源软件,用于使用标准化服务器集群创建冗余,可扩展的对象存储,特别是其最近添加的(可选)S3 API层, 在对象存储之上模拟S3 REST API。
有关官方文档,请参阅Configuring Object Storage with the S3 API - S3 APIs on OpenStack Swift中提供了有关整个设置的更具洞察力和插图的小型教程(虽然建立在更复杂的Installing an OpenStack Swift cluster on EC2上)。
一个值得注意的替代方案是Ceph,它是一个统一的分布式存储系统,旨在提供出色的性能,可靠性和可扩展性 - 有趣的是它提供了所有三种常见的存储模型,即{{3 }},Object Storage和Block Storage以及 RADOS Gateway 为RADOS对象商店提供Amazon S3和OpenStack Swift兼容接口 [强调我的] 有关当前支持的S3 API功能的详细信息,请参阅File System。
答案 2 :(得分:9)
我们遇到了在本地测试基于S3的代码的问题,并且实际上实现了一个小型Java服务器,它模拟了S3对象API。由于它可能对其他人有用,我们设置了一个github repo以及一个小网站:http://s3ninja.net - MIT许可下的所有OpenSource。
这个工具非常简单和简约,非常适合测试和开发。但是,要在生产中使用,可能需要添加一些安全性(尽管已经在API中验证了AWS哈希 - 只是GUI完全不受保护)。此外,它不执行任何复制或缩放。所以这对于大型设置来说不是一个好的选择。
答案 3 :(得分:7)
你看过Cloudian了吗?我们在公司内部使用它来开发我们的S3应用程序。我使用的社区版可以免费提供高达10TB的存储空间。它具有相当不错的S3覆盖率或者至少覆盖了我的应用程序使用的大部分内容(我使用版本控制和分段上传,所以我认为我的应用程序是高级的)。它生成的版本ID和多部分ID等与您从AWS获得的版本不同,但是到目前为止boto没有任何抱怨。它也适用于我尝试的s3fs和其他s3桶浏览器。
在我看来,它是针对AWS S3 API进行开发的一个很好的工具,应该满足您的要求。您可以将应用程序指向本地Cloudian服务器,然后在准备好生产时,可以将其指向亚马逊。你的里程可能会有所不同......祝你好运。
答案 4 :(得分:4)
我最近开始使用Skylable来满足我的S3需求,它是免费的(GPL)。它们的对象存储支持复制,HA和重复数据删除,并且它完全兼容S3。如果您不需要冗余,可以在单个服务器(铁,虚拟机或容器)上运行他们的软件,或者如果您需要HA,可以使用更多节点。
每个存储桶可以选择副本数量,就像使用Swift一样。 我开始在副本2中使用2个节点,并在用户群开始增长时添加更多节点,以应对额外的网络流量和空间要求。
添加更多节点非常简单,可以在实时集群上完成。
根据我的经验,Skylable被证明比Swift更快,更可靠。它是用C和OCaml编写的,它没有被解释。内存占用率非常低,因此我甚至可以在一些便宜的VPS上运行节点。
最近他们宣布开始研究Swift API,显然他们的目标是取代Swift。
答案 5 :(得分:2)
答案 6 :(得分:2)
虽然最初的问题是关于S3兼容软件(似乎)生产使用,但许多人对同一软件感兴趣,但对本地开发和测试感兴趣。
关于生产就绪的解决方案,有一个很棒的S3兼容存储软件,名为Riak CS,它可靠且经过多年的生产验证,但有一个缺点 - 设置并不简单。有一些限制,但没有任何重大问题,请参阅api / compatibility documentation。
已经有一些很好的开发和测试答案,这对Docker用户很有用 - 有docker-riak-cs图片可以快速启动Riak CS实例。我已经使用它近两年进行本地开发和集成测试,取得了巨大的成功。
答案 7 :(得分:0)
如果您想拥有类似S3的API但自己托管数据,那么就可以提及minio。
如果您要编写与S3交互的服务,但要在本地测试它们的速度,则可以使用Localstack,我认为这里没有提到。它不仅模拟S3,而且还模拟许多其他AWS服务。我不建议将其用于实际的客户文件,因为它是仅用于testinng的内存数据存储。
https://github.com/localstack/localstack
https://bluesock.org/~willkg/blog/dev/using_localstack_for_s3.html