公司目前有一个典型的 Web 服务器设置:一个 Web 服务器和一个数据库服务器。不幸的是,由于 Web 服务器和数据库负载过高,经常会出现问题,因此我被要求使用 2 个 Web 服务器配置负载平衡。
然而有人要求我将第二个网络服务器放置在另一个公司站点(不同的国家/地区),以尽量减少网络问题的影响。
这是个好主意吗?由于重定向到距离太远的 Web 服务器,这是否会导致更多网络问题?
答案1
根据您提供的详细信息,我认为没有足够的信息来判断这是不是一个好主意。这取决于该应用程序是否被多个国家使用,以及其他因素,例如延迟敏感性。两个数据中心之间的负载平衡可能比同一数据中心内的负载平衡稍微复杂和昂贵一些。
提高绩效的一些技巧:
- 考虑一个应用程序缓存(例如优化缓存服务器):这将减少您的网络服务器的负载,即静态内容。
低复杂度负载平衡:
- 为您的网站添加指向第二台 Web 服务器的新 DNS“A 记录”。例如:www.mysite.com 将以循环方式解析到 webserver1 和 webserver2 - 请小心您的 Web 应用程序如何处理会话。如果您有多个 DB 服务器,则需要让所有 DB 相互同步。
中等复杂度负载平衡:
答案2
假设您仍然只有一个数据库,那么最重要的问题是,远程 Web 服务器在多大程度上依赖该数据库?
如果 Web 服务器所做的一切都依赖于与另一个位置的数据库通信,那么在发生网络问题时,您的风险就会增加。如果您的页面需要多个数据库查询,那么由于 Web 服务器和数据库之间需要额外的网络往返,这些页面的呈现速度会更慢。
复制数据库是一种选择。但保持复制数据库之间的一致性非常具有挑战性。(要处理一个副本以任意方式发生故障的情况,您至少需要四个副本。任何声称用更少的副本实现这一点的解决方案都在对故障的行为方式做出假设,一旦故障不符合这些假设,系统就会崩溃。)
如果复制数据库对您来说不切实际,并且 Web 服务器在没有数据库的情况下就无法执行任何有意义的操作,那么我建议的最大冗余配置如下:
使用三台服务器,每台服务器配备两个网络接口。一台用作数据库,另外两台用作 Web 服务器。每台 Web 服务器都通过以太网电缆直接连接到数据库。它们之间甚至不需要交换机,这样只要 Web 服务器和数据库都处于启动状态,它们就可以相互通信。
这两条以太网电缆占用了大部分接口。每个 Web 服务器上只剩下一个可用接口。剩余的接口连接到两个独立的网络提供商。根据我的经验,与网络提供商的连接是设置中最不可靠的部分,因此是最重要的冗余部分,我在此处描述的设置可以使该部分冗余,而无需将数据库复制到多个服务器。即使其中一个提供商搞砸了 BGP,以至于他们的整个 AS 都脱离了互联网,你的网站仍然可以通过另一个 Web 服务器访问。