当前位置: 首页 > news >正文

Linux LVS详解

LVS(Linux Virtual Server)即Linux虚拟服务器,是一个基于Linux操作系统的高性能、可扩展的负载均衡器。以下是对LVS的详细介绍:

一、简介

LVS项目由章文嵩博士在1998年5月发起,是中国国内最早出现的自由软件项目之一。LVS现在是Linux标准内核的一部分,提供了一个可靠的、高可用的解决方案,用于将来自客户端的请求分发到多个后端服务器,以实现负载均衡和高可用性。
概念:

  • VS:虚拟服务器,指LVS服务器自身
  • RS:提供服务的服务器
  • CIP:客户端ip地址
  • VIP:lvs服务器对外发布的ip地址,用户通过vip访问集群
  • DIP:LVS连内网的ip地址叫DIP,用于接收用户请求的ip叫做VIP

用户访问流程:
客户端通过 CIP—>VIP—>DIP---->RIP
工作模式:

  • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
  • lvs-dr:操纵封装新的MAC地址
  • lvs-tun:在原请求IP报文之外新加一个IP首部
  • lvs-fullnat:修改请求报文的源和目标IP

二、结构组成

LVS集群架构主要由以下三部分组成:

  1. 负载调度器(Load Balancer/Director):是整个集群对外的前端机,负责将客户的请求发送到一组后端服务器上执行,而客户端则认为返回来是同一个IP(通常把这个IP叫成为虚拟IP或VIP)。

  2. 服务器池(Server Pool/Real Server):是一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。

  3. 共享存储(Shared Storage):为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
    另外,LVS主要由两部分组成:ipvs和ipvsadm。

    • ipvs:工作在内核空间,是LVS的核心组件,负责实际处理负载均衡和流量调度的功能。
    • ipvsadm:工作在用户空间,是一个命令行工具,用于管理和配置ipvs。

三、工作原理

当用户向负载均衡调度器(VS或者叫LB)发起请求时,调度器将请求发往至内核空间。PREROUTING链首先会接收到用户请求,判断目标IP确定为本机IP,将数据包发往INPUT链。IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链。POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。
在这里插入图片描述

四、负载均衡模式

LVS提供了多种负载均衡模式,以适应不同的网络架构和需求。常用的模式有:

1. NAT(Network Address Translation)模式

LVS(Linux Virtual Server)NAT,即Linux虚拟服务器网络地址转换模式,是一种高性能、高可用的服务器集群系统。它通过IP负载均衡技术实现网络服务的负载均衡,其中NAT模式是LVS中最常用的一种工作模式。
在这里插入图片描述

1、工作原理

LVS NAT模式的工作原理如下:

  1. 客户端发送请求到负载均衡器的虚拟IP(VIP)地址。
  2. 负载均衡器接收请求后,根据预设的调度算法(如轮询、最少连接等)选择一台真实服务器(Real Server)。
  3. 负载均衡器将客户端的请求通过网络地址转换(NAT)转发给选中的真实服务器。在转发过程中,负载均衡器会重写请求报文的目标地址,将其改为真实服务器的IP地址。
  4. 真实服务器处理请求,并将响应数据发送回负载均衡器。
  5. 负载均衡器接收真实服务器的响应数据后,再次进行网络地址转换,将响应数据的源地址改为自己的IP地址,并将目的地址改为客户端的IP地址,然后将响应数据发送回客户端。
    在这里插入图片描述

在这里插入图片描述

2、配置过程

LVS NAT模式的配置过程通常包括以下几个步骤:

  1. 安装LVS软件包和内核模块。
  2. 在负载均衡器上配置虚拟IP(VIP)和真实服务器(RIP)池。
  3. 在负载均衡器上配置NAT规则和调度算法。
  4. 在真实服务器上配置共享存储(如NFS)并挂载,以实现会话共享。
  5. 配置真实服务器的网关指向负载均衡器,以确保响应数据包能够正确返回给客户端。
3、优缺点

LVS NAT模式的优点包括:

  1. 集群中的物理服务器可以使用任何支持TCP/IP的操作系统。
  2. 物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
  3. NAT模式可以支持不同网段的IP访问。

然而,LVS NAT模式也存在一些缺点:

  1. 扩展性有限。当服务器节点数量增长到一定数量时(如20个或更多),负载均衡器可能成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器进行地址转换。
  2. 所有的流量(无论是进来的还是出去的)都必须经过负载均衡器,这可能会增加网络延迟和带宽消耗。
4、应用场景

LVS NAT模式适用于以下场景:

  1. 集群中的服务器数量相对较少,且对扩展性要求不高的场景。
  2. 需要支持不同网段IP访问的场景。
  3. 对网络延迟和带宽消耗要求不高的场景。

示例:
在这里插入图片描述

2. DR(Direct Routing)模式

直接路由模式,在这种模式下,LVS不会改写请求包的IP和端口,但是会改写请求包的目的MAC地址为后端RS的MAC地址,然后将数据包转发。真实服务器处理请求后,响应包直接回给客户端,不再经过负载均衡器。DR模式的转发效率是最高的,特别适合下行流量较大的业务场景。
在这里插入图片描述

1、工作原理

LVS DR模式的工作原理基于二层数据链路层的转发,具体过程如下:

  1. 客户端发送请求到负载均衡器的虚拟IP(VIP)地址。
  2. 负载均衡器接收请求后,根据预设的调度算法(如轮询、最少连接等)选择一台真实服务器(Real Server)。
  3. 负载均衡器修改请求报文的目标MAC地址,将其改为选中真实服务器的MAC地址,但源IP地址和目标IP地址保持不变。然后,负载均衡器将修改后的请求报文通过二层数据链路层转发给选中的真实服务器。
  4. 真实服务器接收请求报文后,处理请求并生成响应报文。响应报文的源IP地址是真实服务器的IP地址,目标IP地址是客户端的IP地址。
  5. 真实服务器将响应报文通过本地网络接口直接发送给客户端,而不需要经过负载均衡器。
    在这里插入图片描述
2、配置过程

LVS DR模式的配置过程通常包括以下几个步骤:

  1. 安装LVS软件包:在负载均衡器和真实服务器上安装LVS软件包和必要的内核模块。
  2. 配置VIP:在负载均衡器和所有真实服务器的本地环回接口(lo)上配置VIP地址。这通常通过创建虚拟网络接口或修改网络配置文件来实现。
  3. 配置ARP抑制:为了避免ARP冲突,需要配置真实服务器不响应针对VIP的ARP请求。这可以通过修改内核参数(如arp_ignore和arp_announce)或使用arptables工具来实现。
  4. 配置路由:确保真实服务器的默认网关不指向负载均衡器,以避免响应报文经过负载均衡器。同时,需要在前端路由器或网关上配置静态路由,将目标IP为VIP的请求报文发往负载均衡器。
  5. 配置LVS调度:在负载均衡器上配置LVS调度算法和规则,将请求分发到不同的真实服务器。
3、优缺点

LVS DR模式的优点包括:

  1. 高性能:由于响应报文直接由真实服务器发送给客户端,而不需要经过负载均衡器,因此减少了负载均衡器的带宽消耗和延迟。
  2. 高扩展性:随着真实服务器数量的增加,LVS DR模式可以轻松地扩展负载均衡能力。
  3. 灵活性:真实服务器可以使用私有地址或公网地址,且支持不同网段的IP访问。

然而,LVS DR模式也存在一些缺点:

  1. 配置复杂性:相对于其他模式,LVS DR模式的配置过程较为复杂,需要处理ARP抑制和路由配置等问题。
  2. 网络依赖性:LVS DR模式依赖于二层数据链路层的转发,因此要求负载均衡器和真实服务器必须在同一个物理网络中。
4、应用场景

LVS DR模式适用于以下场景:

  1. 大规模服务器集群:需要处理大量并发请求的场景,如大型网站、在线游戏服务器等。
  2. 高性能要求:对响应时间和带宽消耗有较高要求的场景,如金融交易系统、实时通信系统等。
  3. 跨网段访问:需要支持不同网段IP访问的场景,如跨地域的分布式服务器集群。

示例:
在这里插入图片描述

3. TUN(Tunneling)模式

隧道模式,LVS通过在IP数据包外面再封装了一层Ip Tunnel 头部,将数据包的源地址改写为LVS自身的物理地址,目的地址改写为RS的物理地址,从而实现跨网段访问RS。
在这里插入图片描述

1、工作原理

LVS TUN模式的工作原理基于IP隧道技术,具体过程如下:

  1. 客户端发送请求到负载均衡器的虚拟IP(VIP)地址。
  2. 负载均衡器接收请求后,根据预设的调度算法(如轮询、最少连接等)选择一台真实服务器(Real Server)。
  3. 负载均衡器对请求报文进行封装,即在原IP报文之外再添加一个新的IP首部。新的IP首部的源IP地址是负载均衡器的IP地址(DIP),目标IP地址是选中真实服务器的IP地址(RIP)。然后,负载均衡器将封装后的请求报文发送给选中的真实服务器。
  4. 真实服务器接收封装后的请求报文后,先解开IP隧道包头信息,得到原始的请求报文,然后处理请求并生成响应报文。响应报文的源IP地址是真实服务器的VIP地址(在真实服务器的隧道接口上配置),目标IP地址是客户端的IP地址。
  5. 真实服务器将响应报文通过本地网络接口直接发送给客户端,而不需要经过负载均衡器。
    在这里插入图片描述
2、配置过程

LVS TUN模式的配置过程通常包括以下几个步骤:

  1. 安装LVS软件包:在负载均衡器和真实服务器上安装LVS软件包和必要的内核模块,如ipip模块。
  2. 配置VIP和DIP:在负载均衡器的隧道接口(如tunl0)上配置VIP地址,并在真实服务器的隧道接口上也配置相同的VIP地址。同时,确保负载均衡器和真实服务器的IP地址(DIP和RIP)是公网地址或能够相互通信。
  3. 配置隧道:在负载均衡器和真实服务器上激活隧道接口,并配置路由规则以确保封装后的请求报文能够正确转发到真实服务器。
  4. 配置LVS调度:在负载均衡器上配置LVS调度算法和规则,将请求分发到不同的真实服务器。
3、优缺点

LVS TUN模式的优点包括:

  1. 跨网络访问:由于使用了IP隧道技术,LVS TUN模式可以支持不同网络之间的访问,适用于分布式服务器集群。
  2. 高性能:负载均衡器只负责将请求报文分发给真实服务器,而真实服务器直接响应客户端的请求,减少了负载均衡器的带宽消耗和延迟。
  3. 灵活性:真实服务器可以使用不同的操作系统和硬件配置,只要支持IP隧道协议即可。

然而,LVS TUN模式也存在一些缺点:

  1. 配置复杂性:相对于其他模式,LVS TUN模式的配置过程较为复杂,需要处理隧道接口、路由规则等问题。
  2. 服务器要求:所有真实服务器都需要支持IP隧道协议,这可能限制了服务器的选择范围。
4、应用场景

LVS TUN模式适用于以下场景:

  1. 分布式服务器集群:需要跨网络访问的分布式服务器集群,如跨地域的Web服务器集群、数据库服务器集群等。
  2. 高性能要求:对响应时间和带宽消耗有较高要求的场景,如在线视频服务、实时通信系统等。
  3. 异构服务器环境:真实服务器使用不同操作系统和硬件配置的场景,只要它们都支持IP隧道协议。

示例:
在这里插入图片描述

五、负载均衡算法

LVS(Linux Virtual Server)即Linux虚拟服务器,是一个基于Linux的开源负载均衡器项目,其负载均衡算法是LVS的核心技术。

  1. 轮询调度算法(Round Robin,RR):
    • 工作原理:按顺序将请求依次分配给每台服务器,假设每台服务器的处理能力相同,从而实现请求的平均分配。
    • 优点:实现简单、公平,确保每个后端服务器都有机会处理请求。
    • 缺点:无法根据服务器的负载情况进行动态调整,无法应对服务器不同的性能差异。
  2. 加权轮询调度算法(Weighted Round Robin,WRR):
    • 工作原理:在轮询的基础上增加了权重的概念,根据各台服务器的处理能力不同给予不同的权重,处理能力强的服务器分配更多的请求。
    • 优点:考虑了服务器的性能差异,能够更加合理地分配请求。
  3. 最小连接调度算法(Least Connections,LC):
    • 工作原理:将新请求分配给当前连接数最少的服务器,适用于服务器性能相近的环境。
    • 优点:可以根据服务器的实际负载情况进行动态调整,将请求分配给负载较轻的服务器。
    • 缺点:需要实时跟踪每个后端服务器的连接数,增加了额外的开销。
  4. 加权最小连接调度算法(Weighted Least Connections,WLC):
    • 工作原理:结合了最小连接和权重,按照服务器的连接数和权重进行综合考量,权重高的服务器处理更多连接。
    • 优点:在最小连接的基础上考虑了服务器的性能差异,能够更加合理地分配请求。
  5. 基于局部性的最少链接调度算法(Locality-Based Least Connections,LBLC):
    • 工作原理:主要用于Cache集群系统,根据请求的目标IP地址找出最近使用的服务器,如果该服务器可用且未超载则分配请求。
    • 优点:可以提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。
  6. 带复制的基于局部性最少链接调度算法(Locality-Based Least Connections with Replication,LBLCR):
    • 工作原理:维护一个目标IP到一组服务器的映射,并按最小连接原则从服务器组中选择一台未超载的服务器处理请求。与LBLC算法不同之处在于,它要维护从一个目标IP地址到一组服务器的映射。
  7. 目标地址散列调度算法(Destination Hashing,DH):
    • 工作原理:使用请求的目标IP地址作为散列键,从静态分配的散列表中找到对应的服务器。
  8. 源地址散列调度算法(Source Hashing,SH):
    • 工作原理:使用请求的源IP地址作为散列键,从静态分配的散列表中找到对应的服务器。这种算法可以确保特定客户端的会话维持在同一台服务器上,适用于需要保持会话一致性的应用。
  9. 最短的期望延迟调度算法(Shortest Expected Delay Scheduling,SED):
    • 工作原理:基于WLC算法,通过计算每个服务器的响应时间估计值来分配请求,旨在减少请求的总体响应时间。
  10. 无需队列调度算法(Never Queue Scheduling,NQ):
    • 工作原理:直接将请求分配给当前连接数为零的服务器,从而避免排队延迟。

六、优缺点

LVS的优点包括:

1. **高性能**:LVS能够实现高吞吐量和低延迟的负载均衡。
2. **可扩展性**:LVS支持横向扩展,可以轻松地添加更多的后端服务器以应对不断增长的流量和负载。
3. **可靠性**:LVS支持多种负载均衡算法,提供高可用性和容错能力。
4. **灵活性**:LVS提供了多种工作模式,以适应不同的网络架构和需求。
5. **开源和免费**:LVS是一个开源项目,可以免费使用和定制。

LVS的缺点包括:

1. **配置复杂**:LVS的配置相对复杂,需要对网络和负载均衡概念有一定的了解。
2. **缺乏图形界面**:LVS主要是通过命令行工具进行配置和管理,缺乏直观的图形界面。
3. **有限的支持和文档**:相比于商业解决方案,LVS的支持和文档资源相对有限。
4. **依赖于Linux内核**:LVS是一个基于Linux内核的解决方案,因此它的使用受限于支持LVS的Linux发行版和内核版本。

相关文章:

Linux LVS详解

LVS(Linux Virtual Server)即Linux虚拟服务器,是一个基于Linux操作系统的高性能、可扩展的负载均衡器。以下是对LVS的详细介绍: 一、简介 LVS项目由章文嵩博士在1998年5月发起,是中国国内最早出现的自由软件项目之一…...

LabVIEW显微镜自动对焦系统

在生物医学研究中,显微镜图像的清晰度对于细胞分析非常重要。传统的手动对焦方法容易受到人为因素的影响,因此开发了一种自动对焦技术,以提高图像采集的准确性和效率。 自动对焦方法概述 该系统结合了图像清晰度评估和一维功能优化&#xff…...

基于IP的真实地址生成器

ip-geoaddress-generator 是一个基于 Web 的在线应用程序,能够根据 IP 地址生成真实的随机地址信息。通过多个 API 获取位置数据和随机用户信息,该工具为用户提供了完整的虚拟身份。它由 Next.js 和 Radix UI 构建,具备自动检测当前 IP 地址和…...

下面程序头的三个import语句可以合并或简化么?

下面程序头的三个import语句可以合并或简化么? from tkinter.simpledialog import askinteger from tkinter import * from tkinter import messagebox ——是的,三个import语句可以合并为一个。 合并后的import语句如下所示: from tkinte…...

深度学习--CNN实现猫狗识别二分类(附带下载链接, 长期有效)

1. 代码实现(包含流程解释) 样本量: 8005 # # 1.导入数据集(加载图片)数据预处理# 进行图像增强, 通过对图像的旋转 ,缩放,剪切变换, 翻转, 平移等一系列操作来生成新样本, 进而增加样本容量, # 同时对图片数值进行归一化[0:1] from tensorflow.keras.preprocessing.image …...

Depcheck——专门用于检测 JavaScript 和 Node.js 项目中未使用依赖项的工具

文章目录 Depcheck 是什麽核心功能📚检测未使用的依赖🐛检测缺失的依赖✨支持多种文件类型🌍可扩展性 安装与使用1. 安装 Depcheck2. 使用 Depcheck Depcheck 的应用总结项目源码: Depcheck 是什麽 来看一个常见错误场景&#x1…...

前端构建工具vite的优势

1. 极速冷启动 Vite 使用原生 ES 模块 (ESM) 在开发环境下进行工作。相比于传统构建工具需要打包所有的文件,Vite 只在浏览器请求模块时动态加载所需的文件。无打包冷启动:无需预先打包,项目启动非常快,尤其对于大型项目效果更明…...

hive查询语句

1.基本语法 SELECT [ALL | DISTINCT]select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BYcol_list] [HAVING where_condition] [ORDER BYcol_list] [CLUSTER BYcol_list | [DISTRIBUTE BY col_list] [SORT BY col_list] ] [LIMIT number] …...

【AIGC】2024-ECCV-ControlNet++:通过有效的一致性反馈改进条件控制

2024-ECCV-ControlNet: Improving Conditional Controls with Efficient Consistency Feedback ControlNet:通过有效的一致性反馈改进条件控制摘要1. 引言2. 相关工作2.1 基于扩散的生成模型2.2 可控的文本到图像扩散模型2.3 语言和视觉奖励模型 3. 方法3.1. 初步3.…...

Mysql5.7变为GreatSQL 8.0.32-25过程中,SQL语句报错及解决方案

考虑兼容国产化数据库,现需要将Mysql5.7变为GreatSQL,在执行部分sql时,发现在Mysql5.7无报错,在GreatSQL有报错,在此记录一下遇到的几个错误。 1.ERROR 1231 (NO_AUTO_CREATE_USER) 1.1.报错提示 ERROR 1231 (42000…...

Qt 使用QAxObject将QTableView数据导出到Excel表格

这是我记录Qt学习过程的第6篇心得文章,主要是方便自己编写的应用程序导出Excel数据的,走了不少弯路直接上代码。 实现代码: //人员信息导出 ui->pbtn2->setEnabled(false); // 打开文件对话框,选择 excel文件 QString fil…...

fastGpt

参考本地部署FastGPT使用在线大语言模型 1 rockylinx 1 ollama安装 在rockylinux中安装的,ollama由1.5G,还是比较大,所有采用在windows下下载,然后安装的方式,linux安装 tar -C /usr -xzf ollama-linux-amd64.tgz #…...

如何全方位应对服务可用性的挑战

在数字化转型的浪潮中,运维团队正站在企业IT架构的核心位置,面对着前所未有的挑战。服务响应时间和失败率,作为衡量服务质量的重要指标,一直备受关注。然而,在追求这两项指标优化的同时,运维团队还需关注其…...

二进制方式部署k8s集群

目标任务: 1、Kubernetes集群部署架构规划 2、部署Etcd数据库集群 3、在Node节点安装Docker 4、部署Flannel网络插件 5、在Master节点部署组件(api-server,schduler,controller-manager) 6、在Node节点部署组件(kubelet,kube-proxy) 7、查看集群状态 8、运行⼀个测…...

Vivado时序报告七:Report Clock NetworkReport Clock Interaction详解

目录 一、前言 二、Report Clock Network 2.1 Report Clock Network流程 2.2 Report Clock Network报告 三、Report Clock Interaction 3.1 示例设计 3.2 配置选项 3.2.1 Options 3.2.2 Timer_Settings 3.3 Clock Interaction报告 3.3.1 Clock Pair Classification …...

HarmonyOS 组件样式@Style 、 @Extend、自定义扩展(AttributeModifier、AttributeUpdater)

1. HarmonyOS Style 、 Extend、自定义扩展(AttributeModifier、AttributeUpdater) Styles装饰器:定义组件重用样式   ;Extend装饰器:定义扩展组件样式   自定义扩展:AttributeModifier、AttributeUpdater 1.1. 区…...

信息安全工程师(73)网络安全风险评估过程

一、确定评估目标 此阶段需要明确评估的范围、目标和要求。评估目标通常包括特定的网络系统、信息系统或网络基础设施,评估范围可能涉及整个组织或仅特定部门。明确评估要求有助于确保评估过程的针对性和有效性。 二、收集信息 在评估开始之前,需要对目标…...

在MacOS玩RPG游戏 - RPGViewerPlus

背景知识 由于我一直使用Mac电脑,所以一直对Mac如何玩RPGMV/RPGMZ游戏的方式有进一步的想法。 网上能给出的方案都是自行启动一个HTTP服务进行,进行服务加载。这个方法有效,但兼容性较差。涉及到自定义功能模块的游戏,都会有报错…...

2024.10.27 直接插入排序 非递归后序遍历(复杂版)

直接插入排序 思路:用temp变量存放需要插入前面有序序列的变量,然后用里面的那个for循环寻找到需要插入的位置。 额外注意的点:arr[j1]temp;这个是因为内置循环每次出来之后所指向的位置是我们要插入的位置的前一个(-1或者插入…...

Ubuntu 22.04系统启动时自动运行ROS2节点

在 Ubuntu 启动时自动运行 ROS2 节点的方法 环境:Ubuntu 系统,ROS2 Humble,使用系统自带的 启动应用程序 目标:在系统启动时自动运行指定的 ROS2 节点 效果展示 系统启动后,自动运行小乌龟节点和键盘控制节点。 实践…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

JVM垃圾回收机制全解析

Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

浅谈不同二分算法的查找情况

二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况&#xf…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...