分布在世界各地的负载

比方说,我们正在启动一个旨在服务于世界各地的项目

我该如何分配数据库和服务器负载,并增加(优化)为大量观众的服务?

我知道反向代理,负载均衡,使用DNS子域名来定位多个可以提供相同内容的IP。

我目前感兴趣,如果有任何简单的方法如何分配我的整个数据库和服务(现在是单个虚拟机)来分配负载。

我得到的一些想法/问题

  • 如果我确实需要在每个地区启动VPS,然后在后台合并数据
  • 如果我可以做到这一点与单一的服务器,只使用CDN的提供静态资源
  • 如果有任何平台,我可以将MVC图层分开,这样每个平台都可以在单独的服务器上运行,或者可以进行优化,分别分发
  • 如果我可以将我的应用程序托pipe在一些云服务上,这将处理日益增长的负载并单独分发服务。 IaaS提供商需要?

我不认为这个问题很容易回答,所以最好的回答方式可能是,向我指出一些与这个话题有关的白皮书。

这是一个非常广泛的问题,没有解决这个问题的灵丹妙药。 build立多个站点的最大挑战是数据库,尤其是多主数据库。 Mysql和一堆nosql数据库确实支持多主复制,您需要评估并找出哪一个最适合您的需求。

稍微偏离主题,但在您的设置中可以接受多less延迟? CDN,反向代理可以帮助加快您的网站。 谷歌/雅虎/脸书等服务dynamic内容洲际没有太多的延迟。

简单的方法如何分配我的整个数据库

想想locking一秒钟。 当2个客户端要写入数据库中的同一行时,数据库将使用写入锁来避免竞争条件和无效数据。 在“分布式数据库”情况下,需要分发获取和释放锁的行为。 你将如何做到这一点,当其他节点可以达到0.300秒时,你将如何创build一个高性能locking系统?

没有好的答案,这是计算机科学中最难的问题之一。 有关介绍,您可以阅读CAP定理 。

单个服务器,只使用CDN来提供静态资源

是的,这是最常见的方法。 将所有的dynamic数据保存在一个数据中心(即共同驻留在同一机构的Web应用服务器和数据库服务器),然后使用全局CDN作为静态位。 这个设置很容易推理,而且通常效果很好。

是任何平台,我可以将MVC图层分开,因此每个平台都可以在单独的服务器上运行,也可以进行优化,分别分发

在彼此非常接近的地方,networking连接速度非常快,持续时间低,没有问题。 以地理分布的方式,networking链接缓慢,这是不可能的。

将我的应用程序托pipe在一些云服务上,这将处理日益增长的负载和分发服务

Google App Engine在某种程度上可以做到这一点。 这是恕我直言,你受益的App Engine的主要事情。 为了达到这个目标,你必须对App Engine的非常简化的数据模型(即没有SQL,只有BigTable)进行编程,这个模型有着显着的负面影响。

你的问题到处都是,问题很复杂 – 所以指点你一本书阅读并不容易。

  • 我认为分布式计算中的计算机科学课程会很棒。
  • 我还记得Cal Henderson的“build立可扩展的网站”一书 。 它与上述完全不同,它更多地是一个缩放networking应用程序的有点过时的策略的集合。 虽然已经变老了,但我仍然认为这是一个很好的介绍webapps扩展的常见问题,以及分析和解决问题的思路。