比方说,我们正在启动一个旨在服务于世界各地的项目
我该如何分配数据库和服务器负载,并增加(优化)为大量观众的服务?
我知道反向代理,负载均衡,使用DNS子域名来定位多个可以提供相同内容的IP。
我目前感兴趣,如果有任何简单的方法如何分配我的整个数据库和服务(现在是单个虚拟机)来分配负载。
我得到的一些想法/问题
我不认为这个问题很容易回答,所以最好的回答方式可能是,向我指出一些与这个话题有关的白皮书。
这是一个非常广泛的问题,没有解决这个问题的灵丹妙药。 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)进行编程,这个模型有着显着的负面影响。
你的问题到处都是,问题很复杂 – 所以指点你一本书阅读并不容易。