分布式架构系列: 负载均衡技术详解 | 技术头条

戳蓝字“CSDN云计算”关注我们哦!


640?wx_fmt=jpeg

技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!

作者:ITFLY8

转自:架构师技术联盟


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


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


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

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


一、负载均衡原理


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


640?wx_fmt=png


  • 应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。


  • 负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。(一种把网络请求分散到一个服务器集群中的可用服务器上去的设备)


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


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


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


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


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


二、负载均衡分类


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


2.1 DNS负载均衡


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


640?wx_fmt=png


优点


  1. 使用简单:负载均衡工作,交给DNS服务器处理,省掉了负载均衡服务器维护的麻烦


  2. 提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能;

缺点


  1. 可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长;解析过程中,用户访问网站将失败;


  2. 扩展性低:DNS负载均衡的控制权在域名商那里,无法对其做更多的改善和扩展;


  3. 维护性差:也不能反映服务器的当前运行状态;支持的算法少;不能区分服务器的差异(不能根据系统与服务的状态来判断负载)


实践建议


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


640?wx_fmt=png


2.2  IP负载均衡


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


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


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


640?wx_fmt=png


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


优点:


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


缺点:


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


2.3 链路层负载均衡


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


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


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


640?wx_fmt=png


优点:性能好;


缺点:配置复杂;


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


2.4 混合型负载均衡


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


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


方式一,如下图:


640?wx_fmt=png


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


方式二,如下图:


640?wx_fmt=png


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


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


三、负载均衡算法


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


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等软件负载均衡。


640?wx_fmt=png


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg


推荐阅读:

  • 极客头条

  • 英特尔强势上新一大波数据产品,小伙伴们“奔走相告”…… | 极客头条

  • 姚期智提出的"百万富翁"难题被破解? 多方安全计算MPC到底是个什么鬼?

  • 全民 AI !教育部宣布 35 所高校新增 AI 本科专业

  • 深度 | 人工智能究竟能否实现?

  • 程序媛报告:调查了 12,000 名女性开发者发现,女性比男性更懂 Java!

  • 程序员怒了!你敢削减专利奖金,我敢拒绝提交代码!


640?wx_fmt=png喜欢就点击“在看”吧

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

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

相关文章

第七篇:Spring Boot整合Thymeleaf_入门试炼03

基本语法实战案例01 在ThymeleafController中添加此方法 RequestMapping("/show5")public String showInfo5(Model model) {model.addAttribute("msg", "Thymeleaf 第一个案例");model.addAttribute("key", new Date());return &quo…

Qt下自适应分辨率

qt下自适应分辨率应该有两种方法:通过栅格布局;通过缩放比。 本人采用的是缩放比来适应不同的分辨率。首先定义一个类实现屏幕分辨率和长宽缩放比的获取,由于该类可能被多个ui界面使用,所以定义为一个单例模式。代码如下&#xff…

OpenGL ES EGL 简介

目录 一.EGL 简介二.EGL 跨平台之 ANGLE 1.ANGLE 支持跨平台2.ANGLE 支持渲染器3.ANGLE 下载地址 三.EGL 坐标系四.EGL 绘图步骤五.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录…

第八篇:Spring Boot整合Thymeleaf_入门试炼04

继承parent父工程&#xff0c;新建一个子项目&#xff0c;名称为spring-boot-chapter-8 1、引入 thymeleaf 模板依赖 <!-- 引入 thymeleaf 模板依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-star…

华为发布基于第二代英特尔®至强®可扩展处理器家族的新一代服务器

2019年4月4日&#xff0c;在主题为“智能&#xff0c;计算进化”的发布会上&#xff0c;华为正式发布了基于第二代英特尔 至强 可扩展处理器以及支持英特尔傲腾 ™ 数据中心级持久内存的新一代FusionServerPro智能服务器&#xff0c;包括2路、4路机架式服务器&#xff0c;高密X…

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä'

java.sql.SQLException: The server time zone value ‘’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you w…

第九篇:Spring Boot整合Spring Data JPA_入门试炼01

Spring Data JPA:介绍&#xff1a; Spring Data就是spring提供操作数据库的框架&#xff0c;而Spring Data JPA只是Spring Data框架下的一个基于JPA标准操作数据库的模块。 Spring Data JPA&#xff1a;基于JPA的标准对数据进行操作。简化持久层的代码&#xff0c;只需要写接口…

华为智能计算发布FusionServer Pro智能服务器

【中国&#xff0c;北京&#xff0c;2019年4月3日】华为智能计算业务部在北京召开了主题为“智能&#xff0c;计算进化”的发布会&#xff0c;正式发布FusionServer Pro智能服务器。将从“智能加速、智能管理、智能数据中心”三个层次助力数据中心智能化升级。 世界正从数字化…

分布式精华问答:分布式环境下如何保持数据一致性的?| 技术头条

分布式开发的时代实际上早已悄悄地成为了时代的主流&#xff0c;今天&#xff0c;我们就来看看关于分布式的精华问答吧&#xff01;1Q&#xff1a;分布式系统中主要是用到了服务化&#xff0c;消息中间件&#xff0c;数据库拆分&#xff0c;便于横向扩展和维护&#xff0c;但分…

第九篇:Spring Boot整合Spring Data JPA_入门试炼03

CrudRepository接口的使用 CrudRepository接口&#xff0c;主要完成一些增删改查的操作。 注意&#xff1a;CrudRepository接口继承Repository接口 1、持久层接口&#xff1a; package com.gblfy.repository;import com.gblfy.pojo.Users; import org.springframework.data.r…

第九篇:Spring Boot整合Spring Data JPA_入门试炼04

六、PagingAndSortingRepository接口 前言&#xff1a;该接口提供了分页与排序的操作&#xff0c;该接口继承了CrudRepository 1、持久层接口&#xff1a; public interface UserRepositoryPagingAndSorting extends PagingAndSortingRepository<Users,Integer> { }测试…

成立一周?谷歌人工智能道德委员会解散了?近日,金山云和小米刚签订了不超过9000万的硬件产品供应协议,闹哪样? | 极客头条...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 亚马逊推Alexa无线耳机&…

2019年技术盘点微服务篇(二):青云直上云霄 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员硬核评测&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;作者&#xff1a;孙浩峰过去几年来&#xff0c;“微服务架构”方兴未艾&#xff0c;尽管这种…

第九篇:Spring Boot整合Spring Data JPA_入门试炼06

八、JpaSpecificationExecutor接口 前言&#xff1a;该接口主要提供了多条件查询的支持&#xff0c;并且可以在查询中添加分页和排序。 注意&#xff1a;JpaSpecificationExecutor接口是独立存在的。完全独立。 1、持久层接口&#xff1a; public interface UsersRepositoryS…

第十篇:Spring Boot整合mybatis+逆向工程(Mysql+Oracle) 入门试炼01

1、添加pom依赖 <dependencies><!--springboot web 启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--thymeleaf 启动器--><d…

Docker简介与简单使用 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;常仕禄转自&#xff1a;Docker前一段花了一段时间研究Log4j2的源码&a…

OpenGL ES EGL eglSwapBuffer

目录 一. EGL 前言二. EGL 绘制流程简介三.eglSwapBuffer 函数简介 四.关于多个 EGLContext五.共享 EGLContext六.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> Open…

第十篇:Spring Boot整合mybatis+Mysql 入门试炼02

前言&#xff1a; 1、(SprigBoot整合SpringMVCMybatis) 2、以thymeleaf作为视图层技术整合 3、springboot版本2.0.5.RELEASE 创建项目 1、添加依赖及启动器 <dependencies><!--springboot web 启动器--><dependency><groupId>org.springframework.boo…

要闻君说:台积电将为iPhone生产5纳米A系列芯片?腾讯云TStack与银河麒麟完成互认证……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 【4月9日 星期二】云の声音切…

Centos出现-bash: unzip: command not found的解决办法

利用unzip命令解压缩的时候&#xff0c;出现-bash: unzip: command not found的错误 问题定位&#xff1a; unzip——命令没有找到&#xff0c;其原因肯定是没有安装unzip。 解决方案在线安装unzip &#xff1a; 执行命令&#xff1a; yum install -y unzip zip安装成功后就可…