我想建立自己的网页缩略图云服务供我私人使用。我计划拥有超过 4,000,000,000 个小图像 (10KB) 我不想使用像 amazon S3 这样的外部服务,我想构建自己的云。
你将如何存储它并保持它的可扩展性?例如,在 cassandra 分布式数据库或 GlusterFS 文件系统上...
您将如何通过 HTTP 有效地提供服务?例如,对许多读取 cassandra 数据库的 http 服务器使用 nginx 负载均衡器...
您的问题含糊不清,没有经过充分研究和形成,但是我会在这里提出一些建议。
thumb-shots 云服务供我私人使用。
如果这是供您个人使用,我强烈建议您根本不使用数据库,而是使用高 IOPs SSD 支持的集群(服务器集)上的文件系统,专门针对高网络利用率和 IO 读取进行调整。
注意:这将很快扩展到比 S3 等外部服务更昂贵的方式。
您将如何安全地存储它(它需要 40TB)?
这有点宽泛,听起来缺乏任何真正的研究,但您可以从 Web 应用程序端保护它,并将规则放入图像服务器防火墙中,声明只允许 Web 应用程序访问图像。然后在您的网络应用程序中,您将有规则来保护您的图像使用。
您将如何通过 HTTP 有效地提供服务?
通过缓存机制,无论是在服务器上(在 Web 应用程序中)以 Varnish 的形式还是在浏览器中,都可以通过添加无限过期时间(可能)。
当然,“最佳”缓存机制取决于 Web 服务器和使用情况,即 Nginx 或 Apache。
这是一个模糊且过于宽泛的问题的基本答案。我强烈建议您进行一些研究,并通过您希望使用的任何服务器来研究图像服务。
好吧,最大的问题是找到这样容量的存储,但即使你会找到,我认为任何普通的数据库都不能处理这么多的数据,所以你需要编写一些自定义的解决方案来存储/阅读。无论如何,如果你能描述你最初的问题,可能还有其他一些真正的解决方案,而不需要存储这么多图像,因为处理 40 亿张图像是不切实际的。
听起来像这样可能很有趣: http ://docs.basho.com/riakcs/latest/
它刚刚开源,专门为构建您自己的 S3 而设计
OpenStack Swift 是一个对象存储项目,Rackspace 和 Wikimedia 都使用它来存储数百万张图像。
我认为您应该使用 blob(二进制大对象)。您考虑过 Google App Engine 的 blobstore 吗?如果您不熟悉 BLOB,那么这是开始使用云计算和图像服务的一种既好又便宜的方式。你可以用 python、java 或谷歌的新编译语言 go 对你的 blobhandling 进行编程。如果您使用 GAE,您还可以使用应用程序完成所有操作,而不必担心硬盘驱动器或操作系统。如果您想创建自己的堆栈,您应该查看您的服务提供商支持哪种集群。