负载均衡的解决方案

article/2025/8/25 3:39:16

负载均衡的解决方案

前言

我们在设计分布式系统的时候往往需要考虑系统的伸缩性,这里所说的伸缩性指的是我们可以通过添加服务器节点的方式来提升我们整个系统的并发能力,这种提高伸缩性的基础原理其实就是我们所说的——负载均衡。

正文

负载均衡

负载均衡是网站必不可少的基础技术手段,不但可以实现网站的伸缩性,同时还改善网站的可用性。

负载均衡算法

  • 轮询:所有请求被依次分发到每台应用服务器上,即每台服务器需要处理的请求数目都相同,适合于所有服务器硬件都相同的场景。
  • 加权轮询:在轮询的基础上,按照配置的权重将请求分发到每个服务器,高性能的服务器能分配更多的请求。
  • 随机:请求被随机分配到各个应用服务器,即使应用服务器配置不同,可以加权随机算法。(这种方法最常用)
  • 最小连接:记录每一个应用服务器正在处理的连接数,将新的请求分发到最少连接的服务器,也支持加权最小连接。
  • Hash选择:对请求的IP地址进行hash计算,实现同一个IP地址的请求总在一个服务器上处理。(实现对有状态应用服务器高可用的一种方式)

负载均衡与反向代理的差异:

  • 负载均衡时基于反向代理来实现的.
  • 反向代理每一种应用服务器只有一个,它会负责把请求完成。(点对点模式)
  • 负载均衡是一种应用服务器可能有多个,它只负责把请求分发到特定的应用服务器中。(它不会告诉前端请求是否响应 只负责传输数据)

四层负载均衡与七层负载均衡的区别

  1. 四层交换机通过解析TCP头等协议的内容,来决定分流的目的地;
  2. 七层交换机则通过解析软件应用层的内容来决定分流的目的地。
  3. 四层是基于IP+端口号进行负载均衡的,七层是基于URL进行负载均衡的。
  4. 七层对负载均衡的设备要求更高,性能方面比四层弱。
  5. 七层负载均衡更加智能化,安全性上更加有保障。

负载均衡实现方案

常见负载均衡的方法有:

  1. 利用Http重定向负载均衡:即利用nginx中的rewirte模块来实现。(客户端行为,不需要服务器转发响应,这种方法性能比较差)
  2. DNS域名解析负载均衡DNS负载均衡的控制权在域名服务商中,通常作为第一级负载均衡手段。(不需要服务器转发响应)
  3. 反向代理负载均衡:即利用nginx中的upstream模块来实现(配置简单,但性能也有局限性,响应要通过反向代理服务器返回给客户端)
  4. IP负载均衡:即利用网关服务器实现负载均衡(性能有提升,响应要通过网关服务器,受限于其网卡带宽)
  5. 数据链路层负载均衡:在通讯协议的数据链路层修改mac地址进行负载均衡。(不需要服务器转发响应,最常见的是LVS

通过硬件方式实现
F5服务器

  • 优点:能够直接通过智能交换机实现,处理能力更强,而且与系统无关,负载性能强更适用于一大堆设备、大访问量、简单应用。
  • 缺点:成本高,除设备价格高昂,而且配置冗余.很难想象后面服务器做一个集群,但最关键的负载均衡设备却是单点配置,无法有效掌握服务器及应用状态。

通过DNS方式实现
DNS负载均衡的实现
可以利用DNS,进行域名解析(但是由于DNS的缓存机制 高可用难以实现)

在这里插入图片描述

DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。

通过软件方式实现
软件负载均衡的四种实现方案:

  • LVS,即Linux虚拟服务器,即使用ipvsadm
  • Nginx
  • HAProxy
  • 基于Gossp实现无中间点的软件负载,如FacebookCassandra

知识点:

  • LVS实施及配置还有维护过程就比较复杂 不常使用
  • 对于Http协议,Haproxy处理效率比Nginx高。
  • 一般场景,建议使用Haproxy来做Http协议负载,但如果是Web,那么建议使用Nginx

LVS
LVS提供了三种具体的实现方式:

  • LVS-NAT(IP负载均衡):请求和响应都会通过代理服务器。 NAT为地址转换技术.
  • LVS-DR(直接路由,不可跨子网,最常用):只会修改链路层报文,不会更改原有的IP报文和TCP报文。请求会通过arp协议+MAC发送到指定服务器,响应会直接发回给服务器。
  • LVS-TUN(IP隧道,可以实现跨子网):工作机制与DR类似,但是采用IPIP隧道协议。

知识点

  • arp地址解析协议:借助arp地址解析协议可以利用MAC地址将子服务器之间与IP地址进行绑定
  • MAC多路访问控制:它是一种信道划分技术, 用分布式算法决定结点如何共享信道,即决策结点何时可以传输数据。

借助代理服务器,实现请求的分发(NAT模式)

  • 代理服务器:提供了 公网IP:115.39.19.22 局域网IP:192.168.0.100
  • 功能:将请求IP报文中的目的地 从公网IP转换成局域网IP
  • 修改请求中的链路层报文、IP数据报、TCP报文涉及了LVS技术,即Linux虚拟服务器技术。
  • 要注意的是IP是网络层协议、TCP是传输层协议、HTTP是应用层协议
    在这里插入图片描述

请求IP数据报

在这里插入图片描述

请求响应分离(DR模式)

  • 借助arp地址解析协议可以利用MAC地址 将子服务器之间与IP地址进行绑定,借助代理服务器将arp广播出去。
  • 实现响应跳过代理服务器,请求的转发从网络层(跨IP传输) 转换成数据链路层,这样本地传输,一定程度提高了安全。

在这里插入图片描述

总结

我们实际在使用负载均衡的时候通常会涉及到失效转移,一般来说如果请求不存在业务状态时(如涉及用户信息)可以直接使用负载均衡机制来切换其它节点来处理请求,但是如果该请求是有业务状态需要结合session共享的方案来实现。

具体的实现可参考我的博客:Tomcat负载均衡时实现session共享

在这里插入图片描述


http://chatgpt.dhexx.cn/article/F3CFZxqg.shtml

相关文章

负载均衡及解决方案

目录 一、什么是负载均衡? 二、负载均衡方案有几种? 1、基于DNS负载均衡 2、基于硬件负载均衡 3、基于软件负载均衡 三、常用的均衡算法有哪些? 1、轮询策略 2、负载度策略 3、响应策略 4、哈希策略 一、什么是负载均衡?…

吃透这份Github点赞120k的Spring全家桶笔记Offer拿到手软

Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。它包SpringMVC、SpringBoot、Spring Cloud、Spring Data等解决方案。 很多研发人员把spring看作心目中最好的java项目,没有之一。Spring系列包含非常多的项目&…

分布式事务及解决方案

1、分布式事务 分布式事务就是在一个交易中各个服务之间的相互调用必须要同时成功或者同时失败,保持一致性和可靠性。在单体项目架构中,在多数据源的情况下也会发生 分布式事务问题。本质上来说,分布式事务就是为了保证不同数据库的数据一致性…

负载均衡方案

负载均衡方案 1、负载均衡概念 一台普通服务器的处理能力是有限的,假如能达到每秒几万个到几十万个请求,但却无法在一秒钟内处理上百万个甚至更多的请求。但若能将多台这样的服务器组成一个系统,并通过软件技术将所有请求平均分配给所有服务…

负载均衡的多种解决方案

以下为原文 当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题。为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层…

信息熵笔记

观察两个事件同时发生时获得的信息量应该等于观察到事件各自发生时获得的信息之和? 两个事件的信息量之和等于两个事件和的信息量? 两个随机变量熵的和大于两个随机变量和的熵 图片引自:https://blog.csdn.net/luoxuexiong/article/details/…

一文弄懂信息熵

引言 今天我们来探讨一下信息熵是怎么来的。 信息熵 信息的价值在于消除事件的不确定性,那事件的不确定性要怎么度量呢?答案就是信息熵(information entropy)。 比如你告诉别人你中了500万彩票,别人会大吃一惊,因为他被消除了…

信息熵 entropy

熵 最早是由热力学定义的一个函数,是普朗克来中国讲学的时候引入的。英文是“entropy”这个字,中文词汇中没有相关的字眼。当时是一个有名的姓胡的学者作为普朗克的翻译。因为这个熵“S”是定义为热量Q与温度的比值,所以当时他翻译是立刻创造…

信息熵学习笔记

简介 在信息论中,熵(entropy)是接收的每条消息中包含的信息的平均量,又被称为信息熵、信源熵、平均自信息量。 熵最好理解为不确定性的量度而不是确定性的量度,因为越随机的信源的熵越大。 比较不可能发生的事情&…

信息熵到底是什么

信息是我们一直在谈论的东西,但信息这个概念本身依然比较抽象。在百度百科中的定义:信息,泛指人类社会传播的一切内容,指音讯、消息、通信系统传输和处理的对象。 但信息可不可以被量化,怎样量化?答案当然…

什么是信息熵

熵 当一件事情(宏观态)有多种可能情况(微观态)时,这件事情(宏观态)对某人(观察者)而言具体是哪种情况(微观态)的不确定性叫做熵(entropy&#xff…

信息熵是什么

信息熵是什么 通过前两节的学习,我们对于决策树算法有了大体的认识,本节我们将从数学角度解析如何选择合适的“特征做为判别条件”,这里需要重点掌握“信息熵”的相关知识。 信息熵这一概念由克劳德香农于1948 年提出。香农是美国著名的数学…

单选按钮html图片,js实现的 图片单选按钮效果

【实例简介】用js实现的radio图片选择按钮效果。 【实例截图】 【核心代码】 用JS实现的radio图片选择按钮效果-脚本之家 .lanrentuku img{border:1px solid #008800;} function myFun(sId) { var oImg document.getElementsByTagName(img); for (var i 0; i < oImg.lengt…

html自定义单选按钮,美化表单——自定义单选按钮和复选按钮

大家都知道&#xff0c;在Web的Form中美化是最头痛的&#xff0c;尤其是表单中的“input[typecheckbox]”、“input[type"radio"]”、“input[typefile]”和select这些元素我们单单只使用CSS是无法匹配设计图的&#xff0c;像背景颜色或者背景图片&#xff0c;甚至说…

Android开发单选按钮功能,android实现单选按钮功能

在我们平时在注册个人信息的时候,经常会让我们选择是男生还是女生,那么这个单选框在Android中是怎么实现的呢?现在我们就来学习一下吧 首先我们要明白实现这样一个效果需要哪几部? 1、在layout布局文件中建立一个文件,我起的名字为activity_radio.xml 代码为: android:la…

单选按钮RadioButton

效果示例&#xff1a; MRadioButton.h //******************************************************** /// brief 自定义单选按钮 /// author y974183789gmail.com /// date 2021/9/18 /// note 支持自定义设置单选指示器位置 /// version 1.0.0 //***************************…

单选按钮(RadioButton)与 复选框(CheckBox)的功能与 用法

按照惯例&#xff0c;先看看两者的区别&#xff1a; 顾名思义&#xff0c;单选俺就就是只能选中一项的&#xff0c;而复选框是可以多选的。 一般来说&#xff0c;单选按钮是用于只有唯一答案的问题的答案选项中&#xff0c;而复选框用于一些可以多选的问题的答案中。 下面看看…

Android——单选多选按钮的使用详解

一&#xff1a;单选按钮 单选按钮类&#xff1a;RadioButton android&#xff1a;checked"true"设置默认选中 单选按钮控件通常与RadioGroup搭配使用。 RadioGroup是LinearLayout的子类&#xff0c;用于将多个单选按钮组合为一组。 同一按钮组内的单选…

Android 之 RadioButton (单选按钮) Checkbox (复选框)

本节引言&#xff1a; 本节给大家带来的是Andoird基本UI控件中的RadioButton和Checkbox; 先说下本节要讲解的内容是&#xff1a;RadioButton和Checkbox的1.基本用法 2.事件处理&#xff1b; 3.自定义点击效果&#xff1b; 4.改变文字与选择框的相对位置&#xff1b; 5.修改文字…

FTP服务器-vsftpd

FTP服务基础 FTP&#xff08;File Transfer Protocol,文件传输协议&#xff09;是典型的C/S结构的应用层协议&#xff0c;需要由服务端软件、客户端软件两个部分共同实现文件传输功能。 FTP连接及传输模式 FTP服务器默认使用TCP协议的20、21端口与客户端进行通信。 20端口用…