nginx 带宽_谈谈Nginx和LVS各自的优缺点以及使用

在最开始呢,咱们先说一下什么叫负载均衡,负载均衡呢,就是将一批请求,根据请求的内容,分发到不同的后端去进行相应的处理,从而提供负载分担,主备切换等功能。

ddf208a6e9724414be6415fd9614c1b8.png

对于不同的负载均衡软件,有不同的流量分发算法,今天,我们最市面上比较主流的两种负载均衡做一个对比,看看他们分别的优缺点,以及在很多情况下如何去做配合。

【四层和七层】

首先,说说四层和七层的区别;

四层负载均衡,指的是IP+端口的负载均衡;

七层负载均衡,指的是基于WEB请求,URL等应用层信息的负载均衡。

当然,同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡。

四层负载均衡,主要分析IP层和TCP/UDP层。

七层负载均衡,要分析应用层协议,比如HTTP协议,URL,cookie等信息。

【关于LVS】

LVS的负载能力很强,因为其工作模式非常简单,仅进行请求的分发,而且其工作在第四层,没有流量,在效率方面最高。

LVS是在四层,可以对几乎所有的应用作负载均衡。

但是LVS对于故障后端感知并不敏感,比如在DR模式下,要是有一个后端服务器没有配置VIP,就会导致请求的一部分数据会直接丢失。

且LVS对于网络环境的稳定性要求较高,如果请求失败了,只能依赖于前端的应用自身的重试机制,负载均衡不对请求进行重新下发。

而且LVS也很受限于网络架构,在设计之初就要考虑到网络架构是否满足LVS负载的前置条件。

【关于nginx】

同样的,nginx也可以用于负载均衡,但是由于nginx需要对源端/目的端都建立连接,所以处理流量的速度受限于机器I/O,CPU内存等一系列配置,所以nginx的负载能力相对较差。

nginx安装,配置都比较简单,与LVS对比,nginx不需要很严格的网络架构,只要网络可以联通即可。

且nginx自身的重试机制,可以保证请求下发失败之后,会重新下发到健康的后端上。

但是,nginx因为没有现成的热备机制,所以,存在单点故障的问题,一般需要搭配keepalived使用。

不过,nginx作为一款应用层负载均衡(后来引入stream模块之后,四层也支持了),可以提供负载分担,贮备切换,HTTPS写在,带宽限速,隐藏真实IP,隐藏真实端口,屏蔽攻击等能力,这是LVS所不能提供的。

515721e3169a9e2c239f9264ed13c1fb.png

【对比】

lvs和nginx都是现在很主流的负载均衡方式,他们各有优缺点,在生产环境需要根据其特点做选择。

LVSNginx 四层四层/七层抗负载能力强弱配置性可配置性低同时也减少了人为出错的概率可配置性高可以配置一些高级功能稳定性稳定性高有完整的双机热备方案稳定性低,有单机故障无现成的双机热备方案网络架构依赖强依赖非常依赖网络架构设计当然可以采用比较简单的NAT方式解决此问题无依赖网络稳定性依赖依赖数据包分发到坏的后端,不会重新分发,会直接返回错误不依赖数据包分发到坏的后端并返回错误后,会尝试重新分发到健康的后端网络流量仅请求流量经过lvs的网络,响应流量由后端服务器的网络返回。FULL_NAT同Nginx。所有的请求和响应流量都会经过nginx宿主机性能要求要求较低lvs仅仅做分发请求,流量并不从它本身出去,所以瓶颈仅仅受限于网络带宽和网卡性能要求较高因为nginx需要对源端和目的端都单独建立连接,中间还涉及到一些数据包的解析处理,所以依赖宿主机的I/O性能和CPU内存转发方式同步转发lvs服务器接收到请求之后,立即redirect到一个后端服务器,由客户端直接和后端服务器建立连接。异步转发在保持客户端连接的同时,发起一个相同内容的新请求到后端,等后端返回结果后,由nginx返回给客户端其他 支持rewrite重写规则:能够根据域名、url的不同,将http请求分到不同的后端服务器群组。节省带宽:支持gzip压缩,可以添加浏览器本地缓存的header头。

【两者配合】

在使用上,一般最前端所采取的的策略应是lvs,也就是dns的指向应为lvs均衡器,主要原因在于nginx虽然功能强大,但是当作为后端的服务器规模庞大时,nginx的网络带宽就成了一个巨大的瓶颈。

但是当lvs作为负载均衡的话,一旦后端接受到请求的服务器出了问题,那么这次请求就失败了。

所以在很多情况下,nginx会作为lvs的节点进行负载均衡,这样,既可以避免nginx的性能造成很严重的带宽瓶颈,也可以利用nginx的错误重传避免lvs一锤子买卖,还能利用nginx的各种高级功能,包括https卸载,报文头修改等。

来源:https://www.cnblogs.com/liuxia912/p/13897907.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 读取 excel poi_Java中读取Excel功能实现_POI

这里使用apache的poi进行读取excel1,新建javaproject 项目:TestExcel2,导入包导入根目录下、lib、ooxml-lib下的所有jar4,操作读取excelimport java.io.File;import java.io.IOException;import java.util.Iterator;import org.ap…

wordpress 自定义分类url 重写_WordPress导航主题-WebStack导航主题

8月份写了一个导航主题,陆陆续续更新了十几版,功能自认已经很完善了,知乎也注册很久了,在这水片文章。首页截图预览地址一为忆 - 收集国内外优秀设计网站、UI设计资源网站、灵感创意网站、素材资源网站,定时更新分享优…

mysql hbase 同步_HBase 简介和使用 Sqoop 同步 Mysql 数据到 HBase

HBase 数据模型Namespace: 命名空间类似于关系型数据库中的 database schemaTable: 表一个 Namespace 下有多个表,一个表可以包含多个行Row: 行在 HBase 中 Row 由一个 Row Key 和一个或多个列及其值组成,数据值的存储按照 Row Key 的字典顺序存储的。Co…

sql跨表查询_白话django之ORM的查询语句

教程源码:z991/django_turital在日常开发中,数据库的增删改查(CDUR)中,查询需求偏多,所以查询的语法比增删改操作多得多,尤其是跨表关联查询,可以让代码精简很多年。直接上代码吧&am…

java对象怎么创建_java对象是怎么创建出来的

1.使用new关键字这是最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。Employee emp1 new Employee();0: new #19 // class org/programming/mitra/exercises/Employee3: dup4: invokespecial #21 // Method org/…

看不懂论文代码怎么办_学位论文中的公式排版(制表位+mathtype+域)

写在前面为什么把公式排版单独拉出来写一篇文章呢?因为公式排版实在是太难了。公式居中标号右对齐,简直反人类好么。在学校期间一直寻找方便的公式排版自动编号方法,但搜索出来的大多只是用到了制表位,公式标号还要自己敲。最后毕…

利用trunk实现vlan内通信_实现不同VLAN间通信——单臂路由

单臂路由是一种实现不同VLAN间通信的技术,其方法是在虚拟机内接口上配置虚拟子接口。该技术是一种应急技术,仅仅用于网络预算不足,无力购买三层交换机,或者网络规模很小的情况下使用。一、实验路由器只需要一个端口和交换机(二层)…

java dispatchevent_java事件处理机制

java中的事件机制的参与者有3种角色:1.event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中2.event source:具体的接受事件的实体&#xff0…

eq值 推荐算法_C++实现十种排序算法

十种排序算法&#xff1a;选择排序插入排序冒泡排序希尔排序快速排序的三种实现方法归并排序堆排序&#xff08;大顶堆&#xff09;计数排序基数排序&#xff08;待实现&#xff09;桶排序&#xff08;待实现&#xff09;#include <bits/stdc.h> using namespace std; vo…

python读取tiff文件进行波段计算_python+tifffile之tiff文件读写方式

背景使用python操作一批同样分辨率的图片&#xff0c;合并为tiff格式的文件。由于opencv主要用于读取单帧的tiff文件&#xff0c;对多帧的文件支持并不好。通过搜索发现了两个比较有用的包&#xff1a;TiffCapture和tifffile。两者都可用pip安装。其中前者主要用于读取tiff文件…

java 线程停止在那个为止_java停止线程

本文将介绍jdk提供的api中停止线程的用法。停止一个线程意味着在一个线程执行完任务之前放弃当前的操作&#xff0c;停止一个线程可以使用Thread.stop()方法&#xff0c;但是做好不要使用它&#xff0c;它是后继jdk版本中废弃的或者将不能使用的方法&#xff0c;大多数停止一个…

java中的action是指什么_Struts2【开发Action】知识要点

前言前面Struts博文基本把Struts的配置信息讲解完了.....本博文主要讲解Struts对数据的处理Action开发的三种方式在第一次我们写开发步骤的时候&#xff0c;我们写的Action是继承着ActionSupport类的...为啥我们继承了ActionSupport类呢&#xff1f;下面我就会讲解到继承Action…

hql 查询条件 set集合_Redis从入门到深入-Sorted_set的value

1. sorted_set 类型新的存储需求&#xff0c;数据排序有利于数据的有效展示&#xff0c;需要提供一种可以根据自身特征进行排序的方式需要的存储结构&#xff1a;新的存储模型&#xff0c;可以保存可排序的数据sorted_set类型&#xff1a;在set的存储结构基础上添加可排序字段2…

pdm生成java_PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换

本篇文章主要介绍了PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换 超详细过程(图文)&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下1.软件准备软件&#xff1a;Navicat 11.1&#xff0c;Powerdesigner 152.安装步骤第一步&…

python逐步回归筛选变量_Python实现逐步回归(stepwise regression)

逐步回归的基本思想是将变量逐个引入模型&#xff0c;每引入一个解释变量后都要进行F检验&#xff0c;并对已经选入的解释变量逐个进行t检验&#xff0c;当原来引入的解释变量由于后面解释变量的引入变得不再显著时&#xff0c;则将其删除。以确保每次引入新的变量之前回归方程…

java里面如何加入高级的东西_如何成为一名Java高级架构师

近些年来互联网快速发展&#xff0c;现阶段的数据量和高并发的诉求&#xff0c;引起了不少传统的技术人员的力不从心&#xff0c;企业愈发关注到了系统架构的重要性&#xff0c;既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的领导型人物——Java架构师应…

mysql获取最好成绩对应数据的其他项_开源数据同步神器——canal

前言如今大型的IT系统中&#xff0c;都会使用分布式的方式&#xff0c;同时会有非常多的中间件&#xff0c;如redis、消息队列、大数据存储等&#xff0c;但是实际核心的数据存储依然是存储在数据库&#xff0c;作为使用最广泛的数据库&#xff0c;如何将mysql的数据与中间件的…

java怎么使用floor_Java floor() 方法

floor() 方法可对一个数进行下舍入&#xff0c;返回给定参数最大的整数&#xff0c;该整数小于或等给定的参数。语法该方法有以下几种语法格式&#xff1a;double floor(double d)double floor(float f)参数double 或 float 的原生数据类型。返回值返回 double 类型数组&#x…

python外部库是什么_如何使用Portable Python安装外部库?

由于管理员权限,我无法在我的机器上安装Python,但我成功下载/打开了Portable Python.我在Windows 7 64位机器上.我怎样才能使用以前的外部库,比如Numpy或Gmpy&#xff1f;解决方法:easy_install正在尝试从源代码安装. gmpy和gmpy2是C扩展,需要兼容的C编译器和其他库(GMP;以及gm…

java创建目录时带权限_java – 无法在外部存储中创建目录,尽管权限显然设置正确...

我有在我的清单文件中,但是尝试创建一个目录时我失败了Log.d(LOG_STRING, android.os.Environment.getExternalStorageState() );java.io.File folder new java.io.File(Environment.getExternalStorageDirectory() java.io.File.separator "test");boolean succe…