我该如何平衡我的网站的负载?

我该如何平衡我的网站的负载?

我即将发布一个网站,并打算使用一台数据库服务器和一台前端服务器(因此暂时不需要负载平衡)。但如果我添加更多前端服务器,我该如何对它们进行负载平衡,以便每个网站上的用户数量相等?

答案1

一般来说,我认为负载平衡 Web 服务器分为两类:

基于粘性的负载平衡:

使用此方法,客户端每次都会访问同一个 Web 服务器。例如:

  • 基于IP:根据客户端 IP 地址,客户端会被发送到同一个 Web 服务器。系统会创建其 IP 地址或表的哈希值,并根据该哈希值将其发送到同一个服务器。
  • 基于 Cookie:负载均衡器检查整个或部分网络 cookie,并据此引导客户端。

非粘性方法:

使用这些方法,客户端并不总是被发送到同一台服务器。实现此目的的方法包括:

  • 循环赛:每个网络请求依次发送到网络服务器。
  • 随机算法
  • 连接数量:将请求发送到连接数最少的服务器。
  • 基于资源:跟踪 Web 层的资源并尝试保持资源利用率均匀。

哪种类型?

非粘性方法的分布往往更均匀,但如果各种内容(例如会话)都存储在 Web 服务器本地,则您的应用程序可能无法使用这种方法。此外,使用非粘性会话,您的缓存命中率可能会较低,具体取决于您的应用程序的工作方式。

硬件和软件:

你可以使用硬件和软件负载均衡器。我很喜欢在商用 Linux 机器上运行的基于软件的负载均衡器。我特别推荐HAProxy但你也可以考虑Nginx

答案2

这听起来可能很明显,但你会使用负载均衡器。负载均衡器有很多种类型,但本质上你为你的服务创建一个虚拟 IP (VIP),并让它在任意数量的服务器之间交替传入请求,每个服务器都有自己的 IP。有很多机制可以决定哪个服务器接收哪些请求,从最基本的“循环”方法(简单地发出请求然后以循环方式移动到下一个服务器)到非常复杂的方法(查看服务器内部以确定哪些服务器正在工作且最不繁忙)。

也许您可以向我们提供有关您现有环境和预算的更多详细信息,以便我们帮助您缩小选择类型的范围。

答案3

作为基本负载平衡的一个具体示例,当我从 1 个应用服务器移动到 2 个应用服务器时,我设置了另一个服务器来运行 Squid,除了添加缓存层之外,它还在 2 个服务器上使用循环负载平衡。一旦 Squid 设置并运行,将站点的 DNS 条目更改为从原始应用指向新的 Squid 服务器就很简单了。

就我而言,Squid 是一个显而易见的选择,因为它添加了负载平衡和缓存功能,并且已经得到应用程序 (MediaWiki) 的支持,但还有许多其他软件选择。大多数 Web 服务器(Apache、lighttpd 等)都可以设置为简单的负载平衡器,尽管通常首选更快的服务器(如 nginx)。然后是缓存应用程序(如 Squid/Varnish),最后是更专业的应用程序(如 HAProxy),最后还有硬件负载平衡器,但这些通常更昂贵,用于更高流量/高可用性设置。

相关内容