Amazon s3 为什么要为云存储/CDN随机化文件名?

Amazon s3 为什么要为云存储/CDN随机化文件名?,amazon-s3,cloud,cdn,content-delivery-network,cloud-storage,Amazon S3,Cloud,Cdn,Content Delivery Network,Cloud Storage,当您在社交网站(如Twitter)上查看个人资料图片时,它们存储的图像文件如下: http://a1.twimg.com/profile_images/1082228637/a-smile_twitter_100.jpg 甚至在路径中的某个地方有日期,比如20110912。我能想到的唯一直接好处是防止机器人以线性方式浏览和下载存储中的所有文件。我是否错过了其他福利?随机化的最好方法是什么 我使用的是AmazonS3,所以我将有一个子域为我所有的静态内容提供服务。我的计划是在我的数据库中存储一个

当您在社交网站(如Twitter)上查看个人资料图片时,它们存储的图像文件如下:

http://a1.twimg.com/profile_images/1082228637/a-smile_twitter_100.jpg
甚至在路径中的某个地方有日期,比如20110912。我能想到的唯一直接好处是防止机器人以线性方式浏览和下载存储中的所有文件。我是否错过了其他福利?随机化的最好方法是什么


我使用的是AmazonS3,所以我将有一个子域为我所有的静态内容提供服务。我的计划是在我的数据库中存储一个整数ID,然后用ID连接URL以形成位置。

主要是防止名称冲突。例如,可能有多个人上传“IMG_0001.JPG”。您还可以避免对一个目录中文件数量的限制,并且可以跨多个服务器共享图像-像Twitter或Facebook这样的大型网站不可能在一个服务器上存储所有照片,无论多大。

我在公共URL中加密加密标识符的一个原因是,业务的增长率并不总是公共的

如果只需创建一个新的用户帐户或上传一张图片就可以推断出当前的ID,那么外部人员可以通过定期这样做并查看在经过的时间内使用了多少ID来计算增长率(或上限)

无论是停滞不前还是呈指数级增长,我都希望能够控制这些信息的发布,而不是让竞争对手或业务分析师自己推断

离线示例包括发票和支票号码。如果你定期收到一家公司的账单或付款,那么你可以看到他们在这段时间内开出了多少发票或支票

下面是我维护的一个CPAN(Perl)模块,它使用基于SkipJack的双向加密对32位ID进行加扰:

这是Greg Rose用C编写的Skip32算法的直接翻译:

使用这种方法将每个32位id映射成一个(实际上是随机的)对应的32位数字,该数字可以反转回原始id。您不必在数据库中保存任何额外的内容

我将加扰的id转换为8个十六进制数字,以便在URL中显示


一旦您的ID接近42.9亿(32位),您就需要计划扩展URL结构以支持更多内容,但我喜欢尽可能长时间使用较短的URL。

更改URL是使过时资产无效的安全方法


如果您希望允许用户存储私有图像,那么它也是必要的。使用可从用户帐户名/id/path中扣除的路径会使隐私设置在您将资产存储到CDN上时变得无用。

我理解您的意思,但Twitter使用Amazon S3,因此他们不必担心服务器或目录的概念。他们可以在一个目录中存储一万亿个对象(或尽可能多的对象),而不必担心它。在我的例子中,我使用MySQL中的一个自动递增整数列作为S3上的相应文件名,因此命名冲突不应该成为问题。那么,你认为有没有一种好方法可以防止机器人系统地下载你的所有文件呢?如果他们想在目录中列出文件以查找特定的文件,他们肯定会担心。他们必须将文件位置的元数据存储在其他地方(数据库、JSON文档等)。我知道Twitter使用AmazonS3,如果他们真的愿意,他们可以将所有图片存储在a1.twimg.com/*下。亚马逊的云处理硬件,所以在高层次上你不必考虑目录。因为我是专门问S3的,所以在这种情况下,切分和集群不是问题。正如ceejayoz所提到的,当对象都在一个“文件夹”中时,在特定路径中列出对象是有问题的。我喜欢这种思路。我将不得不重新考虑我的id生成策略。