• Nginx 负载均衡


    Nginx 负载均衡

    负载均衡由反向代理来实现的

    其中反向代理分为七层代理和四层代理,一般常用的是七层代理,接下来分别介绍一些

    NGINX 七层代理

    七层是最常用的反向代理方式,只能配置在Nginx配置文件的http模块。

    配置方法名称:upstream 模块

    不能写在server中,也不能在location中,在http模块当中是独立的一个配置;七层代理的就是http请求和响应

    工作流程

    客户端 —— http请求 —— 七层代理(代理服务器上) ——代理服务器转发http请求到内部的一组服务器  (web集群)

    客户端不知道请求的代理服务器还是内部服务器,而且代理服务器影藏了内部服务器的IP地址

    实际上访问的是代理服务器,请求到代理后转发给web服务器,最后由web服务器响应给客户端

    NGINX 四层代理

    四层代理是基于TCP/IP 协议层的代理转发方式,可以实现基于IP地址和端口进行负载均衡转发

    四层代理无法获取http请求当中的URL信息,只能对 TCP/UDP 数据包进行转发 —— 流量转发

    配置方法名称:stream
    stream 是不能配置在http模块中,配置在全局当中属于一个独立的模块,不属于其他任何模块

    四层与七层区别       *面

    • 七层走的是http请求,四层走的tcp/udp的数据包,转发的是流量;可以对请求进行深入的解析和处理,流量控制,内容的过滤;七层对请求进行精确处理和控制的场景。
    • 四层代理不能进行流量控制,也没办法对内容进行过滤;四层代理通常适用于需要处理大量连接请求的场景
    • 在实际中,四层和七层可以配合使用
    四层与七层的速度

    四层代理速度比七层代理速度快

    • 四层只是流量转发,不能对请求进行解析和控制;所以速度快
    • 四层代理走的是内核,内核转发的流量,所以速度快
    • 七层对请求进行处理和解析,速度比较慢
    • 七层走的是用户态,访问控制,流量处理,所以速度比较慢七层代理可以提供更高级的服务和更高的用户体验。

    反向代理

    客户端访问代理服务器,代理服务器转发请求流量到后端服务器,后端的web服务器会有多台,用户并不知道最终访问的是哪一台服务器

    作用:负载均衡 高可用 可扩展 提高可维护性

    算法

    Upstream:基于https实现负载均衡,反向代理

    1、轮询算法 rr(默认算法)

    http请求的负载均衡方式、没有缓存、负载均衡的算法;请求轮流分配给后端服务器,轮询算法使用与web服务器处理能力相近的情况,默认算法可以不加

    2、加权轮询

    建立在轮询算法的基础之上,通过给不同的web服务器权重,让处理能力更强的服务器可以分配到更多的请求;虽然配置了权重值,但是轮询的结果未必准确

    3、ip_hash
    根据IP地址计算出一个hash值,使用ip hash算法,同一个客户端的请求会被分配到同一个后端服务器、保证会话的稳定性;后端服务器的数量发生变化,hash会被重新计算,请求的服务器也会发生变化

    4、least_cnn
    最少连接数也会轮询,请求发送到当前连接数最少得后端web服务器;通常适用于后端服务器处理任务耗时不同的情况,避免了所有请求集中在处理能力更强的后端服务器上;通常会和加权轮询配合使用

    5、ur_hash
    根据uri地址计算hash值,使用urlhash相同请求的uri会分配到同一个后端web服务器

    域名访问

    总结

    小场景:并发量很小,默认算法就可以满足适应条件

    后端web服务器的处理能力有差异,加权轮询,和最小链接数配合使用即可

    大型并发:ip hash、url hash 第一次请求之后,会有本地缓存,而且因为hash算法的原因
    请求的后台web服务器不会发生变化,可以提高访问速度(缓存)减轻了后台服务器的请求压力

    ip hash 后端web服务器数量发生变化,请求的服务器也可能会发生变化
    url hash 请求的地址发生变化,请求的服务器也可能会发生变化

    如何做反向代理       *面

    反向代理就是负载均衡,如要做负载均衡应该看你的场景并发量、访问人数有多少,根据这个指标,来确定负载均衡的算法

    并发小:默认轮询或者加权轮询,配合最小连接数使用即可

    高并发:ip_hash或者urL hash来实现,访问一次之后,就不会再切换后端web服务器,下一次访问就是缓存,所以它的速度快,后台web服务器请求的压力也会变小

  • 相关阅读:
    JZ86 在二叉树中找到两个节点的最近公共祖先
    MFQE 2.0: A New Approach for Multi-FrameQuality Enhancement on Compressed Video
    8. 写出int 、bool、 float 、指针变量与 “零值”比较的if 语句
    pytorch图像识别(基于识别验证码),读取本都数据集图片以及使用神经网络进行训练
    kvm虚拟机出现启动不了,NOT available,PV大于分区
    高效管理文件夹名称:如何批量修改指定多样化的文件夹名称
    一文揭秘JavaScript中你不知道的async与await实现原理与细节
    C++核心编程(三)
    7.动态变量与JSON处理
    最「难搞」的英伟达也开源了,下一个会是谁?
  • 原文地址:https://blog.csdn.net/as958361025/article/details/133796036