首页 > 编程语言 >Java中负载均衡

Java中负载均衡

时间:2024-05-23 22:28:17浏览次数:20  
标签:负载 Java 中负载 ip DNS 均衡 服务器 请求

文章目录

    • 负载均衡背景
    • 如何实现负载均衡呢 常见的负载均衡有三种
    • 负载均衡的作用范围
    • 负载均衡的的常用算法

负载均衡背景

在互联网的发展早期 由于用户量较少业务需求比较简单 对于软件应用来说 我们只需要一台高配的服务器既可以完成整个业务的支撑 这样的软件架构成为单体架构

随着用户量的增加服务器的请求量也在增加在这个过程中单体架构会产生两个问题

  • 软件性能的逐步下降 访问延迟越来越高

  • 单体架构容易出现单点故障 也就是说出现了一个问题导致整个应用不可用

为了解决整个问题,我们引用了集群话的部署架构 也就是说把一个软件应用同时部署于多台服务器上类似于

  • 架构变化带来的问题

    • 客服端请求如何均匀的分布在多台目标服务器上

    • 如何检测目标服务器的健康状态使得客户端请求不向已经岩机的服务器发送请求?

    负载均衡的核心就是让客户端的请求合理的均匀的分发到多台目标服务器上 由于请求被多个节点分发使服务器的的性能得到有效的提升

如何实现负载均衡呢 常见的负载均衡有三种

  • 基于DNS实现负载均衡

        只需要在DNS的服务器上针对某个域名做多个ip映射

  • 工作原理

         通过域名去访问某个网站的时候会通过DNS服务器进行域名解析得到ip地址

         DNS服务器可以随机的分配一个ip地址进行访问

         DNS还可以就近得到访问原则 从而缩短通信的距离 提升整个网站的请求效率

   DNS的优点 缺点

  • 缺点

    由于DNS多级缓存的特性 当我们去修改的同时ip变更不及时 从而影响负载均衡的效果

  • 优点

    成本低 ,配置简单,不需要额外的开发和维护成本

  • 基于硬件设备实现负载均衡

    • 把他理解为一个网络设备 类似于网络交换机 性能比较好 可以每秒钟处理百万级别的请求 同时支持多个负载均衡算法 非常灵活的配置 不同的负载策略 还具有防火墙等安全功能 硬件设备室商业化的产品 他没有专门的售后来支持 企业不需要精力去维护 常见的硬件设备F5 由于硬件负载设备比较贵 一般应用大型的银行 政府 电信等产业

  • 基于软件实现负载均衡

    • 是通过一些开源的软件或者商业软件来完成 负载均衡 常见的软件负载均衡有Nginx. LVS.HAProxy等

      现在有绝大多数的互联网使用 主要是因为免费 企业不需要投资较高的成本 , 开源 不同企业的需求有差异 可以在开源软件上进行二次开发 灵活性比较高

这三种方式没有好坏之分 只有是否合适 根据自己的需求来选择

负载均衡的作用范围

  • 网络通信层面来实现请求的分发 而在网络架构中基于OSI的模型 又分为七层网络模型 我们可以在某些网络上去做请求的分发处理 因为可以根据这个特性 可以将负载均衡分为 二层负载 三层负载 四层负载以及 七层负载

  • 二层负载 就是基于Mac地址来实现 请求分发 一般采用虚拟Mac的方式来实现服务器收到请求之后通过动态分配后端服务器的实际Mac地址去进行响应从而实现负载均衡

  • 三级负载 是基于ip层的负载 是通过虚拟ip来实现通过访问虚拟ip服务器收到请求后根据获取到实际的ip地址去做分发

  • 四层负载 是通过请求的报文中的目标地址和端口来进行负载

  • 七层负载 是基于应用层的负载 服务器段可以根据http协议中的请求的报文信息来决定分发到那一台目标服务器上

负载均衡的的常用算法

轮训

多台服务器去按照顺序轮训的方式去进行逐一负载 这样的话每个服务器可以获取相同的请求次数

  • 随机

    根据随机算法 获得一个目标服务器地址 由于有随机性 每一台服务器获得的请求数量不一定均衡

  • 一致性 hash

    有时候会根据有着相同请求的hash码的请求永远发送到同一台目标节点上

  • 最小连接数

    根据服务器的请求数量来决定请求的分发权重 也就是说请求更少的结点将会获取更多的请求

  • 加权轮询

    可以根据加权的比例每台服务器上获取的请求数量 加权比例应该怎么算呢 比如有10个请求 服务器1号加权是60% 服务器2号加权是40% 在这个过程中我们可以采用随机算法我们取1-10之间的随机数 如果是在1-6中放到服务器1中 如果是6-10放到服务器2号

标签:负载,Java,中负载,ip,DNS,均衡,服务器,请求
From: https://blog.csdn.net/2301_77091876/article/details/139118678

相关文章

  • Java中继承与接口的区别(浅谈)
    在Java中,继承和接口是两种不同的方式来实现代码的复用和扩展。以下是它们之间的主要区别:1.继承:继承是面向对象编程中的一种方式,允许一个类继承另一个类的属性和方法。继承的主要目的是为了实现代码的复用,即子类可以继承父类的属性和方法,从而避免重复编写相同的代码。此外,继......
  • Java练习(并发模式)
    设计一个简单的生产者-消费者模型,其中生产者负责生成数据,消费者负责处理数据。为了在生产者和消费者之间传递数据,使用一个有界缓冲区(例如,`ArrayBlockingQueue`)作为它们之间的通信通道。要求:1.创建一个`Producer`类,该类包含一个`produce()`方法,用于生成数据。生成的数据应该......
  • Java 形参 实参 参数传递
    Java形参实参在Java中,形参和实参是两个重要的概念,它们分别指形式参数和实际参数。形参:形式参数是在方法定义时用于接收调用该方法时传递的参数。它只在方法内部有效,方法结束后就消失了。实参:实际参数是在调用方法时传递给方法的参数,它可以是常量、变量、表达式、或者方法的......
  • 框架(Java相关)基础
    框架前置知识时间:2024-05-20星期一学习内容Maven构建工具Maven的核心特性Maven的依赖管理Maven的工程打包工厂模式设计模式工厂模式工厂模式的引用场景反射机制反射及作用反射的四个核心类反射在项目中的应用Lambda表达式Lamb......
  • 计算机Java项目|基于springboot的网上购物商城系统研发
    作者主页:编程指南针作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互......
  • 计算机Java项目|基于Springboot甘肃非物质文化网站的设计与开发
    作者主页:编程指南针作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互......
  • 计算机Java项目|Springboot教师工作量管理系统
    作者主页:编程指南针作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互......
  • 【Java学习】第19节:时间类(Date、Calendar、SimpleDateFormat)、包装类
    目录第一章Date类1.1Date概述1.2Date常用方法第二章SimpleDateFormat类2.1构造方法2.2格式规则2.3常用方法2.4练习1(初恋女友的出生日期)2.5练习2(秒杀活动)第三章Calendar类3.1概述3.2常用方法3.3get方法示例3.4set方法示例:3.5add方法示例:第......
  • js逆向系列1.1、JavaScript基础语法
    JS逆向爬虫语法初阶dy:a_b,xhs:x-s等有需要联系。v:a2247429407【1】JavaScript初识JavaScript是一种用于在客户端(即用户的浏览器)上运行的编程语言。它是一种脚本语言,可以直接嵌入到HTML页面中,并由浏览器解释和执行。在客户端环境中,JavaScript可以与用户交互,操作和修......
  • [Java]Socket套接字(网络编程入门)
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18032037出自【进步*于辰的博客】参考笔记二,P61。注:“一对一”、“多对多”是相对于Socket而言,而非服务端/客户端类的个数。目录1、概述2、二种聊天模式2.1“一对一......