后台系统可扩展性学习笔记(五)负载均衡

文章目录

  • Load balancer(负载均衡器)
  • 请求传输拆解
  • DNS 负载均衡
  • 客户端负载均衡
  • OSI 七层模型回顾
  • 2 层、3 层负载均衡
  • 3/4 层负载均衡
  • 7 层负载均衡

在 第一节谈到了系统的横向扩展在于从单机扩展到多机,那么面临的第一个问题就是这些机器如何协同工作,即如何调度请求?
在这里插入图片描述

Load balancer(负载均衡器)

多服务器下的请求调度机制称为负载均衡(Load balancing),调度器(Dispatcher)即负载均衡器(Load balancer):
在这里插入图片描述
负载平衡器的基本功能是能够根据调度算法在集群中的多个后端服务器上分发传入请求。
其主要作用是根据既定策略(如随机、轮流)将客户端请求分发给各个服务器,之前有过相关算法整理:13种负载均衡算法
优点:

  • 防止请求到达不可用的服务器
  • 防止资源过载
  • 消除单点故障,提升可用性

还可以用于:

  • SSL termination:处理 SSL 连接,将加密解密的工作前置到调度层
  • 会话保留(Session persistence):集中处理会话,避免切换服务器造成会话状态丢失

也就是说,多机场景下,必须要有一个负责分发/调度请求的负载均衡器,那么,接下来的问题是应该在哪一层实现负载均衡机制

请求传输拆解

考虑一个 HTTP 请求从客户端到服务器的通信过程,可以简单划分为 3 个阶段:

  • 出发:客户端发出请求
  • 途中:请求经网络传输
  • 到达:服务器收到请求

对请求进行分发/调度,就是要想办法(按既定策略)改变请求的目的地,那么,至少有 3 种思路:

  • 出发前:在请求经网络传输之前,就确定最终目的地,例如 DNS 负载均衡、客户端负载均衡
  • 传输中:在网络传输的某些环节改变目的地,例如 4 层负载均衡
  • 到达后:在请求抵达服务器后,进行二次分发,例如 7 层负载均衡

下面逐个讲解这几种负载均衡

DNS 负载均衡

客户端要向服务器发起请求,首先要知道服务器的 IP 地址,通过DNS来查询,DNS 维护着域名与 IP 地址之间的映射关系,因此可以在这里实现负载均衡策略,将请求指向目标服务器(的 IP 地址),例如:

  • 轮流分发:添加一系列 A 记录,将同一域名指向多个不同的 IP 地址即可,称为round-robin DNS
  • 随机分发:采用支持多值应答路由策略的 DNS 服务

这两个方法简单易用,但缺陷也很明显:

  • 可靠性没有保障:DNS 并不检查服务器的可用性,即便目标服务器 down 掉了或者无法访问了,也返回其 IP 地址
  • 更新不及时:DNS 的解析结果往往会被层层缓存,记录更新无法立即生效

客户端负载均衡

同理,把服务器 IP 地址选择机制拿到客户端来实现,就叫客户端负载均衡,由客户端自行选择目标服务器的 IP 地址(不再通过 DNS 查询):
在这里插入图片描述
例如,向客户端提供服务器 IP 列表,客户端发起请求之前随机选取一个 IP,就能达到随机分发的目的
比起 DNS 负载均衡,客户端不存在缓存的问题,而且能够进行更精细的控制,比如检查服务可用性,并从中选取可用的 IP 地址

OSI 七层模型回顾

在计网中我们学过网络的七层模型,将网络通信分为 7 个抽象层:
在这里插入图片描述
自下而上,依次为:

  • 物理层(1):通过物理介质传输原始比特流,即物理信号
  • 数据链路层(2):提供可靠的节点间数据帧传输机制,具体工作包括MAC寻址
  • 网络层(3):决定数据包传输采取的物理路径,支持IP、ARP等协议,具体包括IP寻址、路由和流量控制
  • 传输层(4):提供可靠的报文传输机制,支持TCP、UDP等传输协议,此时依赖于IP和端口号通信
  • 会话层(5):负责管理会话,以支持通过多次传输连续交换信息
  • 表现层(6):将来自网络服务的数据翻译成应用层可用的格式,具体工作包括字符编码转换、数据压缩、加密解密等
  • 应用层(7):提供高级API的人机交互层,应用能够通过该层访问网络服务,如资源共享、远程文件访问等

其中,第 1 层是原始数据,第 2 层确定目标机器的 MAC 地址,第 3 层确定终点的 IP 地址,以及途经的具体路线,到第 4 层,要根据传输协议确定目标端口号,第 5~7 层不关心终点,因为 IP 地址 + MAC 地址 + 端口号已经唯一确定了目标应用程序.
也就是说,一个 HTTP 请求必须经由这些层才能到达目标服务器,那么,理论上,在第 2~7 层中的任意一层都有机会变更终点,实现负载均衡。而常见的负载均衡机制多实现在第 4 层和第 7 层。

2 层、3 层负载均衡

  • 2 层负载均衡:根据源/目标 MAC 地址进行分发,例如将虚拟 MAC 地址根据既定策略映射到实际 MAC 地址
  • 3 层负载均衡:根据源/目标 IP 地址,以及第 2 层信息进行分发,例如解析虚拟 IP(Virtual IP address)

越靠近底层,所能用来进行分发决策的信息越少,所以 2 层负载均衡的实际用途有限,常见的只有冗余网关协议(如GLBP、VRRP)和链路聚合(Link aggregation,也叫 etherchannel)等。

3/4 层负载均衡

4 层负载均衡基于传输层(第 4 层)信息进行请求分发,包括源/目标 IP 地址,以及数据包头部的端口号,但不考虑数据包内容:

第4层负载平衡使用在网络传输层(第4层)定义的信息作为决定如何在一组服务器之间分发客户端请求的基础。
具体来说,对于Internet流量,第4层负载平衡器根据包头中记录的源和目标IP地址以及端口来做出负载平衡决策,而不考虑包的内容

客户端将将负载均衡器的 IP 地址作为目标 IP 地址发起请求,4 层负载均衡器收到请求后,对数据包进行NAT转换,将目标 IP 地址修改成实际服务器的地址,在将服务器响应转发给客户端之前,负载均衡器再将源 IP 地址改成自身的 IP 地址。类似的,对数据包中的源/目标端口号也以这种方式进行修改。
第 4 层负载均衡器通常是专用的硬件设备,NAT 操作可能会由专用芯片来完成。
与更复杂的 7 层负载均衡相比,4 层负载均衡所需的计算更少,但在目前的硬件条件下,由此带来的性能优势已经不重要了。严格来讲,4 层负载均衡应该叫 3/4 层负载均衡,因为结合了第 3 层的 IP 地址和第 4 层的端口号信息

7 层负载均衡

第7层负载平衡器根据HTTP头的各种特征和消息的实际内容(例如URL、数据类型(文本、视频、图形)或cookie中的信息)来决定路由。
比起 4 层负载均衡,7 层负载均衡可以读取请求和响应内容,所需的计算虽然更多,但不见得比 4 层负载均衡性能更差,因为拥有更全面的上下文信息,可以在此基础上进行更聪明的全局决策(比如剔除慢速连接、重定向超时请求),甚至还能对内容进行优化(比如压缩),从而提高性能。
严格来讲,7 层负载均衡应该叫 5~7 层负载均衡,因为结合了 OSI 模型中 5~7 层的相关信息:
在这里插入图片描述

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

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

相关文章

Struts2第一个工程helloStruts极其基本配置

前面已经准备好了Struts-2.3.15,现在就可以直接搭建Struts2的工程了。前面http://blog.csdn.net/huangchnegdada/article/details/9179041有对Struts-2.3.15的准备工作的详述。 首先打开MyEclispe新建一个Web Project,名字就叫Struts2_0100_Introduction…

后台系统可扩展性学习笔记(六)反向代理

文章目录Web代理服务反向代理反向代理作用Web代理服务 Web 代理服务指的是在客户端资源请求和提供这些资源的 Web 服务之间充当中介的角色,代理服务可以实现在客户端,或者从客户端到目标服务器中间的任意环节。 例如,客户端不直接向提供目标…

实验:sigsuspend(),sigprocmask()

实验:sigsuspend(),sigprocmask()源代码:/* * Program: pause_suspend.c * To test the difference between sigsuspend() and paus(). * Author: zsl * Date: 2014-10-17 * First release. * 参见网页:http://blog.csdn.net/liwentao1091/ar…

后台系统可扩展性学习笔记(七)Service Discovery与微服务

文章目录应用层微服务架构服务注册查询 Service Discovery客户端 Service DiscoveryDNS-SD DNS-based Service Discovery服务端 Service Discovery服务注册与注销自注册模式第三方注册模式总结参考应用层 在简单的 3 层结构中,Web 服务层既要处理请求,又…

很久没写代码了,这(那)几天真是累死了。。。先写一个幻方的程序吧

1 #include <stdio.h>2 #include <stdlib.h>3 #include <windows.h>4 5 #define EVEN_DOUBLE_4 4 //双偶的最基本类型&#xff0c;4阶双偶6 #define SCREEN_SIZE 19 //屏幕显示不变形的最大尺寸&#xff08;主要是因为窗口大小限制&#xff09;7 #defi…

后台系统可扩展性学习笔记(八)Service Mesh

文章目录网络传输可靠性将微服务控制下沉到网络栈&#xff1f;Sidecar从 Sidecar 到 Service MeshService Mesh 部署平台参考网络传输可靠性 从计网的学习过程中我们可以知道数据在网络传输中可能会出现一些异常状况&#xff1a; 数据丢失&#xff1a;数据包可能会到达一个缓…

关于Spring batch的学习之CSV2DB

最近在学习Spring batch相关的内容&#xff0c;网上也有不少Spring Batch相关的知识&#xff0c;不过大多都是使用xml进行配置的。这里是我用注解的方式进行相关的学习心得。 首先我们来看如何将一个文本文件中的内容导入到数据库中。 我们先来看一下我们所需要的环境。我们这里…

后台系统可扩展性学习笔记(九)Database Replication

文章目录数据库扩展一致性问题Replication &#xff08;复制&#xff09;异步复制同步复制半同步复制拓扑结构单主结构多主结构无主结构复制具体措施参考数据库扩展 之前在第一章后台系统可扩展性学习笔记&#xff08;一&#xff09;概要谈到&#xff1a;理论上&#xff0c;有…

python中的sum函数.sum(axis=1)

看起来挺简单的样子&#xff0c;但是在给sum函数中加入参数。sum&#xff08;a&#xff0c;axis0&#xff09;或者是.sum(axis1) 就有点不解了 在我实验以后发现 我们平时用的sum应该是默认的axis0 就是普通的相加 而当加入axis1以后就是将一个矩阵的每一行向量相加 例如&…

后台系统可扩展性学习笔记(十)Database Partitioning

为了提升数据库的处理能力&#xff0c;我们把单库扩展成多库&#xff0c;并通过更新同步机制&#xff08;即Replication&#xff09;来保证多份数据的一致性。然而&#xff0c;在 各种复制方案下&#xff0c;每个数据库都持有一份完整数据&#xff0c;基于全量数据提供增删改查…

基于FPGA的HDTV视频图像灰度直方图统计算法设计

随着HDTV的普及&#xff0c;以LCD-TV为主的高清数字电视逐渐进入蓬勃发展时期。与传统CRT电视不同的是&#xff0c;这些高清数字电视需要较复杂的视频处理电路来驱动&#xff0c;比如&#xff1a;模数转换&#xff08;A/D Converter&#xff09;、去隔行&#xff08;De-interla…

Java Swing 影楼管理系统之登录功能

开头打广告&#xff0c;Java1234.com。 首先&#xff0c;来个效果图。 关键代码 1&#xff0c;界面层 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …

Bdsyn百度手机助手是何物,它是怎样神不知鬼不觉地安装到你的电脑里的?

【电脑软件管理中Bdsyn手机助手的问题】Bdsyn手机助手 is developed by Baidu, Inc. and is used by 10 users of Software Informer. 并不是本人安装的&#xff08;应该是自己自己主动安装的&#xff09;&#xff0c;卸载以后过几天又会出如今软件列表里。百度搜索却无法搜索出…

后台系统可扩展性学习笔记(十二)NoSQL

文章目录NoSQL定义NoSQL种类键值存储文档存储宽列存储图形数据库NoSQL 意味着什么ACID vs. BASESQL or NoSQLNoSQL定义 不同于关系型数据库&#xff0c;NoSQL 数据库&#xff08;也叫非 SQL 或非关系型数据库&#xff09;提供的数据存储、检索机制并不是基于表关系建模的。没有…

后台系统可扩展性学习笔记(十三)缓存

文章目录在哪儿加缓存缓存什么内容缓存原始查库结果缓存数据对象怎么查询缓存结果预留缓存模式直读模式直写模式回写式缓存绕写式缓存提前刷新模式缓存满了如何处理参考读写分离、分库分表、反范式化、采用 NoSQL……如果这些扩展手段全都上了&#xff0c;数据响应依旧越来越慢…

后台系统可扩展性学习笔记(十四)异步机制与MQ

对于 Web 服务而言&#xff0c;提升可扩展性的主要途径是将耗时的同步工作改成异步处理&#xff0c;从而允许将这些工作“外包”给多个 Worker 去做&#xff0c;或者提前完成能够预知的部分。 异步机制与可扩展性之间的关系需要从&#xff08;异步&#xff09;并行处理的优势说…

光标闪烁问题的解决办法

在调用Windows API函数SetCursor设置光标时&#xff0c;可能会碰到闪烁的问题&#xff1a;移动鼠标&#xff0c;光标在Class Cursor(即注册窗口类时指定的Cursor)与预设Cursor之间闪烁。 在MSDN上有关SetCursor函数的备注中强调&#xff0c;如果Class Cursor非空&#xff0c;那…

视频编解码基础

文章目录前戏编解码技术流程主流视频编码标准视频传输面临的问题视频传输差错控制视频传输Qos质量保证参数人类视觉系统HVS 以及相应编码措施正餐编码层次与码流结构PB帧编码IBBP序列编码结构图像编码结构条带编码结构宏块编码结构块编码结构预测技术码率控制实例H264前戏 编解…

实时语音通讯丢包补偿技术

文章目录基于发送端丢包补偿技术原理与媒体无关的前向差错纠正媒体相关前向差错纠正交织技术基于接受端丢包补偿技术基于插入方法基于插值方法基于重构的方法应用建议非交互式交互式拓展阅读参考丢包补偿技术可以分为两类&#xff1a;基于发送端补偿、基于接受端补偿 基于发送…

关于并发概念的一些笔记

目录1、基于锁的并发数据结构1、并发计数器2、懒惰计数器3、并发链表4、并发队列5、并发散列表总结2、条件变量使用&#xff08;POSIX&#xff09;生产者/消费者 &#xff08;有界缓冲区问题&#xff09;覆盖条件扩展3、信号量使用二值信号量&#xff08;锁&#xff09;0值信号…