均衡负载集群(LBC)-1
均衡负载集群(LBC)
客户–>通过Internet—>负载调度器—>n台真实服务器
负载调度器:
- 软件:LVS;Nginx;Haproxy
- 硬件:F5;
LVS架构:
- 使用到C/S(B/S)架构
Nginx的负载均衡:
- 只能使用在B/S架构上
LVS的工作层级
- 用户:ipvsadm–>命令行管理工具
- 内核:ipvs
1、LVS概述
LVS相关原理
- LVS的组成
- IPVS:运行内核空间
- IPVSADM:运行在用户空间,管理集群服务器的命令工具
- LVS原理:根据用户请求的套接字判断,分流至真实服务器的工作模块
LVS工作方式:
- 工作模式:
- NAT模式
- TUN模式
- DR模式
- GitHub–>正在开发;
实验主机的配置
- 规划:
- 负载调度器:192.168.75.10
- 后端服务器:192.168.75.11/12
- 服务器配置要求:
- 系统:centos6.x都可以
- 网卡:双网卡
- eth0:充当外网:192.168.75.0/24
- eth1:充当内网:172.24.254.0/24
- 备注:这个是是实验的预配置
构建一台主机node0–>然后复制出来5台用于后面的实验
#修改一下主机名-->永久修改
[root@node0 ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node0
#修改一下主机名
[root@node0 ~]# hostname LVS-SERVER
[root@node0 ~]# su -
#关闭一下NetworkManager-->关闭网卡的守护进程
#关闭一下网卡的守护进程-->Centos6.8需要关闭;我的实验环境是没有的;使用的是Centos6.4
[root@LVS-SERVER ~]# service NetworkManager stop#配置网卡公网ip
[root@LVS-SERVER ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.75.10
NETMASK=255.255.255.0
GATEWAY=192.168.75.2
#配置内网ip
[root@LVS-SERVER ~]# cd /etc/sysconfig/network-scripts/
[root@LVS-SERVER network-scripts]# cp -a ifcfg-eth0 ifcfg-eth1
[root@LVS-SERVER network-scripts]# vim ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.25.254.10
NETMASK=255.255.255.0
#重启网络
[root@LVS-SERVER network-scripts]# service network restart#配置光盘yum源
[root@LVS-SERVER network-scripts]# cd /etc/yum.repos.d/
[root@LVS-SERVER yum.repos.d]# vim local.repo
[local]
name=local_repo
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
#配置自动开机挂载光盘
[root@node0 ~]# vim /etc/fstab
...........#在末行添加以下内容
/dev/cdrom /mnt/cdrom iso9660 defaults 0 0#关闭iptables和selinux
[root@node0 ~]# service iptables stop
[root@node0 ~]# chkconfig iptables off
[root@node0 ~]# getenforce
Disabled#关闭对应的ARP响应以及公告功能--->这个是可选选--->先把它所有的写进内核;#需要的时候打开
[root@node0 ~]# vim /etc/sysctl.conf
..............#在末行添加如下几行
#关闭ARP功能
#net.ipv4.conf.all.arp_ignore = 1
#net.ipv4.conf.all.arp_announce = 2_
#net.ipv4.conf.default.arp_ignore = 1
#net.ipv4.conf.default.arp_announce = 2
#net.ipv4.conf.lo.arp_ignore = 1
#net.ipv4.conf.lo.arp_announce = 2#使用命令重新读取
[root@node0 ~]# sysctl -p
2、LVS-DR模式
工作逻辑图
客户–>与后端、LVS都处于同一个网段当中;
用户–>访问LVS服务器–>找后端服务器
二层MAC地址转发–>同一个IP被后端服务器隐藏了;
模式的特点:
- 集群节点:必须在一个网络当中,集群节点必须处于同一个广播域中
- 真实服务器网关指向路由器
- RIP既可以是私网地址,又可以是公网IP
- 负载调度器只负责入站请求,压力是最小的;
- 大大减轻负载调度器的压力,支持更多的服务器节点
- 不能支持端口映射
ARP的响应级别
- arp-ignore
- 0:只要本机配置有相应的IP地址就有响应
- 1:仅在请求的目标地址配置在请求到达的网络接口上时,才给与响应
ARP的通告行为
- arp-announce
- 0:将本机任何网络接口上的任何地址都向外通告
- 1:尽可能避免像目标网络通告与其网络不匹配的地址信息表
- 2:仅向目标网络通告与其网络相匹配的地址信息
LVS-DR模式实验
- 负载调度器配置如下—>使用是的centos7.x
- 服务器:192.168.75.130
#首先关闭一下网卡的守护进程
[root@node0 ~]# systemctl stop NetworkManager
[root@node0 ~]# systemctl disable NetworkManager#创建一个eth0:0用来充当集群入口接口
[root@node0 ~]# cd /etc/sysconfig/network-scripts/
[root@node0 network-scripts]# cp ifcfg-ens32 ifcfg-ens32:0#配置一个虚拟ip
[root@node0 network-scripts]# vim ifcfg-ens32:0
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens32:0" #注意修改网卡名
DEVICE="ens32:0"
ONBOOT="yes"
IPADDR="192.168.75.100" #这个就是虚拟ip-->自己随便创建的
PREFIX="24"#然后把子接口拉起来
[root@node0 network-scripts]# ifup ens32:0#关闭网卡重定向功能
[root@node0 network-scripts]# cd
[root@node0 ~]# vim /etc/sysctl.conf
............#在末行添加如下内容够
#关闭网卡重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0#刷新配置文件
[root@node0 ~]# sysctl -p#重载ipvs模块
[root@node0 ~]# modprobe ip_vs#安装ipvsadmin命令行工具
[root@node0 ~]# yum -y install ipvsadm
- 后端服务器配置—>这里使用两台服务器–>两台服务器的配置完全是一样的
- 192.168.75.131/132
- 两台服务器分别是安装httpd
- 创建一个页面用于实验区分
#关闭一下网卡的守护进程
[root@Node1 ~]# systemctl stop NetworkManager
[root@Node1 ~]# systemctl disable NetworkManager#配置一个环回口
[root@Node1 ~]# cd /etc/sysconfig/network-scripts/
[root@Node1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@Node1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.75.100 #配置虚拟IP-->这个ip和调度服务器的ip是一样的
NETMASK=255.255.255.255 #广播全部是255
...............
#拉起来网卡lo:0
[root@Node1 ~]# systemctl restart network#调整一下内核参数
[root@Node1 network-scripts]# cd
[root@Node1 ~]# vim /etc/sysctl.conf
..........
#关闭ARP功能
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2_
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 3#重新读取一下
[root@Node1 ~]# sysctl -p
#添加一个路由-->#如果有人来访问这个ip就把它丢给lo:0网卡
[root@node2 ~]# route add -host 192.168.75.100 dev lo:0#然后配置开机自启
[root@node2 ~]# echo "route add -host 192.168.75.100 dev lo:0" >> /etc/rc.local #安装一下httpd
[root@Node1 ~]# yum -y install httpd#启动httpd
[root@Node1 ~]# systemctl start httpd.service
[root@Node1 ~]# systemctl enable httpd.service #修改默认页面
[root@Node1 ~]# vim /var/www/html/index.html
this is node1-131#测试一下是否能够访问
[root@Node1 ~]# curl localhost
this is node1-131
- 最后回到调度服务器node0配置
- 192.168.75.130
- 开始创建lvs集群
#查看一下当前集群内容--->还没有创建,因此没有任何集群信息
[root@node0 ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)#添加一下集群
-->-A是添加一个集群
-->-t是指定一个虚拟ip以及端口
-->-s:指定轮询模式为rr
[root@node0 ~]# ipvsadm -A -t 192.168.75.100:80 -s rr #添加集群子节点
-->-a:添加子节点
-->-r:指定子节点的真实ip以及端口
-->-g:指定了是DR模式
[root@node0 ~]# ipvsadm -a -t 192.168.75.100:80 -r 192.168.75.131:80 -g#查看一下集群的信息
[root@node0 ~]# 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.75.100:80 rr-> 192.168.75.131:80 Route 1 0 0 -> 192.168.75.132:80 Route 1 0 0 [root@node0 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes-> RemoteAddress:Port
TCP 192.168.75.100:80 2 33 0 6972 0-> 192.168.75.131:80 1 6 0 360 0-> 192.168.75.132:80 1 27 0 6612 0
测试一下
http://192.168.75.100/
3、LVS-NAT模式
工作逻辑图:
用户—>访问LVS服务器
- 源是自己,目的是LVS
LVS—>访问后端服务器
- LVS–>通过DNAT–>把目的地址修改成后端服务器
- 后端返回–>也是通过SNAT–>给到LVS–>然后再给到用户;
DNAT:目的地址转换
SNAT:源地址转换;
NAT模式的特点:
- 集群节点,必须在一个网络中
- 真实服务器必须将网关指向负载调度器
- RIP 通常都是私有 P,仅用于各个集群节点通信
- 负载调度器必须位于客户端和真实服务器之间,充当网关
- 支持端口映射
- 负载调度器操作系统必须是 Linux,真实服务器可以使用任意系统
- 进出数据报文都要进过负载调度器机器,压力较大
实验架构图:
客户端--->路由器--->后端服务器
实验环境的构建:
-
负载调度器:192.168.75.110
-
后端服务器:192.168.75.130
- 网络类型:仅主机模式:172.25.254.130;
- 虚拟机硬件配置:
- 硬件:2U–>CPU
- 内存:2G
- 网卡两张–>不同网段
- 192.168.75.0/24–>充当公网
- 172.25.254.0/24–>充当私网
- 虚拟机软件配置:
-
后端服务器:192.168.75.131
LVS负载调度器配置
- LVS负载调度服务器:Centos6.x
- 双网卡:192.168.75.110–>充当外网
- 172.25.254.110–>充当内网和两台后端服务器130和131互通
#关闭selinux和防火墙
[root@localhost ~]# getenforce
Disabled[root@localhost ~]# service iptables stop
[root@localhost ~]# chkconfig iptables off#关闭一下网卡的守护进程-->Centos6.8需要关闭;我的实验环境是没有的;使用的是Centos6.4
[root@localhost ~]# service NetworkManager stop#配置光盘yum源
[root@localhost ~]# vim /etc/yum.repos.d/local.repo
[local]
name=local_repo
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
#挂载yum源
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom/#配置网络-->#公网网络-->如下
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.75.110
NETMASK=255.255.255.0#私网网络如下-->eth1是使用ip a s 可以看出内核识别的网卡名;直接复制出来修改ip
[root@localhost network-scripts]# cp -a ifcfg-eth0 ifcfg-eth1
[root@localhost network-scripts]# vim ifcfg-eth1
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.25.254.110
NETMASK=255.255.255.0#重启网络
[root@localhost network-scripts]# service network restart#关闭网卡的重定向功能
[root@localhost network-scripts]# vim /etc/sysctl.conf #在文件的末行添加
#关闭网卡重定向
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0#开启路由转发功能
[root@localhost ~]# vim /etc/sysctl.conf
..........7 net.ipv4.ip_forward = 1
........#查看一下配置是否生效
[root@localhost network-scripts]# sysctl -p#重新挂载ipvs模块
[root@localhost network-scripts]# modprobe ip_vs
#安装ipvsadm命令行工具
[root@localhost network-scripts]# yum -y install ipvsadm#查看当前的ipvs集群内容
[root@localhost network-scripts]# ipvsadm -v#然后开启防火墙
[root@localhost ~]# service iptables start#一定要先清楚一下防火墙规则-->然后在设置防火墙规则
[root@localhost ~]# iptables -F#设置防火墙规则#添加防火墙规则:当源地址是内网网段,并且出口网卡为eth0的时候,进行SNAT转换,转换源地址为外网网卡地址
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.25.254.0/24 -o eth0 -j SNAT --to-source 192.168.75.110#查看规则是否生效
[root@localhost ~]# iptables -t nat -L
.........#看到这一行代表成功
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 172.25.254.0/24 anywhere to:192.168.75.110 #添加集群-->添加ipvsadm的TCP集群-->指定规则是轮询
[root@localhost ~]# ipvsadm -A -t 192.168.75.110:80 -s rr#为集群添加节点-->-m指定的是LVS的nat模式
[root@localhost ~]# ipvsadm -a -t 192.168.75.110:80 -r 172.25.254.130:80 -m
[root@localhost ~]# ipvsadm -a -t 192.168.75.110:80 -r 172.25.254.131:80 -m#查看一下集群内容
[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.75.110:80 rr-> 172.25.254.130:80 Masq 1 0 0 -> 172.25.254.131:80 Masq 1 0 0 #把集群保存到配置文件,开启持久化
[root@localhost ~]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]#设置开机自启动
[root@localhost ~]# chkconfig ipvsadm on
后端服务器131/132配置
- 安装httpd
- 注意网段是172.25.254.0/24
- 注意添加网关地址:
#查看一下ip
[root@Node1 ~]# ip a
.........
inet 172.25.254.131/24 brd 172.25.254.255 scope global noprefixroute ens32
........#安装httpd
[root@Node1 ~]# yum -y install httpd#修改默认页面
[root@Node1 ~]# vim /var/www/html/index.html
this is 131.index#启动apaceh
[root@Node1 ~]# systemctl start httpd
[root@Node1 ~]# curl localhost
this is 131.index#把网关指定到调度服务器ip
[root@Node1 ~]# route add default gw 172.25.254.110
[root@Node1 ~]# route -n
最后浏览器访问–>到这里位置实验成功
http://192.168.75.110/
4、LVS-TUN模式
工作逻辑图:
客户端、LVS、后端–>大家都是公网地址
客户–>访问LVS—>
数据包的二次封装;
模式的特点
- 集群节点不必位于同一个物理网络但必须都拥有公网 IP (或都可以被路由)
- 真实服务器不能将网管指向负载调度器
- RIP 必须是公网地址
- 负载调度器只负责入站请求
- 不支持端口映射功能
- 发送方和接收方必须支持道功能
相关文章:
均衡负载集群(LBC)-1
均衡负载集群(LBC) 客户–>通过Internet—>负载调度器—>n台真实服务器 负载调度器: 软件:LVS;Nginx;Haproxy硬件:F5; LVS架构: 使用到C/S(B/S…...

WebSocket
关于WebSocket: WebSocket 协议在2008年诞生,2011年成为国际标准。现在所有浏览器都已经支持了。 WebSocket 的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话…...

GA-PEG-GA,Glutaric Acid-PEG-Glutaric Acid,戊二酸-聚乙二醇-戊二酸供应
英文名称:Glutaric Acid-PEG-Glutaric Acid,GA-PEG-GA 中文名称:戊二酸-聚乙二醇-戊二酸 GA-PEG-GA是一种线性双功能PEG羧酸试剂。PEG和羧基COOH之间存在C4酯键。PEG羧酸可用于与氨基反应,与NHS和DCC、EDC等肽偶联试剂反应。 P…...

使用sqlmap + burpsuite sql工具注入拿flag
使用sqlmap burpsuite sql工具注入拿flag 记录一下自己重新开始学习web安全之路③。 目标网站:http://mashang.eicp.vip:1651/7WOY59OBj74nTwKzs3aftsh1MDELK2cG/ 首先判断网站是否存在SQL注入漏洞 1.找交互点 发现只有url这一个交互点,搜索框和登录…...

替代AG9300|替代NCS8823|CS5260 Type-C转VGA视频转换方案
替代AG9300|替代NCS8823|CS5260 Type-C转VGA视频转换方案 CS5260是一款是一款实现USB TYPE-C到VGA视频转换的单片机解决方案转换器。CS5260支持USB Type-C显示端口交替模式,CS5260可以将视频和音频流从USB Type-C接口传输到VGA端口。在CS5260芯片中,显示…...

乐鑫特权隔离机制的 OTA 固件升级
固件空中升级 (OTA, Over-The-Air) 是任何联网设备的重要功能之一,支持开发人员通过远程更新固件,以发布新功能或修复错误。乐鑫特权隔离框架中包含两类应用程序:受保护的应用程序 (protected_app) 和用户应用程序 (user_app) ,这…...

C++数据结构 —— 二叉搜索树
目录 1.二叉搜索树的基本概念 1.1二叉搜索树的基本特征 2.二叉搜索树的实现 2.1数据的插入(迭代实现) 2.2数据的搜索(迭代实现) 2.3中序遍历(递归实现) 2.4数据的删除(迭代实现) 2.5数据的搜索(递归实现) 2.6数据的插入(递归实现) 2.7数据的删除(递归实现) 2.8类的完…...
Maven面试题及答案
1、Maven有哪些优点和缺点 优点: 1、简化项目依赖管理 2、方便与持续集成工具(Jenkins)整合 3、有助于多模块项目开发,比如一个模块开发好后发布到仓库,依赖该模块时可以直接从远程仓库更新,不用自己手动去编译 4、有很多插件&am…...
WebRTC系列-Qos系列之接收放RTX处理
文章目录 1. RTX详解1.1 RTX包头解析1.2 RTX包中的OSN2. RTX在WebRTC中处理2.1 组包2.2 解包2.3 发送及接收处理流程2.3.1 发送流程2.3.2 rtx标记的设置流程2.3.3 解析流程2.3.4 RTX解包在上一篇 WebRTC系列-Qos系列之接收NACK文章中分析了接收到nack后解析的主要流程。在WebR…...
国内能否炒伦敦金,2023国际十大正规伦敦金交易平台排名
在目前的投资市场环境中,现货黄金是一种屡见不鲜的投资选择,它依靠国际化的投资环境,成为了世界范围内投资者的重要选择对象。进行现货黄金投资,人们除了要认识市场发展基本现状之外,更要做好基本面和技术面分析工作&a…...
react路由 - react-router-dom
react路由 现代的前端应用大多都是 SPA(单页应用程序),也就是只有一个 HTML 页面的应用程序。因为它的用户体验更好、对服务器的压力更小,所以更受欢迎。为了有效的使用单个页面来管理原来多页面的功能,前端路由应运而…...

01-RTOS
对于裸机而言,对于RTOS而言即:对于裸机,打游戏意味着不能回消息 回消息意味着不能打游戏对于RTOS 打游戏和裸机的切换只需要一个时间片节拍 1ms 从宏观来看 就是同时进行的两件事(但要在这两件事情的优先级一样的情况下࿰…...

信息安全管理
信息安全管理信息安全管理信息安全风险管理信息安全管理体系应急响应与灾难恢复应急响应概况信息系统灾难修复灾难恢复相关技术信息安全管理 管理概念:组织、协调、控制的活动,核心过程的管理控制 管理对象和组成:包括人员在内相关资产&…...
深度学习tips
1、datasets_make函数中最后全部转化为numpy形式 datanp.array(data)否则会出现问题,比如数据是103216,经过trainloader生成tensor后(batch_size为30),发现生成的数据为: data.shape #(10,) data[0].shape…...
2023-2-13 刷题情况
替换子串得到平衡字符串 题目描述 有一个只含有 ‘Q’, ‘W’, ‘E’, ‘R’ 四种字符,且长度为 n 的字符串。 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」。 给你一个这样的字符串 s,请通过…...

[HSCSEC 2023] rev,pwn,crypto,Ancient-MISC部分
比赛后有讲解,没赶上,前20比赛完1小时提交WP,谁会大半夜的起来写WP。总的感觉pwn,crypto过于简单,rev有2个难的不会,其它不是我的方向都感觉过于难,一个都没作。revDECOMPILEONEOONE入门题,一个…...
SpringBoot 接入 Spark
本文主要介绍 SpringBoot 与 Spark 如何对接,具体使用可以参考文章 SpringBoot 使用 Spark pom 文件添加 maven 依赖 spark-core:spark 的核心库,如:SparkConfspark-sql:spark 的 sql 库,如:s…...

在线支付系列【23】支付宝开放平台产品介绍
有道无术,术尚可求,有术无道,止于术。 文章目录前言支付产品App 支付手机网站支付电脑网站支付新当面资金授权当面付营销产品营销活动送红包会员产品App 支付宝登录人脸认证信用产品芝麻 GO芝麻先享芝麻免押芝麻工作证安全产品交易安全防护其…...

Python绝对路径和相对路径详解
在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。什么是当前工作目录每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。注…...
基于多进程的并发编程
一:不同平台基于多进程并发编程的实现 1.Windows平台 参考博文:Windows 编程(多进程) 更多API: 1)waitForSingleObject:等待一个内核对象变为已通知状态 2)GetExitCodeProcess:获取…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...