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

我将很快发布一个网站,并且正在考虑拥有一台数据库服务器和一台前端服务器(因此还没有需要负载均衡)。 但是,如果我添加更多的前端服务器,我将如何负载均衡,以便每个站点上有相同数量的用户?

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

基于粘性的负载平衡:

使用这种方法,客户端每次都访问同一个Web服务器。 这方面的例子包括:

  • 基于IP:客户端根据其客户端IP地址被发送到同一个Web服务器。 他们的IP地址或表的散列被创build,并根据它们被发送到相同的服务器。
  • 基于Cookie:负载均衡器将检查整个或部分Web Cookie,并根据此指示客户端。

非粘性方法:

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

  • 循环法 :每个Web请求都会依次发送到Web服务器。
  • 随机algorithm
  • 连接数量 :发送请求到连接最less的服务器。
  • 基于资源 :跟踪Web层上的资源并尝试保持资源利用率。

哪种types?

非粘性方法在分发中往往会更平滑,但如果会话等各种事情本地存储在Web服务器中,则应用程序可能无法使用这种方法。 另外,对于非粘性会话,根据应用程序的工作方式,最终的caching命中率可能会更低。

硬件和软件:

您可以同时获得硬件和软件负载平衡器。 我是基于软件的负载均衡器的粉丝,在商品Linux机器上运行。 特别是我推荐HAProxy,但你也可以考虑Nginx 。

这听起来很明显,但你会使用负载平衡器。 有很多种types,但基本上你可以为你的服务创build一个虚拟IP(VIP),并且可以在任何数量的服务器后面交换传入的请求,每个服务器都有自己的IP。 有很多机制可以决定哪个服务器从最基本的“循环”方法中获得哪些请求,这些方法简单地发出一个请求,然后以循环的方式移动到下一个服务器上,到非常复杂的服务器内部去查看这是工作和最不繁忙。

也许回到我们的现有环境和预算的更多细节,我们可以帮助您缩小什么types去。

作为基本负载平衡的一个具体例子,当我从1个应用程序服务器移动到2个应用程序服务器时,我得到另一个服务器设置来运行Squid,除了添加一个caching层之外,这两个服务器还使用循环负载均衡。 一旦Squid安装并运行,将网站的DNS条目从原始应用程序更改为新的Squid服务器是一件简单的事情。

在我的情况下,Squid是一个明显的select,因为它增加了负载均衡和caching,并且已经被应用程序(MediaWiki)支持,但是还有很多其他的软件select。 大多数web服务器(Apache,lighttpd等)可以设置为一个简单的负载平衡器,但是通常像nginx这样的更快的服务器是首选。 然后,像Squid / Varnish这样的高速caching应用程序,以及像HAProxy这样的更专门化的应用程序。最后还有硬件负载平衡器,但是这些平台通常更昂贵,并且用于更高的stream量/高可用性设置。