当一台服务器有大量请求时,服务器会资源不足,导致客户端请求超时响应,返回502这样的错误。这个时候我们会想法增加服务器资源。
- 一种方式是使用一台电脑变成超级计算机。优点是部署管理方便。缺点是升级1倍机器它的价格不止一倍,同时这个服务器挂了整个服务都不能工作了。
- 一种方式是用多台低性能的服务器一起处理,分给每个服务器的工作都能支持。优点是它的价格就线性增长,一台服务器挂了还有其他的运行支持。缺点是部署稍微复杂一点。
对应多台服务器协同工作的机制,上层必然有个请求分发者,将请求分发给各个服务器,它就是负载均衡服务器SLB(Server Load Balancer)。
它的主要任务是合理的把请求分发给相应的服务器,这里合理就是调度算法。
调度算法正常会根据服务器的具体情况进行调度,所以它还有监控服务器健康状态的功能。
对于健康检查要尽量反应服务器应用真实环境,比如我是nginx+php,如果让SLB读取服务器的html文件,那么只能反应nginx的状态,无法反应php的状态。所以这里要读取一个简单的php文件来反应服务器环境。
负载均衡器目前主要也有两种,各大厂商的4层和7层架构,说白了就是SLB支不支持解析请求内容。
- 情况一 不支持解析请求内容,那么请求来了SLB就只能简单的转发给正常运行的服务器。
- 情况二 支持解析请求内容,那么SLB就能做更多的事情,SLB能针对特定内容做特定处理,比如子域名,子路径转发到指定服务器
上面提到的4层就是tcp层,是无法解析应用层内容的,就是情况一了,但它的服务器结构简单,性能不错。
而7层就是应用层,就是情况二了,但它的服务器结构复杂,性能赶一就差些。
具体的架构可以参考负载均衡原理与技术实现