Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解

news/2024/5/8 14:31:02/文章来源:https://blog.csdn.net/weixin_45136579/article/details/90733378

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解

面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限时,我们需要考虑业务拆分和分布式部署,来解决大型网站访问量大,并发量高,海量数据的问题。

从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决了,从集中到分布的问题,但是每个部署的独立业务还存在单点的问题和访问统一入口问题,为解决单点故障,我们可以采取冗余的方式。将相同的应用部署到多台机器上。解决访问统一入口问题,我们可以在集群前面增加负载均衡设备,实现流量分发。

负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。

本文是负载均衡详解的第一篇文章,介绍负载均衡的原理,负载均衡分类(DNS负载均衡,HTTP负载均衡,IP负载均衡,链路层负载均衡,混合型P负载均衡)。部分内容摘自读书笔记。

本次分享大纲

  1. 负载均衡原理
  2. DNS负载均衡
  3. HTTP负载均衡
  4. IP负载均衡
  5. 链路层负载均衡
  6. 混合型P负载均衡

一、负载均衡原理

系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。因此需要采用横向扩展的方式,通过添加机器来满足大型网站服务的处理能力。比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。这就是典型的集群和负载均衡架构:如下图:

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解

 

  • 应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。
  • 负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。(一种把网络请求分散到一个服务器集群中的可用服务器上去的设备)

负载均衡的作用(解决的问题):

1.解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);

2.提供故障转移,实现高可用;

3.通过添加或减少服务器数量,提供网站伸缩性(扩展性);

4.安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)

二、负载均衡分类

根据实现技术不同,可分为DNS负载均衡,HTTP负载均衡,IP负载均衡,链路层负载均衡等。

2.1DNS负载均衡

最早的负载均衡技术,利用域名解析实现负载均衡,在DNS服务器,配置多个A记录,这些A记录对应的服务器构成集群。大型网站总是部分使用DNS解析,作为第一级负载均衡。如下图:

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解

优点

  1. 使用简单:负载均衡工作,交给DNS服务器处理,省掉了负载均衡服务器维护的麻烦
  2. 提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能;

缺点

  1. 可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长;解析过程中,用户访问网站将失败;
  2. 扩展性低:DNS负载均衡的控制权在域名商那里,无法对其做更多的改善和扩展;
  3. 维护性差:也不能反映服务器的当前运行状态;支持的算法少;不能区分服务器的差异(不能根据系统与服务的状态来判断负载)

实践建议

将DNS作为第一级负载均衡,A记录对应着内部负载均衡的IP地址,通过内部负载均衡将请求分发到真实的Web服务器上。一般用于互联网公司,复杂的业务系统不合适使用。如下图:

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解

1.3 IP负载均衡

在网络层通过修改请求目标地址进行负载均衡。

用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实服务器地址,然后将请求目的地址修改为,获得的真实ip地址,不需要经过用户进程处理。

真实服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器,再将数据包源地址修改为自身的ip地址,发送给用户浏览器。如下图:

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解

IP负载均衡,真实物理服务器返回给负载均衡服务器,存在两种方式:(1)负载均衡服务器在修改目的ip地址的同时修改源地址。将数据包源地址设为自身盘,即源地址转换(snat)。(2)将负载均衡服务器同时作为真实物理服务器集群的网关服务器。

优点:

(1)在内核进程完成数据分发,比在应用层分发性能更好;

缺点:

(2)所有请求响应都需要经过负载均衡服务器,集群最大吞吐量受限于负载均衡服务器网卡带宽;

2.4链路层负载均衡

在通信协议的数据链路层修改mac地址,进行负载均衡。

数据分发时,不修改ip地址,指修改目标mac地址,配置真实物理服务器集群所有机器虚拟ip和负载均衡服务器ip地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。

实际处理服务器ip和数据请求目的ip一致,不需要经过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模式)。如下图:

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解

优点:性能好;

缺点:配置复杂;

实践建议:DR模式是目前使用最广泛的一种负载均衡方式。

2.5混合型负载均衡

由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。将这种方式称之为混合型负载均衡。

此种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。是目前大型互联网公司,普遍使用的方式。

方式一,如下图:

 

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解

以上模式适合有动静分离的场景,反向代理服务器(集群)可以起到缓存和动态请求分发的作用,当时静态资源缓存在代理服务器时,则直接返回到浏览器。如果动态页面则请求后面的应用负载均衡(应用集群)。

方式二,如下图:

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解

以上模式,适合动态请求场景。

因混合模式,可以根据具体场景,灵活搭配各种方式,以上两种方式仅供参考。

三、负载均衡算法

常用的负载均衡算法有,轮询,随机,最少链接,源地址散列,加权等方式;

3.1 轮询

将所有请求,依次分发到每台服务器上,适合服务器硬件同相同的场景。

优点:服务器请求数目相同;

缺点:服务器压力不一样,不适合服务器配置不同的情况;

3.2 随机

请求随机分配到各个服务器。

优点:使用简单;

缺点:不适合机器配置不同的场景;

3.3 最少链接

将请求分配到连接数最少的服务器(目前处理请求最少的服务器)。

优点:根据服务器当前的请求处理情况,动态分配;

缺点:算法实现相对复杂,需要监控服务器请求连接数;

3.4 Hash(源地址散列)

根据IP地址进行Hash计算,得到IP地址。

优点:将来自同一IP地址的请求,同一会话期内,转发到相同的服务器;实现会话粘滞。

缺点:目标服务器宕机后,会话会丢失;

3.5 加权

在轮询,随机,最少链接,Hash’等算法的基础上,通过加权的方式,进行负载服务器分配。

优点:根据权重,调节转发服务器的请求数目;

缺点:使用相对复杂;

四、硬件负载均衡

采用硬件的方式实现负载均衡,一般是单独的负载均衡服务器,价格昂贵,一般土豪级公司可以考虑,业界领先的有两款,F5和A10。

使用硬件负载均衡,主要考虑一下几个方面:

(1)功能考虑:功能全面支持各层级的负载均衡,支持全面的负载均衡算法,支持全局负载均衡;

(2)性能考虑:一般软件负载均衡支持到5万级并发已经很困难了,硬件负载均衡可以支持

(3)稳定性:商用硬件负载均衡,经过了良好的严格的测试,从经过大规模使用,在稳定性方面高;

(4)安全防护:硬件均衡设备除具备负载均衡功能外,还具备防火墙,防DDOS攻击等安全功能;

(5)维护角度:提供良好的维护管理界面,售后服务和技术支持;

(6)土豪公司:F5 Big Ip 价格:15w~55w不等;A10 价格:55w-100w不等;

缺点

(1)价格昂贵;

(2)扩展能力差;

4.4小结

(1)一般硬件的负载均衡也要做双机高可用,因此成本会比较高。

(2)互联网公司一般使用开源软件,因此大部分应用采用软件负载均衡;部分采用硬件负载均衡。

比如某互联网公司,目前是使用几台F5做全局负载均衡,内部使用Nginx等软件负载均衡。

点关注不迷路,支持下呗。

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

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

相关文章

Java程序员进阶笔记实操—大型网站架构技术之负载均衡详解(二)

本次分享大纲 软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结 一、软件负载均衡概述 硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期或者土豪级公司长期使用。因此软件负载均衡在互联网领域大量使用。常…

在Linux下配置.net网站

本文来自一位转载者,不知原文博主,故未注明地址 一、Linux安装 1.1 Linux环境 本篇文章选择VMWare虚拟机安装Linux,使用的Linux是CentOS-7。可以在百度上自行下载一个VMWare和CentOS-7镜像,建议使用最新版。 CentOS-7下载 https:/…

过滤器实现网站访问计数

创建一个过滤器,实现网站访问计数器的功能,并在web.xml文件的配置中将网站访问量的初始值设置为5000。 创建名称为CountFilter的类 创建名称为CountFilter的类,该类实现javax.servlet.Filter接口,是一个过滤器对象,通…

2018-2019 ACM-ICPC, Asia Seoul Regional Contest E题(分段函数二分)

首先放上队友的博客 看到最小最大值第一反应是二分,但是不明白怎么二分,看了队友的博客,以下胡言乱语全是根据队友博客的自己理解 首先我们的目标是errorF最小,设该最大误差是x,那么对于每个点,其误差都要小于x 现在我们考虑两个…

php实战之使用curl抓取网站数据

之前做过一个网站数据抓取的工作,让我充分感受到了计算机科学的生产力。之前为了抓取网站源数据的数据,我们公司只能依靠人多力量大的方式,一点一点从源网站抠,整整干了三天,干得头昏脑涨,听老板说以前有ph…

第一次构建个人网站的记录

很早之前就想构建一个属于自己的个人网站,自己设计样式,管理维护。但是一直没有进行相关的实践。 今天总算是成功了,也算是拥有了一个属于自己的“后花园了”。 点击进入我的“后花园” 下面我就来讲讲如何搭建一个属于自己的个人网站。 搭…

CSS+DIV练手——旅游网站

BS要结了&#xff0c;抽出空来拿CSSDIV练练手&#xff0c;用了理解的会更深刻&#xff0c;这次做的是个旅游网站的界面&#xff08;例子源于《精通CSS.DIV网页设计与布局》&#xff09;。 html代码&#xff1a; <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitiona…

从网站细节入手提高易用性

信息系统 存储了大量信息&#xff0c;提高对信息查找的效率&#xff0c;其系统的可用性会大大的提高。那如何提高效率呢&#xff1f;哪哪些方面入手呢&#xff1f; 想要提高效率&#xff0c;首先简化操作必不可少&#xff0c;拿jc系统来说&#xff0c;基础系统在检索特定类型的…

交互设计[小插曲]--网站UI配色

作为一个前端工程师&#xff0c;我想懂一些基本的网站配色技巧还是必须的&#xff0c;现在将我在BootStrap中看到一个非常不错的配色技巧跟大家分享下&#xff0c;相信大家一看就明白&#xff1a; 同时&#xff0c;我想在这里分享自己对工程师工作态度的一些看法&#xff1a; …

浅谈SEO优化

前段时间帮朋友搬家&#xff0c;被问到会不会写python爬虫&#xff0c;我说不会&#xff08;真的不会&#xff09;。但是去图书城充数的时候还是大概瞄了一下有关python爬虫的书籍的&#xff0c;有各种各样的python爬虫框架&#xff0c;Scrapy、PySpider、Crawley、Grab等等各种…

2021新手建站-宝塔一键部署WordPress(上)

2021新手建站-宝塔一键部署WordPress&#xff08;上&#xff09; 1.前期准备 服务器域名 2.部署宝塔 演示Centos系统下的宝塔部署过程&#xff0c;如果你是其他系统&#xff0c;可以去宝塔官网查看对应的系统如何部署安装&#xff01; 远程登录到你的服务器&#xff08;需要…

【js】多种方式查看网站的cookie

1.F12在浏览器的控制面板console中输入document.cookie查看&#xff1a; 2.在谷歌浏览器的开发者工具Application中找到cookie查看&#xff1a; 3.在浏览器的设置中找到&#xff0c;已谷歌浏览器为例&#xff0c;在谷歌浏览器的地址栏输入&#xff1a; chrome://settings/conte…

Java Web开发 基于HttpServlet的用户登录网站 实例

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01; 一个简单的小例子&#xff0c;基于httpser…

阿里云上部署webservice或者网站,服务器本身测试可以整成使用,但是在其他机器上调用时找不到网页或者webservice

阿里云上部署webservice或者网站&#xff0c;服务器本身测试可以整成使用&#xff0c;但是在其他机器上调用时找不到网页或者webservice 前一段时间做项目时需要用到webservice&#xff0c;开始时在自己的本地机器上创建了webservice,然后在vs2012中发布了这个webservice 然后…

iis部署网站(asp.net或者wcf)出现HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。

首先参考这个&#xff1a; http://blog.csdn.net/xuwei_xuwei/article/details/36895193 https://q.cnblogs.com/q/32443/ 其次&#xff1a; http://www.zhixing123.cn/net/41765.html 还有看下配置iis的时候有没有 都配置过了基本没问题

发布网站到本地IIS出错

错误&#xff1a; win10以前系统以管理员方式打开cmd执行 c:\windows\microsoft.net\framework64\v4.0.30319\aspnet_regiis.exe -i win10以管理员方式打开cmd执行 dism /online /enable-feature /featurename:IIS-ISAPIFilter dism /online /enable-feature /featurename:II…

12个免费学习编程的网站

摘要&#xff1a;无论想学什么,也无论出于什么目的想学,都需要你保持好奇心。但是作为刚想入门的新手&#xff0c;面对眼前海量的信息&#xff0c;或许根本不知道从哪里开始。想学习编程&#xff1f;这里有12个提供免费编程课的网站推荐给你。 曾几何时&#xff0c;编程对极客来…

网站部署到IIS上如何进行调试

在一个网站成功部署后&#xff0c;有时候可能会遇到一些错误&#xff0c;但又不能一眼看出错误源&#xff0c;如果能在源程序里下断点进行调试就好了&#xff0c;这样就能准确的找出错误代码。 下面就跟大家说说如何在一个已经部署了的网站上进行断点调试&#xff08;前提 有网…

【技巧】去哪找高清免费素材?这些资源网站必须收藏!

经常有同学问找素材和看创意的网站&#xff0c;今天就给大家介绍几个&#xff0c;素材免费且好用。 ① picjumbo 网址&#xff1a;https://picjumbo.com/ 美丽的免费照片 为高分辨率下载免费的图片&#xff0c;背景和图像&#xff0c;用于个人和商业用途 ② 01资源网 网址&…