背景:我已经build立了一个典型的网站,让用户上传照片和video(没有太大,介意)。 目前,我在位于英国伦敦的DigitalOcean小滴(Nginx,PHP,MySQL,用于会话/caching的Memcached)上托pipe这个网站。 我有一个位于爱尔兰的S3存储桶,我从服务器上传文件。
问题:问题是不在英国和欧洲的用户上传速度较慢,有时要慢得多(例如从美国或澳大利亚)。 这让他们感到沮丧。
AWS有一些非常酷的东西,比如S3 Transfer Acceleration和S3 Presigned POSTs (让用户直接上传到没有AWS凭证的存储桶)。 但是后者不是AJAX友好的 – 你可以要求S3返回一个XML响应,但是由于这是跨域的,JS不可读。 所以没有办法知道密钥(文件)的名称。 据我所知。
我也尝试过使用AWS JavaScript SDK直接上传到S3存储桶,但是这意味着我必须强制我的用户重新进行身份validation,我想(我想避免这种情况)。
我想在美国增加一个服务器,例如分离服务,所以两个Web服务器,一个会话服务器和一个数据库服务器。 然后使用基于延迟的Route 53路由select路由到最低延迟的Web服务器。 但是,对于Web服务器而言,会话和数据库服务器在不同位置存在高延迟问题。 和粘滞的会议问题。
我想知道是否有人有任何build议,也许我是过度复杂,有一个更简单的解决scheme。 任何意见是极大的赞赏!
你有几个select。
您可以设置CloudFront来提供您的所有内容(包括网页和上传),并查看它是否使事情变得更快。 所有的stream量,包括dynamic的,都可以通过CloudFront ,这是一个高度优化的高带宽networking,本身可以减less相当多的延迟。 这本身可能足以让你的用户足够好。 您的服务器不在AWS中,因此这可能不起作用,但CloudFront支持任何来源。 CloudFlare有类似的技术,他们代理所有的stream量,并将有私人networking,所以这也是值得一试 – 他们有一个免费的层。
如果您想在美国添加另一台服务器,则只需添加一台Web服务器即可。 这些点之间的等待时间有点像70 – 110毫秒。 我会在美国与伦敦数据库build立一个testing服务器,看看它是如何工作的。 这将遍历公共互联网,所以一旦你通过testing,我会build议使用encryption – 无论是本地数据库还是VPN。
您可以在美国放置一个只读副本,并将写入stream量指向主数据库,读取来自只读副本。 这意味着大多数stream量真的很快,但偶尔写入会稍微慢一些。 由于您不使用AWS服务器,因此可能必须使用数据库本机复制,而不是简单的AWS只读副本设置。 我不确定是否只读副本很容易处理数据库本地或如果你必须去读/写副本。
您可以使用双主数据库configuration,在它们之间进行复制。 如果用户不太可能同时更改两个位置的现有数据,或者架构很less修改,那么这可能会很好。 复制滞后可能是几秒钟,所以可能会导致一些状态问题,所以我可能不会先尝试这个。
这是一些想法,我的头顶。 给我你的想法,也许别的事情会发生在我身上。 别人可能会有更好的解决scheme。