学习笔记小结

news2024/11/15 14:00:08

redis-cluster集群

redis3.0引入的分布式存储方案

集群由多个node节点组成,redis数据分布在这些节点当中。

在集群之中分为主节点和从节点

集群模式当中,主从一一对应,数据的写入和读取与主从模式一样,主负责写,从只能读,

集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将不可用。切换完毕之后,集群会立刻恢复。

集群模式按照数据分片:

1、数据分片:是集群的核心功能,每个主都可以对外提供读、写的功能,但是数据是一一对应写入主的对应从节点。在集群模式中,可以容忍数据的不完整。

2、高可用:集群的主要目的。

数据分片的实现:

redis的集群引入了哈希槽的概念。

在redis集群当中,一共有16384个哈希槽位。(0-16383)

根据集群当中的主从节点数,分配哈希槽位,每个主从节点只负责一部分哈希槽位。

每次读写都涉及到哈希槽位,key通过CRC16校验之后,对16384取余数,余数值决定数据放入哪个哈希槽位。通过这个值去找到对应的哈希槽位所在地节点,然后直接跳转到这个节点进行存取操作。

注:主从节点的哈希槽位的值是连续的,如果出现不连续的哈希值,或者有哈希槽位没有被分配,整个集群将会报错。

主从复制的意义:主宕机之后,主节点原来复制的哈希槽将会不可用,需要从节点代替主节点继续负责原有的哈希操作。保证集群正常工作。

故障切换的过程中,会提示集群不可用,切换完成集群恢复继续工作。

redis-cli -h 192.168.233.7 --cluster create (所有ip地址) --cluster-replicas1

replicas 1:规定一个主只有一个从。

主从的配合是随机分配的。

在集群模式当中,只能选择0库,集群模式不能切换库,只能使用默认库。

Adding replica  192.168.233.15:6379 to 192.168.233.7;6379

Adding replica  192.168.233.16:6379 to 192.168.233.8;6379

Adding replica  192.168.233.17:6379 to 192.168.233.9;6379

(error)MOVED 4768.192.168.233.7:6379

表名客户端尝试读取键值对test1,但是实际槽位在4768,集群要求客户端移动到4768所在的主机节点,获取数据。

append-only yes 初始化库之后为空,否则会报错

集群流程:

1、集群自带主从和哨兵

2、每个主从节点之间相互隔离的,可以容忍数据的不完整。目的:高可用。

3、哈希槽位决定每个节点的读写操作,在创建key时,系统已经分配好了指定槽位。

4、MOVED不是报错,只是提醒客户端去分配的槽位节点,获取数据。

proxy.responses 1;在集群之中只要有一个节点响应,然后代理服务器就会把响应传递给客户端,可以增加整个系统的稳定性。

只要有一个节点可以响应,那么客户端就可以继续发起请求

四层转发:ip+端口

四层:全局配置

string四层

upstring七层(http)--->做反向代理

nginx可以提供多端口服务(80、6379...)

ELK日志分析系统:

ELK是一套完整的日志集中处理方案,由三个开源的软件简称组成

E:ElasticSearch:ES是一个开源的,分布式的存储检索引擎(索引型的非关系型数据库。)存储日志。(分片索引的形式存储)

Java代码开发的。基于Lucene结构开发的一套全文检索引擎。拥有一个web接口。用户可以通过浏览器的形式和ES组件进行通信。

作用:存储,允许全文搜索,结构化搜索(索引点),索引点可以支持大容量的日志数据。也可以搜索所有不同类型的文档。

K:kiabana图形化界面。可以更好的分析存储在ES上的日志数据。提供了一个图形化的界面,来浏览ES上的日志数据。汇总、分析、搜索。(方便用户检索)

L:Logstash:数据收集引擎(收集、处理),支持动态的(实时的)从各种服务应用收集日志资源,还可以对收集到的日志数据进行过滤、分析,丰富,统一格式等待操作。然后把数据同步到es存储引擎。(分析、过滤)

RUBY语言编写的,运行在Java虚拟机上的一个强大的数据处理工具。数据传输,格式化处理,格式化输出。主要用来处理日志。

数据处理工具:

filebeat:轻量级的开源的,日志数据工具。收集的速度较快,但是没有数据分析和过滤的能力,一般是结合logstash一块使用

Kafka

RabbitMQ:中间件消息队列

总结:ELK的作用,当我们管理一个大集群时,需要分析和定位的日志就会很多,每一台服务器分别去分析,将会耗时耗力。所以我们应运而生了一个集中的统一的日志管理和分析系统。极大地提高的定位问题的效率。

日志收集的特征:

1、收集,可以收集基本上市面上常用的软件日志。

2、传输,收集到的日志需要发送到ES上

3、存储:es负责存储数据

4、UI:图形化界面(Kiabana)

三台主机:

es1:20.0.0.100

es2:20.0.0.120

logstash+kiabana:20.0.0.121(4核8G)

三台组件,每台最少要2核4G

ELK的版本(6.7.2)6、7版本主流

修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
node.master: true        #是否master节点,false为否
node.data: true            #是否数据节点,false为否
--33--取消注释,指定数据存放路径
path.data: /var/lib/elasticsearch
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch
--43--取消注释,避免es使用swap交换分区
bootstrap.memory_lock: true
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200                    #指定es集群提供外部访问的接口
transport.tcp.port: 9300        #指定es集群内部通信接口
--68--取消注释,集群发现通过单播实现,指定要发现的节点
discovery.zen.ping.unicast.hosts: ["192.168.233.12:9300", "192.168.233.13:9300"]
 

vim elasticsearch.yml

bootstrap.memory_lock:true 禁止es使用交换分区

network.host :0.0.0.0 监听地址0.0.0.0代表所有地址

http.port:9200 对外提供访问的端口

transport.tcp.port:9300 ES内部通信的端口

path.data: /var/lib/elasticsearch 指定数据存放路径

path.data: /var/log/elasticsearch 指定日志存放路径

discovery.zen.ping.unicast.hosts: ["node1",  "node2"] 

集群发现通过单播实现,指定要发现的节点或者地址 ["192.168.233.12:9300"," "].

grep -v "^#" 检查一下

/var/log/ElasticSearch         如果有错,看日志

es的性能调优:(第一次搭建时需要优化的)

修改打开的最大内存大小和最大文件数(对机器)

vim /etc/security/limits.conf

* soft nofile 65536(软限制)

* hard nofile 65536(硬限制)

* soft nproc 32000 (内存使用量限制)

* hard nproc 32000

* soft memlock unlimited

* hard memlock unlimited

优化系统配置文件(对用户)

vim /etc/systemd/system.conf

DefaultLimitNOFILE=65536

一个用户会话的默认最大文件描述符的限制量。

文件描述符:用于标识打开文件或者I/O资源限制的整数。

DefautLimitNPROC=32000

一个用户可以打开的最大进程数量的限制32000.一个用户的终端可以运行多少个进程。

DefautLimitMEMLOCK=infinity

一个用户的终端默认锁定内存的限额,不限制

以上配置都需要重启主机才能生效

内核优化:

ES是基于lucene架构,实现一款索引型数据库。lucene可以利用操作系统的内存来缓存ES的索引数据。

提供更快的查询速度。在工作中我们会把系统的一半内存留给lucene。

机器内存小于64G,50%给es,50%给操作系统,供lucene使用。

机器内存大于64G,ES分配4~32G即可,其他的都给操作系统,供lucene。

vim /etc/sysctl.conf

vm.max_map_count=262144

一个进程可以拥有的最大内存映射区参数。

内存映射,将文件或者其他设备映射到进程地址空间的方法。允许进程直接读取或写入文件,无需常规的I/O方式。

映射空间越大,ES和lucene的速度越快。
2g/262144
4g/4194304
8g/8388608

http.cors.enabled: true                

开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"           

开启跨域访问之后允许访问的域名地址*:所有

9100是可视化工具的访问端口;9200的ES数据库的访问端口。

logstash的命令常用选项:

-f 指定配置文件,根据配置文件识别输入和输出流。

-e 测试,从命令行当中获取输入,然后经过logstash加工之后,形成一个标准输出

-t 检测配置文件是否正确,然后退出。

logstash -e 'input { stdin{} } output { stdout{} }'

所有的键盘命令行输出,转化成标准输出(rubydebug的模式),6.0之后,logstash的默认输出格式就是rubydebug格式的标准输出。

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.233.20:9200"] } }'

--path.data /opt/test1

区分不同的数据存放目录。

6.0之后的logstash自带的输出格式rubydebug,自动的把输出格式,定义为统一的标准格式输出。

rubydebug

在以前的版本需要手动配置

Nov 27 12:05:56 test1 logstash:2023-11-27T12:05:56.354[logstash.config.config.sourceloader] No configuration found in the configured sources.

没有找到适合的配置文件

elk:

es:存储数据,索引型的数据库

logstash:收集日志,然后按照标准化格式发送给ES(RUBYDEBUG的格式)。

K:可视化工具。更人性化的显示用户信息,方便用户检索查询

http的日志,写一个nginx的logstash的配置收集文件(要使用json的格式)

elfk:filebeat 日志收集工具 和logstash相同。

filebeat是一个轻量级的日志收集工具,所使用的系统资源比logstash部署和启动时使用的资源要小的多。

filebeat可以运行在非java环境,他可以代替logstash在非java环境上收集日志。

filebeat无法实现数据的过滤,一般是结合logstash的数据过滤功能一块使用。

filebeat收集的数据可以发往多个主机。也就是远程收集。

filebeat负责收集

logstash过滤,形成标准输出给es(logstash默认接收的端口5044)

nohup ./filebeat -e -c filebeat/yml > filebeat.out &

nohup 表示在后台记录执行命令的过程

./filebeat 运行文件

-e 使用标准输出的同时进行syslog文件输出

-c 指定配置文件

执行过程输出到filebeat.out这个文件当中,&后台运行。

logstash收集日志的过程:

input(从哪里收集)

filter(过滤)

output(发送es实例)

enabled:true

paths:

        

本地收集:

远程收集,远程收集多个日志。

logstash可以使用任意端口,只要没被占用都可以使用,推荐1024之后开始。

5044

5045

5046

logstash性能上的优化:logstash启动是在jvm虚拟机当中启动,启动一次至少要占500M内存。

pipeline.workers:2

logstash的工作线程,默认值就是CPU数,4核给2个 8 4 给一半即可 2核,2个。

pipeline.batch.size:125

一次性能够批量处理检索事件的大小,125条数。200

pipeline.batch.delay:50

查询更新的延迟。50毫秒,也可以自行调整。 15  10  也要看机器性能。

ELFK

logstash之外,filebeat

fluentd

EFK

代替logstash,实现EFK。fluentd(老一点的logstash,新型项目用fluentd)

zookeeper集群+kafka集群:

kafka在3.0版本之前依赖于zookeeper。

zookeeper是一个开源,分布式的架构。提供协调服务(Apache项目)

基于观察者模式涉及的分布式服务管理架构。

存储和管理数据。分布式节点上的服务接受观察者的注册。一旦分布式节点上的数据发生变化,由zookeeper负责通知分布式节点上的服务。

zookeeper:分为领导者 追随者   leader  follower组成的集群

                   特点:

                        只要有一半以上的集群存活,zookeeper集群就可以正常工作。

                    适用于安装奇数台的服务集群。全局数据一致,每个zookeeper的节点都保存相同的数据。维护监控服务的数据一致性。

                数据更新的原子性。要么都成功,要么都失败。

                实时性,只要有变化,立刻同步。

zookeeper的应用场景:

1、统一命名服务,在分布式的环境下,对所有的应用和服务进行统一命名。

2、统一配置管理,配置文件同步,kafka的配置文件被修改,可以快速同步到其他节点。

3、统一集群管理,实时掌握所有节点的状态。

4、服务器动态上下线、

5、实现负载均衡,把访问的服务器的数据,发送到访问最少的服务器处理客户端的请求。

领导者和追随者:zookeeper的选举机制

以3台服务器为例:A B C

A先启动,发起第一次选举,投票投给自己,3台,但是只有1票,不满足半数,A的状态的looking。

B启动,再发起一次选举,A和B分别投自己一票,交换选票信息,myid,A发现B的myid比A大,A的这一票会转而投给B。A  0  B  2 没有半数以上的结果,A B会进入looking。B有可能成为leader。

C启动,MYID  c的myid最大  A和B都会把票投给C   A   0   B   0   C    3

C的状态变为leader,A和B都变成follower。

D myid4

只要leader确定,后续加入的服务器都是追随者。

只有两种情况才会开启选举机制:

1、初始化的情况会发生选举

2、服务器之间的leader丢失了连接状态。

leader已经存在,建立连接即可

leader不存在,leader不存在。

1、服务器ID大的胜出。

2、EPOCH大,直接胜出。

3、EPOCH相同,事务ID大的胜出。

EPOCH 每个leader任期的代号,没有leader,大家的逻辑地位是相同的,每投完一次之后,数据是递增的。  2   3

事务id,标识服务器的每一次变更,每变更一次,事务ID变化一次。

服务器ID,zookeeper集群当中的机器都有一个ID,每台机器不重复,和myid保持一致。

zookeeper+kafka(2.7.0)

                   kafka(3.4.1)

zookeeper+kafka(2.7.0)实现过程:

192.168.233.10 zookeeper+kafka

192.168.233.20 zookeeper+kafka

192.168.233.30 zookeeper+kafka

2核/4G

配置文件

cd /usr/local/zookeeper-3.5.7/conf/
cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

tickTime=2000

服务器与客户端之间的心跳时间,2秒检测一次服务器和客户端之间的通信。

initLimit=10

领导者和追随者之间,初始连接时,能够容忍的超时时间 10*2s

syncLimit=5

同步超时时间,领导者和追随者之间,同步通信超时的时间,5*2s,leader会认为follower丢失,移出集群。

dataDir=/opt/zookeeper/data

dataLogDir=/opt/zookeeper/logs

保存数据的目录,需要单独创建

server.1=192.168.233.10:3188:3288

server.2=192.168.233.20:3188:3288

server.3=192.168.233.30:3188:3288

最后添加整个集群的信息

1.每个zookeeper的初始myid。

192.168.233.10:服务器的ip地址

3188:领导者和追随者之间交换信息的端口(内部通信的端口)

3288:一旦leader丢失响应,开启选举,3288就是用来执行选举时的服务器之间的通信端口。

消息队列:kafka

为什么要引入消息队列(MQ),他也是一个中间件。在高并发环境下,同步请求太多,来不及处理。来不及处理的请求会形成阻塞。

比方说数据库就会形成行锁或者表锁。请求线程满了,超标了,too many connection。会引发整个系统雪崩。消息队列的作用就体现出来了。

消息队列的作用:异步处理请求。流量削峰,应用解耦。

解耦:

耦合:在软件系统当中,修改其中一个组件需要修改所有其他组件。高度耦合。

低度耦合:修改其中一个组件,对其他组件影响不大,无需修改所有。

A   B   C

只要通信保证,其他的修改不影响整个集群,每个组件可以独立的扩展,修改,降低组件之间的依赖性。

依赖点就是接口约束,通过不同的端口,保证集群通信即可。

特点

可恢复性:系统当中有一部分组件消失,不影响整个系统。也就是说在消息队列当中,即使有一个处理消息的进程失败,一旦恢复,还可以重新加入到队列当中,继续处理消息。

缓存机制:可以控制和优化数据经过系统的时间和速度,解决生产消息和消费消息处理速度不一致的问题。

峰值的处理能力:消息队列在峰值的情况之下,能够顶住突发的访问压力。避免专门为了突发情况而对系统进行修改。

异步通信(kafka核心):允许用户把一个消息放入队列,但是不立即处理,等用户想处理的时候再处理。

消息队列的模式:

点对点 一对一:消息的生产者发送消息到队列中,消费者从队列当中提取信息,消费者提取完之后,队列中被提取的消息将会被移除。后续的消费者不能再消费队列当中的消息。消息队列可以有多个消费者,但是一个消息,只能由一个消费者提取。

如:RABBITMQ

发布/订阅模式:一对多,又叫做观察者模式,消费者提取数据之后,队列当中的消息不会被清除。

生产者发布一个消息到主题,所有的消费者都是通过主题来获取消息。

主题:topic topic类似一个数据流的管道,生产者把消息发布到主题。消费者从主题当中订阅数据。主题可以分区,每个分区都有自己的偏移量。

分区:partition 每个主题都可以分成多个分区。每个分区是数据的有序子集。分区可以运行kafka进行水平拓展,以处理大量的数据。

消息在分区中按照偏移量存储,消费者可以独立读取每个分区的数据。

偏移量:是每个消息在分区当中的唯一的标识。消费者可以通过偏移量来跟踪获取已读或者未读消息的位置。也可以通过提交偏移量,来记录已处理的信息。

消费方式:

第一种,begin从头开始,消费所有

第二种,实时获取,我只消费,后续产生的消息

第三种,指定偏移量,(指定从哪个位置开始消费),要通过代码实现。

生产者:producer 生产者把数据发送到kafka的主题当中,负责写入消息。

消费者:consumer 从主题当中读取数据,消费者可以是一个也可以是多个。每个消费者有一个唯一的消费组ID,kafka通过消费者实现负载均衡和容错性。

经纪人:Broker 每个kafka节点都有一个Borker,每个经纪人负责一台服务器,id唯一,存储主题分区当中的数据,处理生产和消费者的请求。

维护元数据(zookeeper) 3.0之前.

zookeeper:zookeeper负责保存元数据,元数据就是topic主题的相关信息,(发在哪台主机上,指定了多少分区,以及副本数,偏移量)。

zookeeper自建一个主题:_consumer_offsets。

3.0之后不依赖zookeeper的核心,元数据由kafka节点自己管理。

kafka的工作流程:

至少一次语义:只要消费者进入,确保消息至少被消费一次。

num.network.threads=3

处理网络请求的线程数量,默认即可

num.io.threads=8

处理磁盘的IO线程数量,一定要比硬盘数大。

socket.send.buffer.bytes=102400   

发送套接字的缓冲区大小。

socket.receive.buffer.bytes=102400

接受者接受套接字缓冲区的大小。

socket.request.max.bytes=104857600

请求套接字的缓冲区大小,单位字节

log.dirs=/var/log/kafka

指定收到的日志目录

num.partitions=1

在此kafka服务器上创建topic,默认分区数。如果指定了,这个配置无效。

num.recovery.threads.per.data.dir=1

用来恢复,回收,清理data下的数据的线程数量。kafka默认是不允许删除主题的。

 log.retention.hours=168

生产者发布的数据文件在主题当中保存的时间。168小时,默认是7天。

Kafka 命令行操作

一定要在/usr/local/kafka/bin路径上进行操作

kafka-topics.sh --create --zookeeper 20.0.0.120:2181,20.0.0.121:2181,20.0.0.122:2181 --replication-factor 2 --partitions 3 --topic test1

创建主题:(创建主题一定要有分区、有分区一定要有副本)

1、在kafka的bin目录下,是所有的kafka可执行命令文件

2、--zookeeper 指定的是zookeeper的地址和端口,保存kafka的元数据

3、--replication-factor 2 定义每个分区的副本数

4、partitions 3 指定主题的分区数

5、--topic test1 指定主题的名称。

查看当前服务器中的所有 topic
kafka-topics.sh --list --zookeeper 192.168.233.10:2181,192.168.233.20:2181,192.168.233.30:2181

查看某个 topic 的详情
[root@test1 efak]# kafka-topics.sh  --describe --zookeeper 192.168.233.10:2181,192.168.233.20:2181,192.168.233.30:2181
Topic: test3    PartitionCount: 3    ReplicationFactor: 2    Configs: 
    Topic: test3    Partition: 0    Leader: 3    Replicas: 3,1    Isr: 3,1
    Topic: test3    Partition: 1    Leader: 1    Replicas: 1,3    Isr: 1,3
    Topic: test3    Partition: 2    Leader: 3    Replicas: 3,1    Isr: 3,1

Partition:分区编号    

Leader:每个分区都有一个领导者(Leader),领导者负责处理分区的读写操作。
在上述输出中,领导者的编号分别为 3、1、3。

Replicas:每个分区可以有多个副本(Replicas),用于提供冗余和容错性。
在上述输出中,Replica 3、1、2 分别对应不同的 Kafka broker。

Isr:ISR(In-Sync Replicas)表示当前与领导者保持同步的副本。
ISR 3、1分别表示与领导者同步的副本。


先做地址映射:
vim /etc/hosts
20.0.0.120 test1
20.0.0.121 test2
20.0.0.122 test3

发布消息
kafka-console-producer.sh --broker-list 192.168.233.10:9092,192.168.233.20:9092,192.168.233.30:9092  --topic test1

消费消息

kafka-console-consumer.sh --bootstrap-server 192.168.233.10:9092,192.168.233.20:9092,192.168.233.30:9092 --topic test1 --from-beginning

-------------------------------------------------------------------------------------
--from-beginning:会把主题中以往所有的数据都读取出来
-------------------------------------------------------------------------------------

[root@test1 config]# kafka-topics.sh  --describe --zookeeper 192.168.233.10:2181,192.168.233.20:2181,192.168.233.30:2181
Topic: __consumer_offsets    PartitionCount: 50    ReplicationFactor: 1    Configs: compression.type=producer,cleanup.policy=compact,segment.bytes=104857600


Topic: test1    PartitionCount: 3    ReplicationFactor: 2    Configs: 
    Topic: test1    Partition: 0    Leader: 3    Replicas: 3,1    Isr: 3,1
    Topic: test1    Partition: 1    Leader: 1    Replicas: 1,2    Isr: 1,2
    Topic: test1    Partition: 2    Leader: 2    Replicas: 2,3    Isr: 2,3
Topic: test2    PartitionCount: 3    ReplicationFactor: 2    Configs: 
    Topic: test2    Partition: 0    Leader: 1    Replicas: 1,2    Isr: 1,2
    Topic: test2    Partition: 1    Leader: 2    Replicas: 2,3    Isr: 2,3
    Topic: test2    Partition: 2    Leader: 3    Replicas: 3,1    Isr: 3,1

__consumer_offsets 主题的作用是记录每个消费者组中每个消费者在每个分区上的偏移量。
这样,当消费者组中的消费者重新加入或者新的消费者加入时,它们可以从上次提交的偏移量处继续消费消息,
而不会重复消费或错过消息。

__consumer_offsets 主题的作用是记录每个消费者组中每个消费者在每个分区上的偏移量。
这样,当消费者组中的消费者重新加入或者新的消费者加入时,它们可以从上次提交的偏移量处继续消费消息,
而不会重复消费或错过消息。

请注意,对于这个主题,配置为 Replication Factor 为 1 可能会对高可用性造成一些影响。
在生产环境中,通常会将 __consumer_offsets 主题的 Replication Factor 设置得更高,
以确保偏移量信息的可靠性。

修改分区数
kafka-topics.sh --zookeeper 192.168.233.10:2181,192.168.233.20:2181,192.168.233.30:2181 --alter --topic test1 --partitions 6

删除 topic
kafka-topics.sh --delete --zookeeper 192.168.233.10:2181,192.168.233.20:2181,192.168.233.30:2181 --topic test1

你提到的 "Note: This will have no impact if delete.topic.enable is not set to true." 
是关于删除 Kafka 主题的一个重要提示。默认情况下,Kafka 集群禁用了主题删除操作,为了确保不会意外删除数据。

在 Kafka 中,要执行主题删除操作,需要确保 delete.topic.enable 配置项被设置为 true。
这个配置项决定了是否允许删除主题。如果没有设置或设置为 false,即使你执行了删除主题的命令,
实际上也不会删除主题,而只是标记主题为 "marked for deletion"。

1、zookeeper:主要是分布式,观察者模式,统一各个服务器节点的数据。

在kafka当中,收集保存kafka的元数据。

2、kafka消息队列  订阅/发布模式(点对点、一对一) 速度快

     RABBIT MQ 轻量级(实现rabbit MQ消息队列)

数据流向

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EasyMicrobiome-易扩增子、易宏基因组等分析流程依赖常用软件、脚本文件和数据库注释文件

啥也不说了,这个好用,给大家推荐:YongxinLiu/EasyMicrobiome (github.com) 大家先看看引用文献吧,很有用:https://doi.org/10.1002/imt2.83 还有这个,后面马上介绍:YongxinLiu/EasyAmplicon: E…

联想M7400W激光打印机加粉清零方法

基本参数 产品定位:多功能商用一体机 产品类型:黑白激光多功能一体机 涵盖功能:打印、复印、扫描 最大处理幅面:A4 耗材类型:鼓粉分离 耗材容量:硒鼓LD2451 12000页,墨粉LT2451 1500页、L…

11月30日作业

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数 #include <iostream>using namespace std;class …

MySQL实现(高可用方案-MHA安装及配置)

MySQL高可用性解决方案Master High Availability (MHA) 是一种在 MySQL 故障转移环境中实现快速故障转移和数据保护的开源软件。MHA 能在 MySQL 主节点发生故障时&#xff0c;自动将备节点提升为主节点&#xff0c;并且不会中断正在进行的 SQL 操作。 需求&#xff1a;主从配置…

React 签字手写签名组件 react-signature

安装依赖包 npm install uiw/react-signature示例代码 import React, { useRef } from "react"; import Signature from uiw/react-signature;export default function App() {const $svg useRef(null);const handle (evn) > $svg.current?.clear();return (…

LabVIEW开发自适应降噪ANC

LabVIEW开发自适应降噪ANC 在许多情况下&#xff0c;信号很嘈杂&#xff0c;必须消除噪声。自适应降噪&#xff08;ANC&#xff09;是可用于消除信号噪声的主要实时方法之一。可以使用LabVIEW自适应滤滤器工具包来设计ANC应用程序。本文介绍使用自适应筛选器工具包的ANC的一些…

Spire.Office 8.11.2 for NET fix Crack

内容摘自来自互联网------或者SDK官方本身手册 Spire.Doc for .NET A professional Word .NET library designed to create, read, write, convert and print Word document files in any .NET ( C#, VB.NET, ASP.NET, .NET Core, Xamarin ) application with fast and high qu…

【RabbitMQ】RabbitMQ快速入门 通俗易懂 初学者入门

目录 1.初识MQ 1.1.同步和异步通讯 1.1.1.同步通讯 1.1.2.异步通讯 1.2.技术对比&#xff1a; 2.快速入门 2.1.安装RabbitMQ 2.2.RabbitMQ消息模型 2.3.导入Demo工程 2.4.入门案例 2.4.1.publisher实现 2.4.2.consumer实现 2.5.总结 3.SpringAMQP 3.1.Basic Que…

websocket 消息包粗解

最近在搞websocket解析&#xff0c;记录一下: 原始字符串 &#xfffd;~&#xfffd;{"t":"d","d":{"b":{"p":"comds/comdssqmosm7k","d":{"comdss":{"cmdn":"success",…

(六)基于高尔夫优化算法GOA求解无人机三维路径规划研究(MATLAB代码)

一、无人机模型简介&#xff1a; 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献&#xff1a; [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…

ps 透明印章制作

ps 透明印章制作 1、打开不透明印章2、抠出红色印章3、新建图层4、填充红色印章到新图层5、导出透明印章 1、打开不透明印章 打开ps软件&#xff0c;菜单栏选择 文件-打开 选择本地不透明印章 打开 2、抠出红色印章 ps菜单栏 选择 选择-色彩范围 点击色彩范围 色彩范围窗口 取…

Unity Canvas、Canvas Scaler、Graphic Raycaster、EventSystem 组件详解

文章目录 0. 参考文章1. Canvas1.1 Screen Space-Overlay —— 屏幕空间覆盖模式1.2 Screen Space-Camera —— 相机模式1.3 World Space —— 世界模式 2. Canvas Scaler&#xff1a;控制UI画布的放大缩放的比例2.1 Constant Pixer Size —— 恒定像素2.2 Scale With Screen S…

CAN总线学习(STM32的CAN寄存器使用)(笔记二)

CAN总线基础基础知识的文章&#xff1a;CAN总线学习&#xff08;CAN总线基础知识&#xff09;&#xff08;笔记一&#xff09;-CSDN博客 在前面CAN总线基础知识和报文中介绍的是报文内容是比较全面的&#xff0c;STM32在CAN协议的基础上做了一些简单的简化&#xff0c;例如下图…

在线文库系统 转码功能源代码展示 支持文档在线预览查阅功能

1、支持 pdf,doc,docx,ppt,pptx,txt,xlsx,xls,csv,zip,epub,ai,psd 格式的文件 2、文库系统的上传界面&#xff0c;用户可以进行上传自己的文件&#xff0c;然后自定义文档售价&#xff0c;来赚取金额。 3、文库系统的部分代码披露&#xff1a; <template><div clas…

开发中遇到的问题 -- 回调解决应用端和服务端通信问题

前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 这里写目录标题 一. 问题概述二. 代码展示2.1 公共服务端2.2 应用端 一. 问题概述 项目介绍&#xff1a;今天做项目的时候遇到了点…

传教士与野人过河问题

代码模块参考文章&#xff1a;传教士与野人过河问题&#xff08;numpy、pandas&#xff09;_python过河问题_醉蕤的博客-CSDN博客 问题描述 一般的传教士和野人问题&#xff08;Missionaries and Cannibals&#xff09;&#xff1a;有N个传教士和C个野人来到河边准 备渡河。…

键入网址到网页显示,期间发生了什么?(计算机网络)

浏览器首先会对URL进行解析 下面以http://www.server.com/dir1/file1.html为例 当没有路径名时&#xff0c;就代表访问根目录下事先设置的默认文件&#xff0c;也就是 /index.html 或者 /default.html 对URL进行解析之后&#xff0c;浏览器确定了 Web 服务器和文件名&#x…

多多跨境跑出高质量发展“加速度”,解锁拼多多Q3财报背后的王牌

互联网红利渐趋消退&#xff0c;用户拉新难度加大&#xff0c;这些现象也在表明过去电子商务依靠资本、流量快速增长的发展模式已经成为过去式。由高速发展转为高质量发展&#xff0c;在今天每一个经济体与宏观经济发展态势一般&#xff0c;发展的“质量”价值正在被放大开来。…

一个软件测试练手项目——学生信息管理系统测试,卷起来啊

免费分享一个练手项目&#xff0c;学生信息管理系统&#xff0c;获取方式在文末 1.引言 1.1项目目的 软件测试是为了在软件投入生产性运行之前&#xff0c;尽可能多地发现软件的错误。该项目的目的是给学习软件测试的朋友练手用 1.2 项目背景 随着学校的规模不断扩大&…

学习程序员必知必会的基础算法(收藏)

近年来学习python的程序员愈来愈多&#xff0c;有的同学选择了python培训机构&#xff0c;也有的人觉得自己天赋好选择了自学不管大家怎么去学习&#xff0c;在学习python基础的过程中&#xff0c;肯定离不开的就是基础算法&#xff0c;今天就为大家介绍几大学习中的基础算法。…