我有一个关于大型网站的负载共享的问题。
我的理解:
因此,如果你的网站每天有数百万次匹配,那么你需要一个能够支撑这种压力的架构。你可以做一两件事:
- 投资具有大量处理能力、内存和存储空间的单个大型服务器(例如 Microsoft 的 TerraServer)。
- 将您的网站负载分散到多台机器上。
让我来介绍第二种方法,这样你就有一组机器,它们都运行着 Web 服务器软件,并且都可以访问网站页面的相同副本。你可以使用 DNS 中的循环模式将负载分散到这些机器上,也可以使用负载平衡交换机。
这种方法的优点是: - 冗余 - 服务器可以发生故障,其他服务器可以“弥补不足” - 增量 - 能够轻松地将新机器添加到此设置中。
我的问题
- 现在有没有一种虚拟方法可以解决这个负载平衡问题?
- 如果网站通过数据库运行 - 是否仍然只有一个数据库副本?
- 如果用户在一台服务器上运行会话(例如,他们访问过 www.example.org 并被分配到服务器 2 - 他们是否已经创建了会话),如果他们刷新网站(并被分配到服务器 3)他们是否还会有他们的会话?
- 负载平衡还有哪些缺点?
答案1
除非你的应用程序需要大量的处理能力,否则你很可能在此之前就耗尽网络带宽。这会带来两个后果:
- 选项 1 实际上不是一个选项,因为这不是瓶颈
- 您希望跨站点分发,而不是跨服务器分发。
负载平衡交换机在处理占据大部分请求处理且同步并不重要的场景中最有用,例如在构建搜索引擎时(查询很复杂,数据集未被修改,因此单个服务器可以在私有副本上工作,对几个小时前的数据进行操作是完全可以接受的)。
对于需要登录的应用程序,您可能需要一个单独的基础设施来跟踪能够反应更快的用户和会话,例如包含用户数据和凭据信息的复制数据库,以及可以确定会话 ID 有效性的单独服务。
一种可能的实现方式是通过对用户 ID、发出 cookie 的服务器 ID 和接受凭证的时间戳进行数字签名来生成会话 ID cookie;然后,各个前端服务器可以联系登录服务器来查询 cookie 的有效性(在实际场景中,您可能希望在那里进行一些优化)。
共享数据集难以管理,而如何最好地实现这一点的答案在很大程度上取决于相关的应用程序;这将是一篇较长的文章。
当硬件使用不足或需要快速更换时,虚拟化会有所帮助。它与负载平衡无关,但绝对是您为服务分布的各个服务器使用的工具之一。