负载均衡是指的是把请求均匀的分摊到多个服务器上处理。一般常见的负载均衡有两种:①客户端与反向代理服务器之间的DNS负载均衡②反向代理服务器与应用服务器之间的负载均衡(这种负载均衡有很多,可以是weblogic的负载均衡,可以是Apache+Tomcat负载均衡,也可以是nginx负载均衡,这里只讨论nginx负载均衡)。

负载均衡的关键在于如何使请求均匀的分摊到服务器上。这里考量均匀不仅仅只的是请求数量上的一致,还有服务器压力的平均。如何均匀的分摊,取决于所选的负载均衡策略。

先说DNS负载均衡(GSLB

dns负载均衡是通过DNS服务器实现的,主要用于把请求均匀的分布到nginx服务器上。其实真是情况中可能是用来根据地域区分请求。但是一个地域中的请求还算需要均匀的分配到nginx服务器上的。

有两个缺点:一个是无法区分服务是否挂掉,即时某个NGINX服务器挂掉了,DNS仍然会分配。另一个是DNS缓存的问题,用户访问网站,网站域名被DNS服务器解析为某个IP。这个IP一般情况都会在客户端本地进行缓存,短时间内下次再访问这个域名,会直接从缓存中拿,无法达到真正的均匀,但这对服务器影响不算太大。重要的请求个数无法真正的做到均衡,比如每个Nginx服务器拿到100个请求,但是所有的耗时大请求都集中到某一台服务器中,那么这个服务器压力将会很大。其他的会比较空闲。

Nginx负载均衡

nginx是目前流行的,优秀的反向代理服务器(其实他不仅仅是反向代理服务器,还是web服务器,也可以是邮件代理服务器,感谢俄罗斯人的智慧)。nginx作为反向代理服务器,主要负责把请求均匀的分摊到应用服务器中。为了达到均匀,Nginx有五种负载均衡策略。

1.轮询
请求依次轮流往每个应用服务器上进行分配,分配策略比较简单。
缺点:不均匀,可能会出现,某些服务器接受的请求较重,负载压力重,有些负荷小,不可控。另外服务器之间需要进行session同步。

2.权重轮询
在轮询的基础上给每个应用服务器一定的权重,比如三台服务器,权重设置为 0.4:0.4:0.2。来到10个请求(序号1到10),那么根据轮询以及权重,序号1、4、 6、 9的请求会打到 第一台服务器上,序号 2、 5 、7 、10 的请求会打到第二台服务器上,剩余序号3 、 8的 请求打到第三台服务器上。
优点:可以根据情况进行调整。可控,仍然需要进行session同步。

3.IP-hash
优点:无需进行session同步,固定IP会固定访问一台服务器。
缺点:恶意攻击,会造成某台服务器压垮。提供的服务不同,面向的地区不同,IP可能会出现集中,造成不均匀,不可控。

4.fair
这种相当于自适应,会根据服务器处理请求的速度进行负载均衡分配。处理请求最早结束的,拿到下一个请求。看上去是不是很好。但是一般都不使用,说是考虑到网络不稳定因素。还有待研究。这种也需要进行session同步。

5.URL-hash
这种是根据URL进行hash,这样某些请求永远打某台服务器。利于利用服务器的缓存,但是可能由于URL的哈希值分布不均匀,以及业务侧重造成某些服务器压力大,某些负荷低。这种也需要进行session同步。

目前比较流行的配置是使用第二种进行配置,但是实际生产中还是需要根据业务特点进行配置,每种策略都具有每种策略的优缺点。

DNS负载均衡与NGINX负载均衡策略的更多相关文章

  1. 浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

    1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. ...

  2. 【转】浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

    1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. ...

  3. zookeeper 负载均衡和 nginx 负载均衡区别 ?

    zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都需要自己写插件:但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种方式.

  4. zookeeper 负载均衡和 nginx 负载均衡区别?

    zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都需要自己写插件:但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种方式.

  5. Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

    转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...

  6. nginx负载均衡tomcat和配置ssl

    目录 tomcat 组件功能 engine host context connector service server valve logger realm UserDatabaseRealm 工作流 ...

  7. day10 nfs服务,nginx负载均衡,定时任务

    ==================nginx 负载均衡==================== 实现nginx负载均衡的效果,并运用nfs服务共享目录,使所有nginx服务拥有共同的http目录 n ...

  8. nginx 负载均衡策略

    nginx 负载均衡策略   1. 轮询轮询方式是nginx负载均衡的默认策略,根据每个server的权重值来轮流发送请求,例如:upstream backend {server backend1.e ...

  9. Nginx 负载均衡-加权轮询策略剖析

    本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更 ...

随机推荐

  1. .Netcore 2.0 Ocelot Api网关教程(5)- 认证和授权

    本文介绍Ocelot中的认证和授权(通过IdentityServer4),本文只使用最简单的IdentityServer,不会对IdentityServer4进行过多讲解. 1.Identity Se ...

  2. Django组件-admin

    一. admin组件的使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INST ...

  3. centos启动排障

    centos6 启动引导第一阶段破坏 破坏mbr前446字节 先备份 [root@centos6 ~]# dd if=/dev/sda of=/root/mbr bs=1 count=446 破坏 [ ...

  4. 某CTF比赛writeup

    看到群里别人参加比赛发上来的附件,自己尝试解了一下. 1.提示RSA,提供flag.enc和pub.key附件 一看就是解RSA,公钥分解得到n和e n=86934482296048119190666 ...

  5. 【VS开发】关于在CFormView中实现CListCtrl控件的注意事项

    [VS开发]关于在CFormView中实现CListCtrl控件的注意事项 标签(空格分隔): [VS开发] 今天调试中发现了一项非常令人恼怒的事情,本来早都知道在CFormView中没有了像在对话框 ...

  6. 【Python】【基础知识】【内置函数】【print的使用方法】

    原英文帮助文档: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) Print objects to the text ...

  7. python+requests 请求响应文本出错返回“登录超时”

    Python+requests请求响应:"msg":"登录过时" 1.出错原代码: import requests import json#页面按条件搜索返回相 ...

  8. 【详细解析】MySQL索引详解( 索引概念、6大索引类型、key 和 index 的区别、其他索引方式)

    [详细解析]MySQL索引详解( 索引概念.6大索引类型.key 和 index 的区别.其他索引方式) MySQL索引的概念: 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分 ...

  9. ueditor 编译出错

    错误 CS0433 类型“Uploader”同时存在于“com.80community.xy, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nul ...

  10. 怎样解决在执行 vue init 时提示 "vue : 无法加载文件" 的问题?

    注意, 以下操作需要 以管理员身份 在 PowerShell 中进行, 不能是 CMD / Git Bash 等. 1. 以 管理员身份 运行 PowerShell 2. 执行 get-Executi ...