总结haproxy各调度算法的实现方式及其应用场景
时间:2023-09-13 02:37:02
总结haproxy实现各调度算法及其应用场景
-
- HAProxy调度算法
-
- 1 静态算法
-
- 1.1 socat 工具
- 1.2 static-rr
- 1.3 first(几乎没有)
- 2 动态算法
-
- 2.1 roundrobin
- 2.2 leastconn
- 2.3 random
- 3 其他算法
-
- 3.1 source
-
- 3.1.1 map-base 取模法(静态算法)
- 3.1.2 一致性hash(动态算法)
-
- 3.1.2.1 hash对象
- 3.1.2.2 一致性hash示意图
- 3.1.2.3 一致性hash配置示例
- 3.2 uri
-
- 3.2.1 uri 取模法配置示例
- 3.2.2 uri 一致性hash配置示例
- 3.2.3 访问测试
- 3.3 url_param
-
- 3.3.1 url_param取模法配置示例
- 3.3.2 url_param一致性hash配置示例
- 3.3.3 测试访问
- 3.4 hdr
-
- 3.4.1 hdr取模法配置示例
- 3.4.2 一致性hash配置示例
- 3.4.3 测试访问
- 3.5 rdp-cookie
-
- 3.5.1 rdp-cookie 取模法配置示例
- 4.3.5.2 rdp-cookie 一致性hash配置示例
- 4 算法总结
- 5 各算法使用场景
HAProxy调度算法
HAProxy通过固定参数 balance 指示后端服务器的调度算法listen或backend选项中。
HAProxy调度算法分为静态和动态调度算法,但有些算法可以根据参数在静态和动态算法中相互转换。
官方文档:http://cbonte.github.io/haproxy-dconv/2.1/configuration.html#4-balance
1 静态算法
静态算法:按照事先定义好的规则轮询公平调度,不关心当前负载、连接数和后端服务器响应速度,时修改(只有0和1,不支持其他值)HAProxy生效。
可以借助socat实现real server启动和停止(权重设置为0关闭或1启动),需要工具才能不重启socat,这是通过socket没有修改配置文件,需重启,但由于配置文件未修改,重启(reload和restart)这些服务修改将丢失,务修改将丢失。
1.1 socat 工具
可以利用服务器的动态权重和其他状态 socat调整工具,Socat 是 Linux 一个多功能网络工具的名自Socket CAT,使用此工具进行控制socket,相当于netCAT的增强版.Socat 的主要特点就是在两个数据流之间建立双向通道,且支持众多协议和链接方式。如 IP、TCP、 UDP、IPv6、Socket文件等
例子:使用工具socat 调整服务器动态权重
socket在同一主机上,客户端与服务器之间主机上的桥梁,以避免通过网络连接客户端与服务器。socket文件位置的主配置文件定义为/var/lib/haproxy/haproxy.sock中,利用socat修改内容,无需重启服务
socat通过socket控制与haproxy的通讯。
1.安装相关包 [root@haproxy:/var/lib/haproxy]# yum -y install socat [root@haproxy:/var/lib/haproxy]# echo "help" | socat stdio /var/lib/haproxy/haproxy.sock #使用管道符把help传给socat,然后标准重输入重定向sockt文件中。实际上是在这里socket文件中输入help,得到帮助,只是得到这个socket不同的帮助socket不同的帮助,不同的用法,不是所有的socket支持多种用法。 The following commands are valid at this level: abort ssl cert <certfile> : abort a transaction for a certificate file add acl [@<ver>] <acl> <pattern> : add an acl entry add map [@<ver>] <map> <key> <val> : add a map entry (payload supported instead of key/val)
add ssl crt-list <list> <cert> [opts]* : add to crt-list file <list> a line <cert> or a payload
clear acl [@<ver>] <acl> : clear the contents of this acl
clear counters [all] : clear max statistics counters (or all counters)
clear map [@<ver>] <map> : clear the contents of this map
clear table <table> [<filter>]* : remove an entry from a table (filter: data/key)
commit acl @<ver> <acl> : commit the ACL at this version
commit map @<ver> <map> : commit the map at this version
commit ssl cert <certfile> : commit a certificate file
del acl <acl> [<key>|#] : delete acl entries matching
del map <map> [<key>|#] : delete map entries matching
del ssl cert <certfile> : delete an unused certificate file
del ssl crt-list <list> <cert[:line]> : delete a line <cert> from crt-list file <list>
disable agent : disable agent checks
disable dynamic-cookie backend <bk> : disable dynamic cookies on a specific backend
disable frontend <frontend> : temporarily disable specific frontend
disable health : disable health checks
disable server (DEPRECATED) : disable a server for maintenance (use 'set server' instead)
enable agent : enable agent checks
enable dynamic-cookie backend <bk> : enable dynamic cookies on a specific backend
enable frontend <frontend> : re-enable specific frontend
enable health : enable health checks
enable server (DEPRECATED) : enable a disabled server (use 'set server' instead)
get acl <acl> <value> : report the patterns matching a sample for an ACL
get map <acl> <value> : report the keys and values matching a sample for a map
get var <name> : retrieve contents of a process-wide variable
get weight <bk>/<srv> : report a server's current weight new ssl cert : create a new certificate file to be used in a crt-list or a directory operator : lower the level of the current CLI session to operator prepare acl : prepare a new version for atomic ACL replacement prepare map : prepare a new version for atomic map replacement set dynamic-cookie-key backend : change a backend secret key for dynamic cookies set map s maxconn setting
set maxconn global <value> : change the per-process maxconn setting
set maxconn server <bk>/<srv> : change a server's maxconn setting set profiling {auto|on|off} : enable/disable resource profiling (tasks,memory) set rate-limit : change a rate limiting value set server / [opts] : change a server' s state, weight, address or ssl
set severity-output [none|number|string]: set presence of severity level in feedback information
set ssl cert <certfile> <payload> : replace a certificate file
set ssl ocsp-response <resp|payload> : update a certificate's OCSP Response from a base64-encode DER set ssl tls-key [id|file] : set the next TLS key for the or listener to set table key [data.* ]* : update or create a table entry's data
set timeout [cli] <delay> : change a timeout setting
set weight <bk>/<srv> (DEPRECATED) : change a server's weight (use 'set server' instead) show acl [@] ] : report available acls or dump an acl' s contents
show activity : show per-thread activity stats (for support/developers)
show backend : list backends in the current running config
show cache : show cache status
show cli level : display the level of the current CLI session
show cli sockets : dump list of cli sockets
show env [var] : dump environment variables known to the process
show errors [<px>] [request|response] : report last request and/or response errors for each proxy
show events [<sink>] [-w] [-n] : show event sink state
show fd [num] : dump list of file descriptors in use or a specific one
show info [desc|json|typed|float]* : report information about the running process
show libs : show loaded object files and libraries
show map [@ver] [map] : report available maps or dump a map's contents show peers [dict|-] [section] : dump some information about all the peers or this peers section show pools : report information about the memory pools usage show profiling [|<#lines>|byaddr]*: show profiling state (all,status,tasks,memory) show resolvers [id] : dumps counters from all resolvers section and associated name servers show schema json : report schema used for stats show servers conn [] : dump server connections status (all or for a single backend) show servers state [] : dump volatile server information (all or for a single backend) show sess [id] : report the list of current sessions or dump this exact session show ssl cert [] : display the SSL certificates used in memory, or the details of a file show ssl crt-list [-n] [] : show the list of crt-lists or the content of a crt-list file show startup-logs : report logs emitted during HAProxy startup show stat [desc|json|no-maint|typed|up]*: report counters for each proxy and server show table []* : report table usage stats or dump this table's contents (filter: data/key)
show tasks : show running tasks
show threads : show some threads debugging information
show tls-keys [id|*] : show tls keys references or dump tls ticket keys when id specified
show trace [<module>] : show live tracing state
show version : show version of the current process
shutdown frontend <frontend> : stop a specific frontend
shutdown session [id] : kill a specific session
shutdown sessions server <bk>/<srv> : kill sessions on a server
trace [<module>|0] [cmd [args...]] : manage live tracing (empty to list, 0 to stop all)
user : lower the level of the current CLI session to user
help [<command>] : list matching or all commands
prompt : toggle interactive mode with prompt
quit : disconnect
2.查看后端backend参数信息
[root@haproxy:/var/lib/haproxy]#
echo "show backend" | socat stdio /var/lib/haproxy/haproxy.sock
# name
stats
m44_webservers1
m44_webservers2
[root@haproxy:/var/lib/haproxy]#
echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock
Name: HAProxy
Version: 2.4.17-9f97155
Release_date: 2022/05/13
Nbthread: 1
Nbproc: 2
Process_num: 1
Pid: 11324
Uptime: 0d 2h32m43s
Uptime_sec: 9163
Memmax_MB: 0
PoolAlloc_MB: 0
PoolUsed_MB: 0
PoolFailed: 0
Ulimit-n: 200030
Maxsock: 200030
Maxconn: 100000
Hard_maxconn: 100000
CurrConns: 0
CumConns: 9156
CumReq: 8
MaxSslConns: 0
CurrSslConns: 0
CumSslConns: 0
Maxpipes: 0
PipesUsed: 0
PipesFree: 0
ConnRate: 0
ConnRateLimit: 0
MaxConnRate: 0
SessRate: 0
SessRateLimit: 0
MaxSessRate: 0
SslRate: 0
SslRateLimit: 0
MaxSslRate: 0
SslFrontendKeyRate: 0
SslFrontendMaxKeyRate: 0
SslFrontendSessionReuse_pct: 0
SslBackendKeyRate: 0
SslBackendMaxKeyRate: 0
SslCacheLookups: 0
SslCacheMisses: 0
CompressBpsIn: 0
CompressBpsOut: 0
CompressBpsRateLim: 0
ZlibMemUsage: 0
MaxZlibMemUsage: 0
Tasks: 13
Run_queue: 0
Idle_pct: 100
node: haproxy.magedu.org
Stopping: 0
Jobs: 6
Unstoppable Jobs: 2
Listeners: 5
ActivePeers: 0
ConnectedPeers: 0
DroppedLogs: 0
BusyPolling: 0
FailedResolutions: 0
TotalBytesOut: 45376
TotalSplicdedBytesOut: 0
BytesOutRate: 0
DebugCommandsIssued: 0
CumRecvLogs: 0
Build info: 2.4.17-9f97155
Memmax_bytes: 0
PoolAlloc_bytes: 54560
PoolUsed_bytes: 54560
Start_time_sec: 1657332508
Tainted: 0
[root@haproxy:/var/lib/haproxy]#
echo "show servers state" | socat stdio /var/lib/haproxy/haproxy.sock
1
# be_id be_name srv_id srv_name srv_addr srv_op_state srv_admin_state srv_uweight srv_iweight srv_time_since_last_change srv_check_status srv_check_result srv_check_health srv_check_state srv_agent_state bk_f_forced_id srv_f_forced_id srv_fqdn srv_port srvrecord srv_use_ssl srv_check_port srv_check_addr srv_agent_addr srv_agent_port
4 m44_webservers1 1 rs1 10.0.0.18 2 0 1 1 9233 6 3 4 6 0 0 0 - 80 - 0 0 - - 0
4 m44_webservers1 2 rs2 10.0.0.28 2 0 1 1 9233 6 3 4 6 0 0 0 - 80 - 0 0 - - 0
4 m44_webservers1 3 local 127.0.0.1 2 0 1 1 9233 1 0 2 0 0 0 0 - 80 - 0 0 - - 0
5 m44_webservers2 1 rs2 10.0.0.28 2 0 1 1 9233 1 0 2 0 0 0 0 - 80 - 0 0 - - 0
#查询backend的后端服务器权重,未设置,默认是1
[root@haproxy:/var/lib/haproxy]#
echo "get weight m44_webservers1/rs1" | socat stdio /var/lib/haproxy/haproxy.sock
1 (initial 1)
[root@haproxy:/var/lib/haproxy]#
echo "get weight m44_webservers1/rs2" | socat stdio /var/lib/haproxy/haproxy.sock
1 (initial 1)
#修改weight,注意只针对单进程有效,因为socket发送消息,可能发到不同的进程,显示的效果就不一样,因此只适合与单进程。多进程的话除非每个进程都设置相同的值,否则每次就会返回不同的值,因此可以代用多进程配合多个socket文件,进行绑定,就能确保一一对应。
[root@haproxy:/var/lib/haproxy]#
echo "set weight m44_webservers1/rs1 3" | socat stdio /var/lib/haproxy/haproxy.sock
[root@haproxy:/var/lib/haproxy]#
echo "get weight m44_webservers1/rs1" | socat stdio /var/lib/haproxy/haproxy.sock
3 (initial 1)
[root@haproxy:/var/lib/haproxy]#
echo "get weight m44_webservers1/rs1" | socat stdio /var/lib/haproxy/haproxy.sock
0 (initial 1)
#设置开启两个socket,并进行绑定,然后就能一对一的操作了
[root@haproxy:/var/lib/haproxy]#
vim /etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /apps/haproxy
#stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
stats socket /var/lib/haproxy/haproxy.sock1 mode 600 level admin process 1
stats socket /var/lib/haproxy/haproxy.sock2 mode 600 level admin process 2
[root@haproxy:/var/lib/haproxy]# 通过socket修改第一个进程权重为0
echo "set weight m44_webservers1/rs1 0" | socat stdio /var/lib/haproxy/haproxy.sock1
[root@haproxy:/var/lib/haproxy]#
echo "get weight m44_webservers1/rs1" | socat stdio /var/lib/haproxy/haproxy.sock1
0 (initial 1)
[root@haproxy:/var/lib/haproxy]#
echo "get weight m44_webservers1/rs1" | socat stdio /var/lib/haproxy/haproxy.sock2
1 (initial 1)
[root@haproxy:/var/lib/haproxy]# #通过socket修改第二个进程也为0
echo "set weight m44_webservers1/rs1 0" | socat stdio /var/lib/haproxy/haproxy.sock2
[root@haproxy:/var/lib/haproxy]#
echo "get weight m44_webservers1/rs1" | socat stdio /var/lib/haproxy/haproxy.sock2
0 (initial 1)
[root@client:~]#
curl 10.0.0.100
10.0.0.28
[root@client:~]#
curl 10.0.0.100
10.0.0.28
#通过权重都设置为0,实现优雅的下线,这样比用交互式命令,直接使用命令,可以方便的脚本实现,这都是临时效果,服务重启这些修改都会丢失。
#将后端服务器禁用,注意只针对单进程有效,多进程需要绑定socket,分别执行
[root@haproxy:/var/lib/haproxy]#
echo " disable server m44_webservers1/rs2 0" | socat stdio /var/lib/haproxy/haproxy.sock1
[root@haproxy:/var/lib/haproxy]#
echo " disable server m44_webservers1/rs2 0" | socat stdio /var/lib/haproxy/haproxy.sock2
[root@client:~]#
curl 10.0.0.100
SorryServer
#两个后端,一个优雅下线,一个禁用,就直接进行sorryserver页面。
#启用
[root@haproxy:/var/lib/haproxy]#
echo " enable server m44_webservers1/rs2 0" | socat stdio /var/lib/haproxy/haproxy.sock2
[root@haproxy:/var/lib/haproxy]#
echo " enable server m44_webservers1/rs2 0" | socat stdio /var/lib/haproxy/haproxy.sock
1
范例: 上线和下线后端服务器脚本
[root@centos7 ~]#cat haproyx_host_up_down.sh
. /etc/init.d/functions #执行函数库,方便后面调用函数库中的action函数,显示执行结果的成功与失败。
case $1 in
up)
echo "set weight magedu-m42-web-80/$2 1" | socat stdio /var/lib/haproxy/haproxy.sock
[ $? -eq 0 ] && action "$2 is up"
;;
down)
echo "set weight magedu-m42-web-80/$2 0" | socat stdio /var/lib/haproxy/haproxy.sock
[ $? -eq 0 ] && action "$2 is down"
;;
*)
echo "Usage: `basename $0` up|down IP"
;;
esac
#$0为脚本的名字,$1为脚本输入的第一个字符串(up|down) $2为第二个服务器名字
自己实验:利用socat上线和下线后端服务器
为了方便管理,在backend中设置自ip为后端服务器的名字,通过ip名字进行判断主机,方便判断是那台主机。
1.修改之后的效果
[root@haproxy:/var/lib/haproxy]#
vim /etc/haproxy/conf.d/test.cfg
frontend m44_web_80
bind 10.0.0.100:80
use_backend m44_webservers1
backend m44_webservers1
server 10.0.0.18 10.0.0.18:80 check
server 10.0.0.28 10.0.0.28:80 check
server local 127.0.0.1:80 backup
backend m44_webservers2
server 10.0.0.28 10.0.0.28:80
[root@haproxy:/var/lib/haproxy]#
systemctl reload haproxy
编辑脚本:自己本机设置了两个socket因此用循环实现,
[root@haproxy:~]#
vim haproxy_host.sh
. /etc/init.d/functions
for sock in /var/lib/haproxy/haproxy.sock*;do
case $1 in
up)
echo "set weight m44_webservers1/$2 1" | socat stdio $sock
[ $? -eq 0 ] && action "$2 is up"
;;
down)
echo "set weight m44_webservers1/$2 0" | socat stdio $sock
[ $? -eq 0 ] && action "$2 is down"
;;
*)
echo "Usage: `basename $0` up|down IP"
;;
esac
done
[root@haproxy:~]# #检查语法
bash -n haproxy_host.sh
[root@haproxy:~]#
bash haproxy_host.sh down 10.0.0.18
10.0.0.18 is down [ OK ]
10.0.0.18 is down [ OK ]
#10.0.0.18已经下线
[root@client:~]#
curl 10.0.0.100
10.0.0.28
[root@client:~]#
curl 10.0.0.100
10.0.0.28
[root@client:~]#
curl 10.0.0.100
10.0.0.28

1.2 static-rr
static-rr:基于权重的轮询调度,不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值,只能改为上线或者下线)及后端服务器慢启动,其后端主机数量没有限制,相当于LVS中的 wrr
balance只能放在backend和listen中
listen web_host
bind 10.0.0.7:80,:8801-8810,10.0.0.7:9001-9010
mode http
log global
balance static-rr #采用static-rr算法
server web1 10.0.0.17:80 weight 1 check inter 3000 fall 2 rise 5
server web2 10.0.0.27:80 weight 2 check inter 3000 fall 2 rise 5
自己实验
1.设置static-rr算法
[root@haproxy:~]#
vim /etc/haproxy/conf.d/test.cfg
frontend m44_web_80
bind 10.0.0.100:80
use_backend m44_webservers1
backend m44_webservers1
balance static-rr
server 10.0.0.18 10.0.0.18:80 check
server 10.0.0.28 10.0.0.28:80 check
server local 127.0.0.1:80 backup
backend m44_webservers2
server 10.0.0.28 10.0.0.28:80
[root@haproxy:~]#
systemctl reload haproxy
#测试
[root@client:~]#
curl 10.0.0.100
10.0.0.28
[root@client:~]#
curl 10.0.0.100
10.0.0.18
[root@haproxy:~]#
echo "set weight m44_webservers1/10.0.0.18 3" | socat stdio /var/lib/haproxy/haproxy.sock2
Backend is using a static LB algorithm and only accepts weights '0%' and '100%'.
#此算法不能够通过socat实现修改权重,只能实现0或1,即上线或者下线。
[root@haproxy:~]#
echo "set weight m44_webservers1/10.0.0.18 0" | socat stdio /var/lib/haproxy/haproxy.sock2
[root@haproxy:~]#
echo "set weight m44_webservers1/10.0.0.18 0" | socat stdio /var/lib/haproxy/haproxy.sock1
#测试
[root@client:~]#
curl 10.0.0.100
10.0.0.28
[root@client:~]#
curl 10.0.0.100
10.0.0.28
1.3 first(几乎不用)
first:根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置,此方式使用较少不支持用socat进行动态修改权重,可以设置0和1,可以设置其它值但无效
listen web_host
bind 10.0.0.7:80,:8801-8810,10.0.0.7:9001-9010
mode http
log global
balance first
server web1 10.0.0.17:80 maxconn 2 weight 1 check inter 3000 fall 2 rise 5
server web2 10.0.0.27:80 weight 1 check inter 3000 fall 2 rise 5
测试访问效果
#同时运行下面命令,观察结果
# while true;do curl http://10.0.0.7/index.html ; sleep 0.1;done
自己实验:
[root@haproxy:~]#
vim /etc/haproxy/conf.d/test.cfg
frontend m44_web_80
bind 10.0.0.100:80
use_backend m44_webservers1
backend m44_webservers1
balance first
server 10.0.0.18 10.0.0.18:80 check maxconn 10 #连接数超过10个才访问第二个。
server 10.0.0.28 10.0.0.28:80 check
server local 127.0.0.1:80 backup
backend m44_webservers2
server 10.0.0.28 10.0.0.28:80
[root@haproxy:~]#
systemctl reload haproxy
#测试
[root@client:~]#
curl 10.0.0.100
10.0.0.18
[root@client:~]#
curl 10.0.0.100
10.0.0.18
#注意,权重能修改,但是不起作用。
#并发测试
[root@client:~]#
yum -y install httpd-tools
[root@client:~]#
while :;do ab -c20 -n100 -k http://10.0.0.100/;sleep 0.1;done
#-c并发20个,-n总共100个包,-k长连接的形式,循环的形式执行
#与此同时其他主机,进行测试,会出现28的主机,但是大多数还是18的机器。
[root@haproxy:~]#
curl 10.0.0.100
10.0.0.18
[root@haproxy:~]#
curl 10.0.0.100
10.0.0.18
[root@haproxy:~]#
curl 10.0.0.100
10.0.0.28
[root@haproxy:~]#
curl 10.0.0.100
10.0.0.18
2 动态算法
动态算法:基于后端服务器状态进行调度适当调整,新请求将优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。
2.1 roundrobin
roundrobin:基于权重的轮询动态调度算法,支持权重的运行时调整,不同于lvs中的rr轮训模式,HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend中最多支持4095个real server,支持对real server权重动态调整,roundrobin为默认调度算法,此算法使用广泛 ,静态算法后端real server个数不限。
listen web_host
bind 10.0.0.7:80,:8801-8810,10.0.0.7:9001-9010
mode http
log global
balance roundrobin
server web1 10.0.0.17:80 weight 1 check inter 3000 fall 2 rise 5
server web2 10.0.0.27:80 weight 2 check inter 3000 fall 2 rise 5
支持动态调整权重:
# echo "get weight web_host/web1" | socat stdio /var/lib/haproxy/haproxy.sock
1 (initial 1)
# echo "set weight web_host/web1 3" | socat stdio /var/lib/haproxy/haproxy.sock
# echo "get weight web_host/web1" | socat stdio /var/lib/haproxy/haproxy.sock
3 (initial 1)
自己实验
#为了操作方便,仍然采用单进程,需要进行调整socket个数,以及对应的进程个数和CPU绑定。
[root@haproxy:~]#
vim /etc/haproxy/haproxy.cfg
global
maxconn 100000
chroot /apps/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
# stats socket /var/lib/haproxy/haproxy.sock1 mode 600 level admin process 1
#stats socket /var/lib/haproxy/haproxy.sock2 mode 600 level admin process 2
#uid 99
#gid 99
user haproxy
group haproxy
daemon
nbproc 1 #设置进程数为一个,与上面的socket数一致。
#nbthread 4
#cpu-map 1 0
#cpu-map 2 1 #关闭绑定,因为只有一个进程,一个CPU,不用绑定
........
[root@haproxy:/var/lib/haproxy]#
rm<
相关文章
动力学技术KTU1121 USB Type-C 端口保护器的介绍、特性、及应用
Sensata PTE7300密封数字压力传感器的介绍、特性、及应用
PANJIT PBHV8110DA/PBHV9110DA低Vce(sat)晶体管的介绍、特性、及应用
ams OSRAM OSLON 黑色平板X LED器件的介绍、特性、及应用
Cree LED CLQ6A三合一贴片LED的介绍、特性、及应用
Cree LED CLQ6B 4-in-1 RGBW贴片LED的介绍、特性、及应用
NDK NX1210AB表面贴装晶体的介绍、特性、及应用
伊顿ACE2V3225共模芯片电感器的介绍、特性、及应用
意法半导体X040灵敏型栅可控硅和Z040可控硅的介绍、特性、及应用
ABLIC S-82Y1B电池保护芯片的介绍、特性、及应用