• 正向代理与反向代理


    正向代理

    客户端想要直接与目标服务器连接,但是无法直接进行连接,就需要先去访问中间的代理服务器,让代理服务器代替客户端去访问目标服务器

    反向代理

    屏蔽掉服务器的信息,经常用在多台服务器的分布式部署上,像一些大型网站,由于访问人数很多,就需要多台服务器来解决,由一个反向代理服务器来代理,客户端发来请求,先由反向代理服务器,按一定的规则分发到明确的服务器,但客户端不知道是哪台服务器,常用Nginx做反向代理

    什么是负载均衡

    将工作任务或者访问请求进行平衡,然后分摊到多个单元、服务器或者组件上执行,解决高并发,高可用(单点故障)、扩展性(水平伸缩)的最高解决方案

    代码仓库定义

    开发人员分别将前段和后端代码都存入自己的代码仓库,由分支进行分类(分支、主分支、分分支)分类储存后,打包上传服务器

    后端打包工具Maven(打包为War、jar包)

    前段打包工具Npm、nodejs

    一般前端打包后会放入/usr/local/nginx/html目录当中(nginx配置)

    后端的打包回放入在Tomcat服务里的Webapps中

    私有仓库  gitlab

    公有仓库  github

    分流策略

    Nginx负载均衡模式(rr负载均衡模式)

    每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails)默认为1,在失效时间内(fail_timeout)默认为10秒,该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效,继续探测,一般来说rr可以根据权重进行均匀分配

    四层代理和七层代理之间的区别:
    七层代理:走都是用户态,需要对http的请求进行处理和解析,解析过程中,可以根据请求头和请求体的内容进行流量控制,内容过滤。但是提供的功能更高级,客户的体验更好。
    四层代理:基于IP地址和端口号,只负责ip和端口转发后端服务器,不对请求做任何处理。只负责转发,四层走的是内核,四层速度较快。四层代理无法提供更加高级的功能,只能转发。

    2、选择场景:


            七层代理:需要对http请求进行和处理,只能选择七层代理(常见的处理方式)
            四层代理: 只需要转发tcp/udp数据包,可以选择四层,也可以选择七层。
    七层可以对ip和端口进行转发,也可以对域名进行代理
    四层只能是ip和端口
    负载均衡算法:有些是无法在四层代理使用。

    3、模块
    七层代理的模块:

    只能写在http模块的全局配置当中。
    upstream: 用于处理http请求,支持反向代理,负载均衡,缓存功能
    在upstream模块中可以配置对个服务器

    四层代理的模块 :
    stream只能写在全局模块当中的单独配置。stream代理无谓协议,只管流量。

    七层代理:
    http全局配置下

    upstream liu {
            server 192.168.10.30;
            server 192.168.10.20;
    }
    location {
            proxy_pass http://test;
    }

    1、轮询
    rr (round robin)负载均衡最简单的算法,轮询。请求轮流分配到后端服务器.
    默认算法,可以不加。
    默认算法,每发起一次都是新的请求,服务器上没有缓存。
    处理器理解能力相近,而且对访问量比较小的网站使用。

    2、加权轮询
    weight 建立在默认轮询基础上。为后端服务器分配不同的权重,处理能力强的可以分配的权重值要高一些。
    轮询次数基本上按照权重进行分配。服务器上也没有缓存。
    中大型网站可以使用加权轮询。
    权重高的服务会被频繁的请求响应。权重低的可能闲置。会和另外一种算法配合使用:最少连接算法。

    3、最少连接算法

    最少连接算法:会把请求放送到连接数量比较少的服务器。
    最少连接数算法可以单独使用,但是一般都是结合加权轮询一块使用,避免所有的请求都发送到处理能力强的服务器,提高整个集群的稳定性。
    中大型网站,可以满足日常访问

    4、ip_hash

    ip_hash: iphash会根据客户端ip地址解析出一个hash值,然后将请求放到对应的后端服务器,下一次用户访问时,同一客户的请求将会被分配到同一台服务器。

    ip_hash第一次 200 访问之后,后续访问都是缓存。第二次访问会304 加载缓存
           注:如果后端服务器的数量发生变化,可能会进行重新分配

    ip_hash适用于高并发,请求不会跳转,请求的是缓存。


    5、url_hash

    url_hash 根据请求的url地址计算hash值,然后将请求发送到相应的后端服务器,相同的url地址请求分配到同一台的服务器

    usl_hash和ip_hash一般是结合一起使用,可以适用于并发较高的场员,只要是ip_hash和url hash

    基于域名的反向代理:

    在/usr/local/nginx/conf/nginx.conf下

    upstream ky32 (
    server www.kgc.com;
    server www.benet.com;
    }
     
    location {
    proxy_pass http://ky32
    proxy_set_header HoST $host
    #把请求的主机名发送给后端
    proxy_set header X-Real-IP $remote_addr;
    #后端服务器获取客户端的真实ip地址。
    }

    四层反向代理

    不能用 hash,只可以使用weight 和 least_conn。
    因为:四层不能对请求处理,只是转发数据包。
    http七层代理:可以处理请求地址和请求的url。
    不能处理,只是转发数据流量

  • 相关阅读:
    [Spring Cloud] gateway全局异常捕捉统一返回值
    RK3568平台开发系列讲解(驱动篇)Linux自带LED子系统驱动实验
    【题解集合】剑指offer第二版
    CV | 360BEV: Panoramic Semantic Mapping for Indoor Bird‘s-Eye View理解
    回归 Regression
    ElasticSearch 报错 FORBIDDEN/12/index read-only / allow delete (api)
    抽象轻松的java——mybaties
    ubuntu22.04@laptop OpenCV Get Started: 013_contour_detection
    python正则表达式
    net-java-php-python-伊犁旅游网站计算机毕业设计程序
  • 原文地址:https://blog.csdn.net/Lachewuxian/article/details/133895513