08--LVS网站高并发解决方案

前言:LVS,工作稳定,抗负载能力强,属于运维基础,这里将lvs两种模式的部署方式在这里记录一下,并在示例完成后,补充一下基础概念。本章不可避免的涉及到一些网络方面知识,会形象简单的记录一下,无需纠结其原理。

1、基础概念

LVS是Linux Virtual Server,Linux虚拟服务器

LB:Load Balancing,负载均衡(增加处理能力),有一定高可用能力,但不是高可用集群,是以提高服务的并发处理能力为目的。

LVS工作在一台server上提供Directory(负载均衡器)的功能,本身并不提供服务,只是把特定的请求转发给对应的real server(真正提供服务的主机),从而实现集群环境中的负载均衡。

软件负载均衡lvs:四层路由设备
haproxy、nginx:七层负载均衡器
硬件负载均衡F5:BIG IP
深信服

2、LVS-NAT部署

原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发 至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP,将目的 地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址

缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因 为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载 均衡器那,速度就会变慢,工作中见过的最多为一拖20!

2.1、基础环境

关闭防火墙与selinux!!!

vmware网络配置

点击确认完成虚拟网络vmnet2添加,这个相当于模拟现实中的机柜路由器功能,去本机网络设置查看是否添加完成(杀毒软件可能会影响安装)。

模拟角色IP
客户访问(物理机)192.168.1.4
lvs

192.168.1.5

192.168.150.128

服务端1号(web1)192.168.150.129
服务端2号(web2)192.168.150.130

配置完成时服务端1号网络状态如下

现有两个不同网段192.168.1.0与192.168.150.0,两个网段暂时无法通信

2.2、环境配置

2.2.1、web1配置网站和路由

注意:当前web1位于150网段,对于互联网来说处于离线状态,需配置本地源后安装网站

    #    搭建本地源
[root@localhost yum.repos.d]# mount /dev/sr0 /mnt
[root@localhost ~]# vim /etc/yum.repos.d/local.repo
[root@localhost yum.repos.d]# cat /etc/yum.repos.d/local.repo
[local]
name=Local Repository
baseurl=file:///mnt
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# yum clean all
[root@localhost yum.repos.d]# yum makecache

    #    安装环境
[root@localhost yum.repos.d]# yum install -y httpd
[root@localhost yum.repos.d]# systemctl  start httpd
[root@localhost yum.repos.d]# systemctl enable httpd
[root@localhost yum.repos.d]# echo ">>>>>>>>web1<<<<<<<<" >  /var/www/html/index.html
[root@localhost yum.repos.d]# yum install -y net-tools
[root@localhost yum.repos.d]# route add -net 192.168.1.0/24 gw 192.168.150.128

# route add -net (lvs上与客户端相通的网段) gw (lvs的内网ip)

2.2.2、web2配置网站和路由

[root@localhost yum.repos.d]# echo "+++++++++web2++++++++" >  /var/www/html/index.html

    #    其余配置与web1相同

工作环境下内容应该为相同的,这里是为了更明显的观察负载均衡效果

2.2.3、LVS-NAT配置

由于LVS处于两个网络边界,所以需要开启路由转发

[root@localhost ~]# echo  1  > /proc/sys/net/ipv4/ip_forward

    #    启用 IP 转发

[root@localhost ~]# yum install -y ipvsadm

    #    ipvsadm 是一个用于管理 Linux 虚拟服务器(LVS)规则的工具,提供了添加、删除和显示负载均衡规则的功能

[root@localhost ~]# ipvsadm -A -t 192.168.1.5:80 -s rr

    #    这个命令使用 ipvsadm 创建一个新的虚拟服务:

    #    -A:添加一个新的虚拟服务。
    #    -t 192.168.1.5:80:指定虚拟服务的 IP 地址和端口号,即客户端将访问的地址。
    #    -s rr:指定调度算法为“轮询”(Round Robin),这意味着流量将按顺序分配给每个真实服务器。


[root@localhost ~]# ipvsadm -a -t 192.168.1.5:80 -r 192.168.150.129:80 -m

    #    这个命令向虚拟服务添加一个真实服务器:

    #    -a:向虚拟服务添加一个真实服务器。
    #    -t 192.168.1.5:80:指定与虚拟服务关联的 IP 地址和端口号。
    #    -r 192.168.150.129:80:指定真实服务器的 IP 地址和端口号。
    #    -m:使用 NAT 模式(Masquerading),即通过伪装真实服务器的 IP 来实现负载均衡。


[root@localhost ~]# ipvsadm -a -t 192.168.1.5:80 -r 192.168.150.130:80 -m

2.2.4、测试

使用本机浏览器访问,未防止缓存干扰使用firefox的隐私浏览模式

 再次刷新

查看 LVS 配置及当前连接列表,负载均衡已经完成

[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.5:80 rr
  -> 192.168.150.129:80           Masq    1      0          2         
  -> 192.168.150.130:80           Masq    1      0          2         
[root@localhost ~]# ipvsadm -Lnc
IPVS connection entries
pro expire state       source             virtual            destination
TCP 00:37  TIME_WAIT   192.168.1.4:3521   192.168.1.5:80     192.168.150.130:80
TCP 01:19  TIME_WAIT   192.168.1.4:3545   192.168.1.5:80     192.168.150.129:80
TCP 00:44  TIME_WAIT   192.168.1.4:3556   192.168.1.5:80     192.168.150.130:80
TCP 00:17  TIME_WAIT   192.168.1.4:3489   192.168.1.5:80     192.168.150.129:80

3、LVS-DR部署

原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应,所有RS对本身这个IP的 ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度 算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致),并将请求分发给这台RS这时RS收到 这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据 包无异,处理后直接返回给客户端,由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必 须在一个广播域,也可以简单的理解为在同一台交换机上

优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户 端,与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

3.1、基础环境

IP该IP使用途径
192.168.189.151模拟客户访问
192.168.189.148

lvs通信地址

192.168.189.149

web1通信地址

192.168.189.150

web2通信地址

192.168.189.145

lvs,web1,web2共用的虚拟ip地址

 这里使用的均为虚拟网络nat模式

3.2、LVS服务器配置

3.2.1、LVS准备VIP与路由

添加vip

[root@localhost ~]# ifconfig ens33:0 192.168.189.145 broadcast 192.168.1.255 netmask 255.255.255.0 up

    #    这条命令的作用是在Linux系统上创建一个名为 ens33:0 的虚拟网络接口,并将其IP地址设置为 192.168.189.145,子网掩码为 255.255.255.0,然后激活这个虚拟网络接口。


[root@localhost ~]# route add -host 192.168.189.145 dev ens33:0


    #    这条命令的作用是将目标主机 192.168.189.145 添加到路由表中,指定数据包通过虚拟网络接口 ens33:0 发送到该主机。

配置路由转发

[root@localhost ~]# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
[root@localhost ~]# echo "net.ipv4.conf.all.send_redirects = 0" >> /etc/sysctl.conf 
[root@localhost ~]# echo "net.ipv4.conf.ens32.send_redirects = 0" >> /etc/sysctl.conf 
[root@localhost ~]# echo "net.ipv4.conf.default.send_redirects = 0" >> /etc/sysctl.conf 


    #    开启路由功能
    #    禁止转发重定向报文
    #    禁止ens32转发重定向报文
    #    禁止转发默认重定向报文

这里是为了避免lvs参与其他的路由功能

3.3.2、LVS设置负载均衡规则

[root@localhost ~]# yum install -y ipvsadm
[root@localhost ~]# ipvsadm -A -t 192.168.189.145:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.189.145:80 -r 192.168.189.149:80 -g
    #    有人找145把他转到149 使用dr模型(网关型)
[root@localhost ~]# ipvsadm -a -t 192.168.189.145:80 -r 192.168.189.150:80 -g

3.3.3、配置永久生效

[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# cat /etc/sysconfig/ipvsadm
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.189.149:http -g -w 1
-a -t localhost.localdomain:http -r 192.168.189.150:http -g -w 1
[root@localhost ~]# systemctl enable ipvsadm
Created symlink from /etc/systemd/system/multi-user.target.wants/ipvsadm.service to /usr/lib/systemd/system/ipvsadm.service.

3.3、web服务器配置

与上个示例相似,出了网页内容不同,其他操作如下,两台web服务器通用

3.3.1、部署web服务

[root@localhost ~]# yum install -y nginx
[root@localhost ~]# echo ">>>>>>>>>>>>>>web1<<<<<<<<<<<<" > /usr/share/nginx/html/index.html
[root@localhost ~]# cat /usr/share/nginx/html/index.html 
>>>>>>>>>>>>>>web1<<<<<<<<<<<<
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

3.3.2、配置vip

给两个web服务器的lo网卡设置子网掩码为32位vip,按理来说是无法在两台不同机器上部署相同IP,但此处ip并非用来通信,这里我们使用超网掩码32位(32位1),经过逻辑与运算后会发现ip仍为设定的ip,这种写法会使计算机认为全网只有自己一台主机。

[root@localhost ~]# ifconfig lo:0 192.168.189.145/32
    #    使用模拟接口lo构建模拟接口,好处是这个接口永远不会宕机

效果如图

3.3.3、设置内核参数

这里是为了防止虚拟ip配置后,后端的web服务器越过lvs去接受请求

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

    #    忽略非本地arp响应 ,不允许收

[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce


    #    为了让vip发包出去,但允许发

3.4、测试

 查看 LVS 配置及当前连接列表,负载均衡已经完成

4、概念补充

此处概念需要着重记忆

4.1、LVS模式

lvs除了上述两种模式外,还有两种模式:

TUN-IP隧道模式

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大,那么隧道模式 就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解 开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过 来的数据包进行还原,所以说必须支持IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户,所以,减少了 负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一 台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上

图示:

FULL-NAT模式

严格意义上它并不属于独立的一种模式,称为全网nat,属于nat模式的变种,有的面试官问lvs有几种的时候喜欢拿这个当脑筋急转弯,工作中并不常见。

解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS对应多个RS,解决水平扩容的问题。

4.2、轮询算法

我们在两个示例中使用的都是rr选项

 常见的轮询算法如下

Fixed Scheduling Method 静态调服方法 

RR 轮询

Round-Robin:调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

WRR 加权轮询

调度器通过"加权轮叫"调度算法,根据真实服务器的不同处理能力.来调度访问请求。这样可以保证处理能力强的服务器,处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值

DH 目标地址hash

"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

根据客户点的菜找对应厨师处理

SH 源地址hash

"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

根据客户找对应的厨师处理

Dynamic Scheduling Method 动态调服方法

LC 最少连接

调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。

找排队最短的打饭窗口

WLC 加权最少连接

在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

比较好吃的打饭窗口,人数差不多也会在这里处理

LBLC 基于本地的最少连接

"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。

LBLCR 带复制的基于本地的最少连接

"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。

4.3、负载均衡常见模式

http重定向、DNS负载均衡、7层反向代理负载均衡、4层IP网络层负载均衡、数据链路层负载均衡、F5硬件负载均衡(性能最好的负载均衡,成本极高)

1)4层IP网络层负载均衡:

lvs-nat

在网络层和传输层(IP和端口)通过修改目标地址进行负载均衡。 用户访问请求到达负载均衡服务器,负载均衡服务器在操作系统内核进程获取网络数据包,根据算法得到一台真实服务器地址,然后将用户请求的目标地址修改成该真实服务器地址,数据处理完后返回给负载均衡服务器,负载均衡服务器收到响应后将自身的地址修改成原用户访问地址后再讲数据返回回去。类似于反向服务器负载均衡。

优点:在响应请求时速度较反向服务器负载均衡要快。

缺点:无法处理更高级的请求(负载均衡只能看到ip和端口信息

2)数据链路层负载均衡:

lvs-dr

在数据链路层修改Mac地址进行负载均衡。 负载均衡服务器的IP和它所管理的web 服务群的虚拟IP一致; 负载均衡数据分发过程中不修改访问地址的IP地址,而是修改Mac地址; 通过这两点达到不修改数据包的原地址和目标地址就可以进行正常的访问。

优点:不需要负载均衡服务器进行IP地址的转换。 数据响应时,不需要经过负载均衡服务器。

缺点:负载均衡服务器的网卡带宽要求较高

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

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

相关文章

不“卷”低价,品牌如何让客户愿意“留下”?

天猫取消预售制度&#xff0c;满减力度大于往年&#xff0c;京东直接将“又便宜又好”定为大促主题。今年的618&#xff0c;离不开两大关键词&#xff1a;拼低价 和 回归用户。 价格“内卷”&#xff0c;消费者可以花更少的钱买到商品&#xff0c;但对商家来说&#xff0c;意味…

打开朦胧的云雾仓,享受悦耳好音乐,CIYINSO Mars2体验

如今蓝牙耳机的选择越来越丰富&#xff0c;音质好、续航久的产品也越来越多&#xff0c;百元左右的亲民价位就有不少选择。在这样的大背景下&#xff0c;耳机的设计自然就成了很多朋友选择的重要参考&#xff0c;不从众&#xff0c;有特点的耳机造型&#xff0c;往往更能获得大…

聊一聊生成式AI

生成式AI&#xff08;Generative AI&#xff09;是指一类能够自主创造新内容的人工智能技术&#xff0c;这些内容可以是文本、图像、音频、视频等。与传统的分析性或分类性AI系统不同&#xff0c;生成式模型的主要任务不是对现有数据进行分类或预测&#xff0c;而是生成全新的、…

web爬虫笔记:js逆向案例九(某多多 anti_content参数)补环境流程

web爬虫笔记:js逆向案例九(某多多 anti_content参数)补环境流程 一、目标网站:aHR0cHM6Ly9tb2JpbGUueWFuZ2tlZHVvLmNvbS8= 二、接口分析 1、快速定位加密位置(通过搜索/cells/hub/v3快速定位到加密js文件) 2、通过分析可知&#

@pytest.fixture与@pytest.mark.parametrize结合实现参数化

背景&#xff1a;测试数据既要在fixture方法中使用&#xff0c;同时也在测试用例中使用 使用方法&#xff1a;在使用parametrize的时候添加"indirectTrue"参数。pytest可以实现将参数传到fixture方法中&#xff0c;也可以在当前测试用例中使用。 原理&#xff1a;参…

众筹首发 | 当当狸智能天文望远镜TW2,大屏实时观景 长焦定格远方!

满天的繁星和远方景色&#xff0c;让人无比向往&#xff0c;你是否也曾渴望探索星空的奥秘&#xff0c;沉醉在无垠的美景之中&#xff1f; 然而&#xff0c;当我们用望远镜远眺星空时&#xff0c;固定姿势的观测经常让人感到疲惫&#xff0c;而普通相机亦是难以触及更远的距离…

Flash基础知识

1、Flash发展历程 存储器通常分为两类型&#xff0c;即随机存取的RAM&#xff08;内存&#xff09;与只读的ROM&#xff08;外存&#xff09;。 RAM&#xff0c;也称随机存取存储器&#xff0c;数据可以被读取和修改。它主要用于存储正在运行的程序和临时数据&#xff0c;是计…

OpenMMlab AI实战营第五、六期培训

OpenMMlab AI实战营第五、六期培训 OpenMMlab实战营第五、六次课2023.2.7-9学习参考第五次课笔记第六次课笔记一、什么是语义分割二、语义分割 v.s. 实例分割 v.s. 全景分割三、语义分割经典模型1.语义分割的基本思路2.**复用卷积计算**3.全连接层的卷积化4.预测图的升采样5.双…

6.深度卷积神经网络

目录 1.深度卷积神经网络ALexNet 2012AlexNetAlexNet架构AlexNet与LeNet复杂度对比总结代码实现2.使用块的网络VGG 2014 image竞猜第二VGG架构进度总结代码实现3.网络中的网络NiN全连接层的问题NiN块NiN架构总结代码实现4.含并行连结的网络(GoogLeNet)2014 image竞猜第一最好…

深信服终端安全管理系统EDR版本升级过程

EDR当前版本为3.7.12&#xff0c;具体参考版本详情参数。需要升级到6.0.2R1版本&#xff0c;该版本更改了产品名称&#xff0c;叫做“统一端点安全管理系统aES” 当前版本详情 版本基础信息 软件版本&#xff1a;3.7.12.3829 病毒库版本&#xff1a;20240618174426 漏洞规则库&…

LabVIEW在中国航天中的应用

​LabVIEW是一种系统设计平台及开发环境&#xff0c;由美国国家仪器公司&#xff08;NI&#xff09;开发。它在中国航天领域的应用非常广泛&#xff0c;涵盖了测试与测量、数据采集、控制系统设计等多个方面。以下是LabVIEW在中国航天中的几个主要应用实例&#xff1a; 1. 测试…

【前端项目笔记】3 用户管理

用户管理相关功能实现 涉及表单、对话框、Ajax数据请求 基本页面 用户列表开发 在router.js中导入Users.vue 解决用户列表小问题 选中&#xff08;激活&#xff09;子菜单后刷新不显示高亮 给二级菜单绑定单击事件&#xff0c;点击链接时把对应的地址保存到sessionSto…

适合企业的TTS文本转语音接口:微软TTS最新模型,发布9种更真实的AI语音

微软对Azure Al语音服务的Personal Voice功能进行了升级&#xff0c;引入了新的零样本学习(zero-shot)的文本到语音(TTS)模型。与初始模型相比&#xff0c;这些新模型提高了合成语音的自然度&#xff0c;并更好地模仿了提示语音中的语音特征。 微软提供了超过400种神经语音&am…

MySQL数据库的列类型

数值 tinyint 十分小的数据 1个字节 smallint 较小的数据 2个字节 mediumint 中等大小的数据 3个字节 int 标准的整数 4个字节&#xff08;常用&#xff09; bigint …

【送模板】5张图,帮你轻松搞懂OKR工作法

OKR是目标与关键结果法的缩写&#xff0c;OKR运用在工作中就是强调对业务进行逻辑思考&#xff0c;找到目标与关键结果之间的因果关系。这种因果关系的是否准确决定我们努力的价值。 OKR是一种高效的目标管理方法。“O”就是object&#xff0c;目标的意思&#xff0c;“kr”就…

考研计组chap4指令系统

目录 一、指令格式 155 13.操作码地址码 2.按照地址码数量 &#xff08;1&#xff09;零地址指令 &#xff08;2&#xff09;一地址指令 &#xff08;3&#xff09;二地址指令 &#xff08;4&#xff09;三地址指令 &#xff08;5&#xff09;四地址指令 3.指令长度 …

信号与系统概述

信号是消息的表现形式或传送载体&#xff0c;数学上用函数来表示。信号可以分为确定信号和随机信号、连续时间信号和离散时间信号、周期信号和非周期信号、能量信号和功率信号等。模拟信号是幅度连续的连续时间信号&#xff0c;而数字信号是幅度离散的离散时间信号。对于连续时…

【C#】字符串处理器

实现&#xff1a; 统计字符串中单词的数量。查找字符串中最长的单词&#xff0c;并显示其长度。将字符串中的所有单词首字母大写。将字符串中的所有单词反转。 要求&#xff1a; 使用面向对象的方式实现&#xff0c;包括至少一个类&#xff08;例如 StringProcessor&#xf…

展厅设计要考虑哪些问题

1、树立醒目的标志。 展馆设计说&#xff0c;与众不同可以吸引更多的参观者&#xff0c;让参观者更容易识别和寻找&#xff0c;给没进过展厅的人留下印象&#xff0c;但不要偏离展览目标和商业形象。环顾别人的设计图&#xff0c;后只有一种可能。不知道应该设计什么样的图纸&a…

AI产品组件——TTS产品

语音合成TTS 序列猴子TTS&#xff0c;每个发音人付费标准不同&#xff0c;通过序列猴子开放平台使用。 微软TTS&#xff0c;采用信用卡后付费模式。Speech Studio&#xff0c;付费模式采用统一付费的形式&#xff0c;音效有一款女声效果逼真。 女声&#xff1a;晓晓&#xff…