有关大型网站的负载分享

我有一个关于大型网站负载分担的问题。

我的理解:

所以,如果你有一个网站,每天有几百万的适合,你将需要有一个架构,可以支持这种压力。 你可以做一两件事:

  1. 投资一台拥有大量处理能力,内存和存储空间的大型服务器(如微软的TerraServer)。
  2. 将网站的负载分散到多台机器上。

让我来解决第二种方法,这样你就拥有了一系列运行Web服务器软件的机器,并且都可以访问相同的网站页面。 您可以使用DNS中的循环模式将负载分散到这些机器上,也可以使用Load Ballancing Switch。

这种方法的优点是: – 冗余 – 服务器可能会失败,其他服务器会“挑起冗余” – 增量 – 能够轻松地将新机器添加到这个设置。

我的问题

  • 现在有没有虚拟的方法解决这个负载均衡问题?
  • 如果网站从数据库运行 – 是否仍然只有一个数据库的副本?
  • 如果用户在一台服务器上运行了一个会话(例如,他们去了www.example.org并被分配到了服务器2,他们是否创build了会话),如果他们刷新了网站(并分配了服务器3)还有他们的会议?
  • 与负载平衡相关的其他缺点是什么?

除非您的应用程序需要大量的处理能力,否则在此之前很可能会耗尽networking带宽。 这有两个后果:

  • scheme1不是一个真正的select,因为这不是瓶颈
  • 你想跨网站分发,而不是跨服务器。

负载平衡交换机在处理占用大部分请求处理并且同步不重要的场景中是最有用的,例如当构buildsearch引擎时(查询是复杂的,数据集没有被修改,因此单个服务器可以在私人副本上工作,并且对数小时以上的数据进行操作是完全可以接受的)。

对于需要login的应用程序,您可能需要一个单独的基础结构来跟踪比那更快的用户和会话,例如包含用户数据和凭证信息的复制数据库以及可以build立会话ID有效性的单独服务。

一个可能的实现是通过数字签名用户ID,发送cookie的服务器ID以及证书被接受时的时间戳来生成会话ID cookie。 然后个别前端服务器可以联系login服务器来查询cookie的有效性(在真实情况下,您可能想要在那里进行一些优化)。

共享的数据集很难pipe理,如何实现这个最好的答案将高度依赖于所讨论的应用程序; 这将是一个较长的文章。

当硬件使用不足或需要快速更换时,虚拟化可以提供帮助。 这对于负载均衡没有什么关系,但是肯定是您为服务分布在各个服务器上的工具之一。