高性能web站点--负载均衡
来源:互联网 发布:iscroll.js 下载 编辑:程序博客网 时间:2024/06/05 18:41
负载均衡
这个话题是高性能站点的必备话题
所谓负载均衡就是将负载尽量的均衡分摊到多个不同的服务单元(比如现在我们讲的就是后台服务器),来保证我们服务的可用性,可靠性,提供用户最好的用户体验。
简单手工选择
这个场景,我们在下载某个资源的时候会经常看到。比如下载一个软件,会让我们选择网通,电信,等等
dns 轮询
对于大型网站的域名,多数都对同一个主机添加了多条A记录,这样实现简单的DNS轮询。DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP地址上,这样来实现最简单的负载均衡。
这样实现的价格非常低,但是不可靠。有两个非常明显的缺点。
- 可靠性低:
假设一个域名DNS轮询多台服务器,其中一台发生故障,那么所有分配到访问这台服务器的请求都会出错。就算DNS去掉了该服务器的IP,但是由于现在Internet上,各地电信,网通等宽带接入商将很多的DNS放在缓存中,以节省缓存时间,这就导致DNS生效的时间是不确定的。
- 负载不均衡:
DNS负载均衡采用的是简单的轮询算法, 不能区分服务器的差异, 不能得知反映到服务器的当前运行状态,所以也就做不到为性能好的服务器多分配请求。DNS服务器按照一定的层次结构的,其实就是倒挂树的结构, 本地DNS服务器会缓冲已经解析了的域名和IP的映射, 还有本地计算机也会缓存解析映射, 这些就导致DNS服务器的用户在一段时间内访问的都是同一台web服务器。这会导致的结果是:某几台服务器负额 很低, 某几台负额很高, 负载不均衡。 因此, DNS轮询方式仅仅适用在可靠性要求不高的服务器集群, 比如一些静态的网页服务器集群, 图片服务器集群。
加权轮询
直观理解就是计算当前各个后端服务器的当前权值,然后选择得分最高的服务器处理当前请求,这里我们可能要考虑一些细节,比如多少次连接失败会使得服务器不能参加被选择,时间又是多少?
这种方式有一个明显的缺点,就是session会话机制的问题。比如现在我们使用nginx反向代理的三台服务器A,B,C。如果按照当前权重
A=54, B=13, C=52,
这个时候客户端来的请求,自然会分配给A服务器处理,分配之后,会改变当前权重。
比如:这个时候
A=50, B=13, C=52,
那么就会把这次请求分配给了C服务器,这样就带来一个问题,就是前面建立的session数据还在A服务器上,C服务器并没有这次请求的任何状态,也就是说丢失了会话状态。当然,如果三台服务器共用session数据,那么也可以保持用户的会话状态。
ip_hash
这个方式是利用哈希运算,计算当前用户访问的服务器地址,然后直接分配到该服务器,以后再次请求的话,会直接分配到该同一个服务器上的。
这里就要求我们的散列函数必须是非常均衡的,能够考虑到服务器负载均衡。nginx散列函数把客户的ip,和服务器的状态都考虑进去了。
这里相比加权轮询有一个特点,能够保持用户会话。也就是同一个用户经过一次散列之后,以后总能分配到同一个服务器上。
博客站点:www.ccooa.net
- 高性能web站点--负载均衡
- Web负载均衡 -- 《构建高性能Web站点》读书笔记
- 基于LVS负载均衡的高性能Web站点设计与实现
- 基于LVS负载均衡的高性能Web站点设计与实现
- 基于LVS负载均衡的高性能Web站点设计与实现
- 基于LVS负载均衡的高性能Web站点设计与实现
- 高性能负载均衡缓存web架构
- 高性能Web站点
- 高性能web站点
- 高性能web站点
- 使用负载均衡技术建设高负载的网络站点
- 使用负载均衡技术建设高负载的网络站点
- 使用负载均衡技术建设高负载的网络站点
- 使用负载均衡技术建设高负载的网络站点
- 使用负载均衡技术建设高负载的网络站点
- 构建高性能web站点
- 构建高性能web站点
- 构建高性能web站点
- Device Tree
- 关于Swing中自定义类的显示问题引发的一点感想
- test
- 隐藏Console窗口无效(续1)
- 项目介绍
- 高性能web站点--负载均衡
- 关于C++的感想
- 黑马程序猿——C#枚举器深入解析
- 音频单元托管基础草稿
- 从上层APP到底层驱动的调用过程
- java栈实现括号匹配
- Modbus通讯协议学习
- 第一个aauto程序
- EOF是什么?