LVS负载均衡群集

一、LVS简介

LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。

(https://cloud.tencent.com/developer/article/2054205)

群集:

cluster,集群、群集

多台主机构成,表现为一个整体,只提供一个访问入口(域名、IP地址),相当于一台大型计算机,与集群相反的叫分布式

目的:满足互联网对站点性能、响应速度、稳定性、可靠性的高要求

特点:多台主机构成,都干同一件事,对外展现为一个整体

二、群集分三类

1.负载均衡群集(load balance cluster)LB
  • 提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能

  • LB的负载分配依赖于主节点的分流算法,将来自客户机的访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。例如,“DNS轮询” “反向代理”等

典型代表:软件类:LVS(基于内核转发)、Nginx(基于软件转发)、HAProxy等;硬件类:F5、绿盟等

2.高可用群集(high availability cluster)HA
  • 提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用 (HA)的容错效果(几个九,99.9%)

  • HA的工作方式包括双工和主从两种模式,双工即所有节点同时在线主从则只有主节点在线,但当出现故障时从节点能自动切换为主节点例如,“故障切换”“双机热备”等

典型代表:keepalived、heartbeat

3.高性能运算群集(high performance computer cluster)HPC
  • 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力

  • 高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力。例如,“云计算”“网格计算”等

通过云计算或分布式计算来获取高性能的CPU、内存等资源,来提高整体运算能力

三、负载均衡的结构类型

几个九,三个九(99.9%)五个久(99.999%)

第一层,负载调度器(load balabcer或director)

访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集IP 地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。

第二层,服务器池(Server Pool)

群集所提供的应用服务、由服务器池承担,其中每个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。

第三层,共享存储(Share Storage)

为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器

资源池方便了集群里每个服务器调用相同资源,即为共享存储。

四、负载均衡集群工作模式

1.地址转换(NAT模式)
  • 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口

  • 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式

调度机会做网关,承载双向流通压力;有一定的安全性

调度器会作为所有节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,也就是说调度器会承载双向数据流量的负载压力,可能会成为整个群集的性能瓶颈。由于节点服务器都处于内网环境,使用私网IP地址,所有具有一定的安全性。

2.IP隧道(TUN模式)
  • 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器

  • 服务器节点分散在互联网中的不同位置具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。但是由于节点服务器需要部署在不同位置的公网环境中,需要具有独立的公网IP,调度器与节点服务器是通过专用的IP隧道实现相互通信的,因此IP隧道模式的成本较高,安全性较低,且IP隧道需要额外的封装和解封装,性能会受到一定影响

3.直接路由(DR模式)
  • 采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络

  • 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。(与NAT模式的区别)

节点服务器与调度器是部署在同一个物理网络内,因此不需要建立专用的IP隧道。(与TUN模式的区别)

DR模式是企业首选的LVS模式

  1.  modprobe ip_vs
  2.  cat /proc/net/
  1.  ls /usr/lib/modules/3.10.0-1160.71.1.el7.x86_64/kernel/net/netfilter/ipvs
  2.  
  3.  awk -F . '{print $1}'
  4.  [root@localhost ~]#for i in `ls /usr/lib/modules/3.10.0-1160.71.1.el7.x86_64/kernel/net/netfilter/ipvs`;
  5.  do k=`echo $i | awk -F . '{print $1}'`;
  6.  modprobe $k;
  7.  done
  8.  
  9.  ls ip_vs.ko.xz | grep -o "^[^.]*"

LVS的负载调度算法

轮询(round robin)

将收到的访问请求按照顺序轮流分配给各节点

加权轮询(weighted round robin)

  • 权重值高的优先获得任务,分配的请求数更高

  • 保证性能强的服务器承担更多访问流量

最少连接(least connections)

  • 将收到的访问请求优先分给连接数最少的节点

加权最少连接(weighted least connections)

连接数/权重=num,num越小越先被分配

LVS调度算法

rr轮询 wrr加权轮询 sh源地址哈希 dh目的地址哈希 lc最小连接 wlc加权最小连接 lblc基于地址的最小连接

LVS-NAT模式配置步骤:

1)配置NFS共享存储

2)节点服务器安装web服务(apache、nginx、tomcat),注意:默认网关要指向调度器的IP地址,测试的时候关闭连接保存

3)调度服务器要设置IP路由转发功能和设置SNAT等iptables规则,安装ipvsadm工具,配置虚拟服务器和真实节点服务器相关配置

4)客户端测试的时候,网关要指向调度器的IP地址

使用ipcsadm工具,工具选项:

  1.  ipvsadm 工具选项说明:
  2.  
  3.  -A:添加虚拟服务器
  4.  -D:删除整个虚拟服务器
  5.  -s:指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: c、加权最少连接: wlc)
  6.  -a:表示添加真实服务器(节点服务器)
  7.  -d:删除某一个节点
  8.  -t:指定 VIP地址及 TCP端口
  9.  -r:指定 RIP地址及 TCP端口
  10.  -m:表示使用 NAT群集模式
  11.  -g:表示使用 DR模式
  12.  -i:表示使用 TUN模式
  13.  -w: 设置权重(权重为 时表示暂停节点)
  14.  -P 60: 表示保持长连接60秒(默认关闭连接保持)
  15.  -l:列表查看 Lvs 虚拟服务器(默认为查看所有 )
  16.  -n:以数字形式显示地址、端口等信息,常与"-l"选项组合使用。ipvsadm -ln [-t VIP:PORT]

五、LVS-NAT部署实战

前提准备,关闭防火墙,不然会出现403禁止

负载调度器:内网关 ens33:192.168.177.10,外网关 ens36:12.0.0.10 Web节点服务器1:192.168.177.104 Web节点服务器2:192.168.177.105 NFS服务器:192.168.177.106 客户端:12.0.0.120

1.部署共享存储

(NFS服务器:192.168.177.106)

06号机器做NFS共享端

  1.  systemctl stop firewalld.service
  2.  systemctl disable firewalld.service
  3.  setenforce 0
  4.  
  5.  yum install nfs-utils rpcbind -y
  6.  systemctl start rpcbind.service
  7.  systemctl start nfs.service
  8.  
  9.  systemctl enable nfs.service
  10.  systemctl enable rpcbind.service
  11.  
  12.  mkdir /opt/kgc /opt/benet
  13.  chmod 777 /opt/kgc /opt/benet
  14.  echo '内容' > /opt/kgc/index.html
  15.  echo '内容' > /opt/benet/index.html
  16.  [root@localhost ~]# rpm -q rpcbind nfs-utils
  17.  rpcbind-0.2.0-42.el7.x86_64
  18.  nfs-utils-1.3.0-0.48.el7.x86_64
  19.  
  20.  [root@localhost opt]#vim /etc/exprots
  21.  /opt/ky31 192.168.177.0/24(rw,sync,no_root_squash)
  22.  /opt/ky32 192.168.177.0/24(rw,sync,no_root_squash)
  23.  
  24.  [root@localhost opt]# systemctl enable --now rpcbind nfs
  25.  

验证

  1.  06号机上
  2.  [root@localhost opt]# showmount -e
  3.  Export list for localhost.localdomain:
  4.  /opt/ky32 192.168.177.0/24
  5.  /opt/ky31 192.168.177.0/24
  6.  04机上
  7.  [root@localhost ~]# showmount -e 192.168.177.106
  8.  Export list for 192.168.177.106:
  9.  /opt/ky32 192.168.177.0/24
  10.  /opt/ky31 192.168.177.0/24
  11.  05机上
  12.  [root@localhost ~]# showmount -e 192.168.177.106
  13.  Export list for 192.168.177.106:
  14.  /opt/ky32 192.168.177.0/24
  15.  /opt/ky31 192.168.177.0/24
  16.  
2.配置节点服务器

(192.168.177.105、192.168.177.104)

04号机,安装nginx,服务名nginx

  1.  cd /etc/yum.repos.d/
  2.  mkdir repo.bak
  3.  mv *.repo repo.bak
  4.  vim nginx.repo
  5.  [nginx]
  6.  name=nginx repo
  7.  baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
  8.  gpgcheck=1
  9.  enabled=1
  10.  gpgkey=https://nginx.org/keys/nginx_signing.key
  11.  module_hotfixes=true
  12.  ###1、安装、启动
  13.  yum install -y nginx
  14.  systemctl start httpd.service
  15.  systemctl enable httpd.service
  16.  
  17.  vim /etc/nginx/conf.d/default.conf #进入配置文件找默认根目录
  18.  #根目录在/usr/share/nginx/html
  19.  #移走根目录源文件
  20.  cd /usr/share/nginx/html/
  21.  mv * /opt/
  22.  ###2、挂载到根目录
  23.  mount 192.168.177.106:/opt/ky31 /usr/share/nginx/html/
  24.  # 文件再移回来
  25.  mv /opt/* /usr/share/nginx/html/
  26.  ####永久挂载
  27.  vim /etc/fstab
  28.  192.168.177.106:/opt/ky31 /usr/share/nginx/html nfs defaults,_netdev 0  0

05号机,安装apache,服务名httpd

  1.  ###1、安装
  2.  yum install -y httpd
  3.  vim /etc/httpd/conf/httpd.conf
  4.  
  5.  #95行
  6.  ServerName www.yml.com:80
  7.  #添加关闭长连接命令,提升实验流畅性
  8.  KeepAlive off
  9.  
  10.  ###2、挂载到根目录
  11.  mount 192.168.177.106:/opt/ky32 /var/www/html/
  12.  systemctl enable --now httpd
  13.  
  14.  ####永久挂载
  15.  vim /etc/fstab
  16.  192.168.177.106:/opt/ky32 /var/www/html nfs defaults,_netdev 0  0

验证:

3.配置负载调度器

(内网关 ens33:192.168.177.103,外网关 ens36:12.0.0.10)

03号机网关服务器,配置双网卡

  1.  
  2.  cd /etc/sysconfig/network-scripts/
  3.  cp ens-33 ens-36
  4.  [root@localhost network-scripts]#vim ifcfg-ens36#192.168.177.103
  5.  [root@localhost network-scripts]#vim ifcfg-ens33#12.0.0.10
  6.  #注释网关、DNS服务器地址
  7.  

测试

网关服务器再开启IP转发功能

  1. #vim /etc/sysctl.conf
  2. #写入
  3. net.ipv4.ip_forward=1
  4. [root@localhost ~]#sysctl -p
  5. net.ipv4.ip_forward = 1
  6. #仅仅给网关增加路由转发功能还不够

节点服务器04号、05号将网关改成网关服务器的地址(192.168.177.103)

  1. vim /etc/sysconfig/network-scripts/ifcfg-ens33
  2. GATEWAY=192.168.177.103
  3. #刷新
  4. systemctl restart network

实现内网访问外网:

(1)网关配置SNAT转发规则
  1. # 网关服务器上
  2. iptables -nL
  3. iptables -F#清除规则
  4. iptables -F -t nat#清除nat表规则
  5. #添加snat
  6. [root@localhost ~]#iptables -t nat -A POSTROUTING -s 192.168.177.0/24 -o ens36 -j SNAT --to 12.0.0.10
  7. #36:12.0.0.10;33:192.169.177.103
(2)加载LVS内核模块
  1. [root@localhost ~]#cd /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs/
  2. [root@localhost ipvs]#ls
  3. ip_vs_dh.ko.xz ip_vs_lblc.ko.xz ip_vs_nq.ko.xz ip_vs_sed.ko.xz ip_vs_wrr.ko.xz
  4. ip_vs_ftp.ko.xz ip_vs_lblcr.ko.xz ip_vs_pe_sip.ko.xz ip_vs_sh.ko.xz
  5. ip_vs.ko.xz ip_vs_lc.ko.xz ip_vs_rr.ko.xz ip_vs_wlc.ko.xz
  6. #使用for循环加载所以模块
  7. [root@localhost ipvs]#for i in ` ls /usr/lib/modules/3.10.0-693.el7.x86_64/kernel/net/netfilter/ipvs/ | grep -o "^[^.]*"`
  8. > do
  9. > modprobe $i
  10. > done
  11. #查看
  12. [root@localhost ipvs]#cat /proc/net/ip_vs
  13. IP Virtual Server version 1.2.1 (size=4096)
  14. Prot LocalAddress:Port Scheduler Flags
  15. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
(3)安装ipvs工具
  1. yum install -y ipvsadm
  2. 04号机上永久挂载nfs
  3. vim /etc/fstab
  4. 192.168.177.106:/opt/ky31 /var/www/html nfs defaults,_netdev 0 0
  5. #启动
  6. #先失败,缺文件,看日志
  7. 9 08 23:57:33 localhost.localdomain bash[57712]: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录
  8. #解决方法——创建文件
  9. touch /etc/sysconfig/ipvsadm
  10. #或
  11. ipvsadm-save /etc/sysconfig/ipvsadm
(4)配置负载均衡,利用工具

大致三步

  1. 1、先看是否已经有策略
  2. ipvsadm -ln
  3. 存在则删除ipvsadm -C
  4. 2、进行配置
  5. [root@localhost ~]#ipvsadm -A -t 12.0.0.10:80 -s rr
  6. [root@localhost yum.repos.d]#ipvsadm -a -t 12.0.0.10:80 -r 192.168.177.104:80 -m
  7. [root@localhost yum.repos.d]#ipvsadm -a -t 12.0.0.10:80 -r 192.168.177.105:80 -m
  8. -A用于确定具体服务器
  9. -D删除整个虚拟服务器
  10. -t指定虚拟服务器的vip地址(与外网对接的ip地址)
  11. -s指定调度算法(rr:轮询、wrr:加权轮询、lc:最少连接、wlc:加权最少连接)
  12. -p 60指定长连接,等待60秒(默认关闭)
  13. ipvsadm -a -t 12.0.0.10:80 -r 192.168.177. -s rr
  14. -a确定真实服务器
  15. -t指定虚拟服务器的IP地址与端口号
  16. -r指定真实服务器的IP地址与端口号
  17. -m使用NAT模式
  18. -g使用DR模式
  19. -i使用TUN模式
  20. -w设置权重(为0表示暂停节点)
  21. -l列表查看LVS虚拟服务器(默认查看所有)
  22. -n以数字形式显示地址、端口等信息(常与"-l"共同使用)
  23. 3、激活
  24. [root@localhost ~]#ipvsadm
  25. IP Virtual Server version 1.2.1 (size=4096)
  26. Prot LocalAddress:Port Scheduler Flags
  27. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  28. TCP localhost.localdomain:http rr
  29. -> 192.168.177.104:http Masq 1 0 0
  30. -> 192.168.177.105:http Masq 1 0 0

验证:客户机(12.0.0.120)访问网关

测试时需要关闭NGINX上的长连接

04号机安装的Nginx

  1. 04机上
  2. cd /etc/httpd/conf/
  3. vim httpd.conf
  4. KeepAlive 0;

后记:ipvsadm工具

策略配置是临时的,工具一关闭策略就消失

  1. #保存
  2. ipvsadm-save > /opt/ipvsadm#任意文件
  1. #删除
  2. [root@localhost ~]#ipvsadm -ln
  3. IP Virtual Server version 1.2.1 (size=4096)
  4. Prot LocalAddress:Port Scheduler Flags
  5. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  6. TCP localhost.localdomain:http rr
  7. -> 192.168.177.104:http Masq 1 0 0
  8. -> 192.168.177.105:http Masq 1 0 0
  9. #删除单条策略-d
  10. [root@localhost ~]#ipvsadm -d -t 12.0.0.10:80 -r 192.168.177.105:80 -m
  11. [root@localhost ~]#ipvsadm -ln
  12. IP Virtual Server version 1.2.1 (size=4096)
  13. Prot LocalAddress:Port Scheduler Flags
  14. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  15. TCP localhost.localdomain:http rr
  16. -> 192.168.177.104:http Masq 1 0 0
  17. #删除全部策略-D
  18. [root@localhost ~]#ipvsadm -D -t 12.0.0.10:80
  19. [root@localhost ~]#ipvsadm -ln
  20. IP Virtual Server version 1.2.1 (size=4096)
  21. Prot LocalAddress:Port Scheduler Flags
  22. -> RemoteAddress:Port Forward Weight ActiveConn InActConn

恢复

  1. [root@localhost ~]#ipvsadm-restore < /opt/ipvsadm#之前保存的文件位置
  2. [root@localhost ~]#ipvsadm -ln
  3. IP Virtual Server version 1.2.1 (size=4096)
  4. Prot LocalAddress:Port Scheduler Flags
  5. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  6. TCP localhost.localdomain:http rr
  7. -> 192.168.177.104:http Masq 1 0 0
  8. -> 192.168.177.105:http Masq 1 0 0
 

LVS负载均衡群集——其一的更多相关文章

  1. LVS负载均衡群集部署——DR模式

    LVS负载均衡群集部署--DR模式 1.LVS-DR概述 2.部署实验 1.LVS-DR概述: LVS-DR(Linux Virtual Server Director Server)工作模式,是生产 ...

  2. LVS负载均衡群集部署——NAT模式

    LVS负载均衡群集部署--NAT模式 1.群集应用概述 2.NAT模式LVS负载均衡群集部署 1.群集应用概述: 存在的问题: 互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求 ...

  3. 21.LVS负载均衡群集-DR群集

    LVS负载均衡群集-DR群集 目录 LVS负载均衡群集-DR群集 数据包流向分析 DR模式的特点 LVS-DR中的ARP问题 IP地址冲突 解决办法 路由根据ARP表项,会将新来的请求报文转发给Rea ...

  4. 20.LVS负载均衡群集—NAT模式实例

    LVS负载均衡群集-NAT模式实例 目录 LVS负载均衡群集-NAT模式实例 群集引用概述 群集的含义 问题 解决方法 企业群集分类 群集的三种类型 负载均衡群集(Load Balance Clust ...

  5. NAT模式 LVS负载均衡群集部署

    NAT模式 LVS负载均衡群集部署的操作步骤 实验环境准备: 负载调度器:内网关 ens33:172.16.10.1,外网关 ens37:12.0.0.1 Web节点服务器1:172.16.10.10 ...

  6. LVS负载均衡群集

    概述 群集的类型:无论是哪种服务器,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机.根据群集所针对的目标差异,可以分为以下三个类型: 1.负 ...

  7. 搭建Lvs负载均衡群集

    一.Lvs详解 lvs内核模型 1.模型分析 用户访问的数据可以进入调度器 匹配调度器分配的虚拟IP|IP+端口(路由走向) 根据调度器的算法确定匹配的服务器 2.调度条件:基于IP.基于端口.基于内 ...

  8. LVS负载均衡群集(NAT)

    ----构建NAT模式的LVS群集----------client---------------LVS----------------WEB1-----------WEB2------------NF ...

  9. LVS负载均衡集群--DR模式部署

    目录: 一.LVS-DR数据包流向分析 二.DR 模式的特点 三.LVS-DR中的ARP问题 四.DR模式 LVS负载均衡群集部署 一.LVS-DR数据包流向分析 1.为方便进行原理分析,将clien ...

  10. LVS负载均衡集群--NAT模式部署

    目录: 一.企业群集应用概述 二.负载均衡群集架构 三.负载均衡群集工作模式分析 四.关于LVS虚拟服务器 五.NAT模式 LVS负载均衡群集部署 一.企业群集应用概述 1.群集的含义 Cluster ...

随机推荐

  1. linux_mint_21 vim配置:剪贴板支持和输入法自动切换

    一.vim的剪贴板支持 有的vim版本不支持系统剪切板,也就是说在vim编辑器外面复制的内容,不能够粘贴到vim中;在vim中通过yy.d.c复制剪切的内容也不能粘贴在vim编辑器外面. 这实在是有点 ...

  2. Django基本数据库操作

    Django基本数据库操作 @ 目录 Django基本数据库操作 ‍内容一:基本数据库配置 ‍内容二:ORM基本操作 ‍内容一:基本数据库配置 Django是一个流行的Python Web框架,它可以 ...

  3. 原来ES7~12分别增加了这些属性呀

    ES6也称为ES2015,于2015年发布,此后每年都有新增一些属性,分别命名为ES7~12,发布的年份分别对应2016年到2021年 ES7 includes方法 数组中新增了includes方法, ...

  4. 【go笔记】简单的http服务

    前言 Go语言通过内置的标准库net/http可以非常方便地实现web服务.不借助任何框架,单凭标准库,50行代码内即可实现简单的web服务. http的ListenAndServe()函数原型: f ...

  5. AVR汇编(七):位操作和MCU控制指令

    AVR汇编(七):位操作和MCU控制指令 位操作指令 SBI / CBI SBI 指令用于设置I/O寄存器中的第 b 位, CBI 指令用于清除I/O寄存器中的第 b 位. 例如: SBI DDRB, ...

  6. dBeaver操作iotdb并实现导入和导出

    1.windows下操作iotdb,现在官网下载相关的iotdb包 官网地址:https://archive.apache.org/dist/iotdb/   一般建议下载 -all的  2.打开db ...

  7. 7、Mybatis之特殊SQL

    7.1 创建接口.映射文件和测试类 ++++++++++++++++++++++++++分割线++++++++++++++++++++++++++ 注意namespace属性值为对应接口的全限定类名 ...

  8. GrapeCity Documents V6.0 Update 2发布,新增支持SpreadJS的.sjs文件格式

    近日,GrapeCity Documents 正式迎来其V6.2 的发布更新,能够支持 SpreadJS 中 .sjs 类型的文件.这一重大更新将为用户带来更多地惊喜. .sjs文件有两个关键优势:空 ...

  9. 代码随想录算法训练营第二十九天| 491.递增子序列 46.全排列 47.全排列 II

      491.递增子序列 卡哥建议:本题和大家刚做过的 90.子集II 非常像,但又很不一样,很容易掉坑里.  https://programmercarl.com/0491.%E9%80%92%E5% ...

  10. WPF学习 - 闭坑(持续更新)

    坑1:自定义控件设计原则: 既然称之为控件,那么就必定有界面与行为两部分. 界面就是展示给用户看的,用于承载类的属性.方法.事件等. 行为就是类的方法,以及这些方法需要用到的属性.字段等. WPF设计 ...