标题索引


  • 追朔原因

  • 反代原理

  • 调度算法

  • 算法评估


追朔原因

http调度算法有多种,在nginx、haproxy、apache、keepalive中等等都有相对应的算法,但是算法根本原理是不变的

反代原理

图解http协议中提到的端到端首部,“分到此类别中的首部会转发给请求/响应对应的最终接受目标,且必须保持在由缓存生成的响应中”(图解http协议83页)通过在varnish抓包分析可知,端到端的请求报头从http请求、到varni代理请求、组后到后端服务器收到请求,一直变化的时源目IP地址,请求头部的端到端时一直尚未发生变化的。

调度算法

加权调度调度算法:加权轮询调度算法为,后端服务器根据权重进行虚拟逻辑服务器,调度服务器使用URL或其他参数进行hash,将hash的数值对权重值之和进行取模计算,最后根据计算结果决定调度逻辑服务器计算节点,从而调度到物理真实服务器,具体可参考下图所示:

图1-1WRR调度算法图

根据上图举例说明,如反向代理服务器调度算法为WRR,若客户端访问URI为http://www.a.com/mp4/fire.mp4,调度器接受到此URI并进行hash计算,计算结果对6(3+2+1)取模,取模结果可定为0、1、2、3、4、5,将URI请求调度到相对应的逻辑服务器,进而调度到真实物理服务器。

致命权限:在并发量较大的情况下,通常反向代理服务器先调度到后端varnish等缓存服务器,若其中一台缓存服务器异外宕机时,权重总和发生变化,取模结果发生变化,严重导致varnish等缓存服务器命中率大大降低,从而增加后端物理服务器的压力,若并发量极大的情况下有可能使得后端服务器无法承载众多流量而罢工。

如采用nginx做反向代理调度配置可参考如下方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[ root@centos7 ~ ]#vim /etc/nginx/nginx.conf
http {
upstream www.jncsy.com {
        server 10.2.3.1 weight=3;
        server 10.2.3.2 weight=2;
        server 10.2.3.3 weight=1;
      }
server
   {
    listen 80;
    server_name www.jncsy.com;
    location / {
        #关闭重定向
        proxy_redirect off; 
        #让真实服务器端接受的真实的host,真实请求IP地址和代理转发的IP地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_pass http://www.jncsy.com;
        }
    access_log logs/jncsy.access.log;
    
}

如采用apache做反向代理调度可参考如下方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#配置加载模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
#在反向代理模
[ root@centos7 ~ ]#vim /etc/httpd/conf.d/vhost.conf
#定义基于http的负载均衡模块    
        <Proxy balancer://www.jncsy.com>
            BalancerMember http://10.2.3.1 loadfactor=3
            BalancerMember http://10.2.3.2  loadfactor=2
            BalancerMember http://10.2.3.3  loadfactor=1
            ProxySet lbmethod=byrequests        
        </Proxy>  
<VirtualHost *:80>
        ServerName www.jncsy.com
        #对代理进行授权
        <Proxy *>
                Require all granted
        </Proxy>
        #apache2.4中需要进行授权
        <Location />
                 Require all granted
        </Location>
    #关闭正向代理      
    ProxyRequests Off
    #响应头部添加Via首部,添加X-Forward-for相关信息
    ProxyVia    On
    #正常情况下host被解析为IP地址,开启此项目保留host的主机名防止后端为虚拟主机
    ProxyPreserveHost On
    ProxyPass / balancer://www.jncsy.com/
    #将URI等进行缓存避免再次获取URI 
    ProxyPassReverse / balancer://www.jncsy.com/   
</VirtualHost>

算法评估

建议采用的方案

本文转自 薛伟博 51CTO博客,原文链接:http://blog.51cto.com/weiboxue/1979612,如需转载请自行联系原作者

http反向代理调度算法追朔相关推荐

  1. nginx反向代理原理及配置详解

    nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行网站的发布处理,另外 ...

  2. nginx反向代理、负载均衡、动态请求

    NGINX 反向代理 我想通过上一章如何测试Nginx的高性能,想必大家对于NGINX作为一个高性能的web服务器毫无异议:但是NGINX的功能绝不局限于简单的web服务器,NGINX在互联网扮演的角 ...

  3. Nginx之反向代理与负载均衡实现动静分离实战

    Nginx之反向代理与负载均衡实现动静分离实战 什么是反向代理与负载均衡 Nginx仅仅作为Nginx  proxy反向代理使用的,因为这个反向代理功能表现的效果是负载均衡集群的效果. 负载均衡指的是 ...

  4. Nginx调度器(反向代理),TCP/UDP调度器

    一,nginx反向代理 环境 步骤一: 部署后端Web 服务器web1和web2:以web1为例: yum -y install gcc pcre-devel openssl-devel yum -y ...

  5. nginx的反向代理以及负载均衡模块的使用

    内容: 1.何为代理 2.nginx的反向代理模块以及使用 3.nginx的负载均衡模块以及使用 一.何为代理 代理,由字面意思可以理解为代为服务的是意思. 代理服务技术是一门很古老的技术,是在互联网 ...

  6. nignx的TCP和UDP调度(nginx反向代理)

    1 案例1:Nginx反向代理 1.1 问题 使用Nginx实现Web反向代理功能,实现如下功能: 后端Web服务器两台,可以使用httpd实现 Nginx采用轮询的方式调用后端Web服务器 两台We ...

  7. Nginx(二):反向代理原理 与 配置文件详解

    相关阅读: Nginx(一):Nginx原理概述 与 安装步骤详解 Nginx(二):反向代理原理 与 配置文件详解 Nginx(三):负载均衡策略 与 Nginx静态服务器 Nginx(四):Ngi ...

  8. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解(1)

    大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负载均衡 六.Nginx之页面缓存 七.Nginx之URL重写 八.Nginx之读写分离 注,操作系统 ...

  9. Nginx反向代理+Go服务实践

    前言 在后端开发期间,会为前端或者平台上提供API服务接口,这时.我们看完今天的文章可以详细了解到Nginx反向代理到后端服务上的过程. Nginx: 是一个高性能的HTTP和反向代理web服务器,同 ...

最新文章

  1. (剑指Offer)面试题18:树的子结构
  2. 前端学习(2488):使用git获取代码
  3. Dubbo之Filter链原理
  4. 查询列名在哪张表_SQL—多表查询
  5. zbbix服务器搭建_zabbix服务器的搭建
  6. android小球移动代码,Android中如何绘制一个跟随手指移动的小球
  7. java常用类--------枚举的基本使用
  8. 海思平台35xx系列sensor不出图问题排查方法(新手来看)
  9. webpack梳理之常用loader(一)
  10. 关闭windows自动更新N种方法
  11. Fast Deep Matting for Portrait Animation on Mobile Phone
  12. FastJson是如何导致App Crash的
  13. OI生涯回忆录(Part7:至高一湖南集训Day3)
  14. oracle 查看用户日志,Oracle查看用户操作sql语句以及数据库日志
  15. 微信机器人康小博来了!!!
  16. 使用fastboot命令刷机
  17. 用Power BI (Power query)高效做IPO上市项目账务梳理(财务总监CFO必看)
  18. 在线程中调用PJSIP中的呼叫出现提示注册线程pj_thread_register的解决方法
  19. U盘硬件设备怎么连接计算机,电脑无法识别u盘设备怎么解决?
  20. 阿里巴巴“奇幻”上市之旅惨遭红灯

热门文章

  1. DT时代下[个推3.0]遵循的四个法则
  2. pku 1724 ROADS BFS +优先队列
  3. 64位windows与32位windows的区别
  4. 华为手机的nfc是什么功能_华为手机NFC只用来乘车?这个功能还不会用,几千块手机亏了...
  5. python创建虚拟环境sublime_如何设置python 虚拟环境 sublime text
  6. querywrapper or and嵌套_两个经常用的逻辑函数AND函数,OR函数
  7. Python夺冠,老牌编程语言该走向何方?网友:崩溃
  8. 0xc0000225无法进系统_冷却塔进风格栅结冰主要原因及对策
  9. android 布局翻页,安卓APP_ 布局(8) —— 基于 RecyclerView 的 ViewPager2翻页
  10. python机械臂api_使用高斯机械臂的API开发