分布式大型文件托pipe

我们在S3上托pipe软件安装程序(〜60Mb),并通过CloudFront提供服务。 我们注意到非正在下载的文件经常从CFcaching中被擦除,因此下载比平常慢。 我怀疑其他CDN提供程序对于不常访问的文件具有相同的行为。

我正在考虑创build4台服务器,而不是S3 + CF:在美国是2,在欧洲是1,在澳大利亚是1。 这些服务器应该覆盖我们的大部分客户。

问题是如何configuration它们以方便,几乎免维护。 使用S3 + CF我花费零时间configuration服务器 – 他们只是工作。 我正在寻找类似的解决scheme。

我虽然从DigitalOcean租用4个小滴,并使用Cloudways来configuration它们。 然后,我将configurationDNS提供商将客户引导到最近的服务器。 这将花费我17 * 4 = 68美元,几乎与我们目前支付的CloudFrontstream量相同。 但是,我不喜欢CloudWays和他们的支持。 有时候,事情根本不起作用,他们手动更换服务器,所以它不是那么容易。

还有其他的select吗?

概观

不幸的是,你无法控制CloudFront(CF)驱逐 – 他们可能随时驱逐对象。 但是,CF使用AWS内部networking(而不是Internet)连接到S3,因此提取对象的速度应该比直接从S3中获取的用户快。 这仍然不能满足你的需求。

调整当前设置

但是,你应该检查你的CFconfiguration。 在现有的设置中,您应该创build一个不通过cookie或标题的行为,这样所有请求设置的用户都可以获得相同的对象。 如果你通过cookies和头文件传递CF可能有1000个版本的同一个安装caching,所以是驱逐他们定期。

你当然应该看看原始发送给CF的caching头。 如果它没有发送任何定义CF中的TTL。

另外一个select

如果您无法获得当前的设置工作,则可以在每个AWS区域中创buildS3存储桶,而不是托pipe服务器。 您不能自动将用户定向到最近的存储区,但是您可以使用地理定位并生成到您认为距离用户最近的存储区的链接。

CF可以configuration为将标题“Cloudfront-Viewer-Country”添加到请求。 您可以使用行为来将这些标头添加到非常特定的请求中,否则您的caching命中率将会降低。 这是因为caching是按照每个头部的,所以每个碰到CF节点的不同国家在caching中都有自己的项目。 这反过来降低了命中率。

您的应用程序/ Web服务器可能会收到此标头,决定使用哪个S3区域/存储区,并生成到最靠近用户的存储区的链接。

过早优化

因为这是一个很小的下载,我不知道这个问题是不是一个过早优化的情况。 60MB的下载速度非常快,可以在世界上任何地方都可以上网。 如果他们的最后一英里联系不好,那么它从哪里下载,没有多大关系。

您实际上并没有给我们一个问题,比如“这个国家的用户下载速度很慢”,您刚刚描述了可能导致问题的技术。

我们注意到非正在下载的文件经常从CFcaching中被擦除,因此下载比平常慢。

你有没有在你的原产地设置Expires头? 您应该能够将其设置到将来,这将指示Cloudfront不会像往常一样过期对象。

问题是如何configuration它们以方便,几乎免维护。

你也可以开始在森林里寻找木精灵。 🙂

老实说,运行服务器需要维护。 如果你忽视维护,事情会被黑客入侵,你的服务器被僵尸networking使用,你的数据被泄露,并且你正在恢复的时候你的日子不好(或月)。

但是,我不喜欢CloudWays和他们的支持。

那就不要使用它们。

如果你真的认为自己托pipe是一种方式,那么请求系统pipe理员的帮助,这个系统pipe理员可以保持对事物的注意,保持事情的安全和健康。 注意:这不需要太多的时间,也许每个月几个小时。 这样做甚至可能比支付像Cloudways这样的解决scheme便宜,而且会更加灵活。