地理负载平衡

在一家公司他们目前有一个典型的networking服务器设置:一个networking服务器和一个数据库服务器。 不幸的是,由于Web服务器和数据库的负载很高,所以经常会遇到问题,所以我被要求用2个Web服务器来configuration负载平衡。

然而,有人要求我把第二个networking服务器放在另一个公司网站(不同的国家),以尽量减lessnetworking问题的影响。

这是一个好主意吗? 这不会导致更多的networking问题,因为redirect到这么远的networking服务器?

根据你提供的细节,我不认为有足够的信息说这是一个好主意。 这取决于应用程序是否被多个国家使用,以及延迟敏感性等其他因素。 2个数据中心之间的负载平衡可能比同一个数据中心内的负载平衡稍微复杂一些。

你可以做一些技巧来提高性能

  • 考虑应用程序caching(如Varnishcaching服务器 ):这将减less对您的Web服务器的负载,即静态内容。

低复杂度负载平衡

  • 为您的网站添加一个指向第二个Web服务器的新DNS“Alogging”。 例如:www.mysite.com将循环parsing到webserver1和webserver2 – 请小心您的Web应用程序如何处理会话。 如果您有多个数据库服务器,则需要将所有数据库彼此同步。

中等复杂度负载平衡

  • 考虑一下诸如F5之类的负载平衡器设备,它们位于Web群集之前。
  • 考虑一下CDN服务,如: Incapsula , Akamai或CloudFlare

假设你仍然只有一个数据库,最重要的问题是,远程Web服务器将依赖于数据库多less?

如果networking服务器所做的一切都取决于与其他位置的数据库进行通信,那么在出现networking问题的情况下,您将增加曝光度。 如果您的页面需要多个数据库查询,那么由于networking服务器和数据库之间的额外networking往返,这些页面的渲染速度会较慢。

复制数据库将是一个选项。 但是保持复制数据库的一致性是非常具有挑战性的。 (为了处理一个复制品以任意方式失败的情况,你至less需要四个副本,任何声称用较less的副本实现这个副本的解决scheme一直在假设失败的行为,一旦失败达不到这些假设,系统崩溃了。)

如果复制数据库对您来说不切实际,并且Web服务器在没有数据库的情况下无法做任何有意义的事情,那么我build议的最大冗余configuration如下:

使用三台服务器,每台服务器配有两个networking接口。 一个是数据库,另外两个是web服务器。 每个networking服务器都通过以太网电缆直接连接到数据库。 它们之间不会有交换机,只要networking服务器和数据库都启动,它们就可以相互通信。

这两根以太网电缆占据了大部分接口。 每个networking服务器上都有一个可用的界面。 其余的接口连接到两个独立的networking提供商。 根据我的经验,与networking提供者的连接是设置中最不可靠的部分,因此也是冗余最重要的部分,而我在这里描述的设置可以使该部分冗余,而无需将数据库复制到多个服务器。 即使其中一个提供商弄糟了BGP,以至于他们的整个AS从互联网上掉下来,您的网站仍然可以通过其他的networking服务器。