学习笔记小结

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消息队列)

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

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

相关文章

实时沟通,实时增长:企业使用WhatsApp Business的不二选择

在数字化浪潮中,WhatsApp Business崭露头角,成为企业与客户之间沟通的新利器。今天运营坛将和大家深入探讨WhatsApp Business在2023年为企业带来的机遇,从增长率、客户群体、功能特性以及优势等方面剖析为何企业需要充分利用这一强大工具。 W…

VirtualBox上安装CentOS7

基础环境:宿主机是64位Windows10操作系统,通过无线网访问网络。 macOS可以以类似方式进行安装,不同之处见最后补充。 Step1 安装VirtualBox VirtualBox是一款免费、开源、高性能的虚拟机软件,可以跨平台运行,支持Wi…

突发,合肥一废品回收站发生火灾,富维AI神器助力防灾

昨晚,合肥一废品回收站突发火灾,火光冲天,烟雾蔓延。幸亏及时发现,消防人员迅速到场,控制了火势。这起事件让我们再次认识到火灾报警的重要性。而在这方面,北京富维图像公司的FIS智能图像识别系统就发挥了巨…

1+x中级网络运维实验题

任务 1: 设备命名 为了方便后期维护和故障定位及网络的规范性,需要对网络设备进行规范化命名。请根据 Figure 3-1 实验考试拓扑对设备进行命名。命名规则为:城市-设备的设置地点-设备的功能属性和序号-设备型号。例如:处于杭州校…

基于 Gin 的 HTTP 代理 Demo(2)

一周后勘误: 我这里实现的严格来说还是 HTTP 代理,只不过是通过隧道的方式传输非 HTTP 的流量,这里是 HTTPS 流量。尽管它可以传输 HTTPS 流量,它也不算是 HTTPS 代理。 上次写了 基于 Gin 的 HTTP 代理 Demo 之后,对…

ant design vue3 处理 ant-card-head ant-tabs靠左边对齐之has选择器不生效

火狐浏览器是不支持has的。 解决方法:通过position来解决。

解析编程中的技术迷题:常见挑战与应对策略

前言 在数字化时代的浪潮中,编程已经成为了一项至关重要的技能。无论是在软件开发、数据分析、人工智能还是互联网领域,编程都扮演着不可或缺的角色。作为一种创造性的活动,编程不仅仅是代码的书写,更是一种解决问题和创新的思维方…

软件测试的测试文档怎么编写?

在软件测试中的流程中,测试文档也是一个重要的流程,所以测试人员也需要学习测试文档的编写和阅读。 一定义: 测试文档(TestingDocumentation)记录和描述了整个测试流程,它是整个测试活动中非常重要的文件。…

【JavaEE初阶】 详解HTTPS协议加密过程

文章目录 🌴HTTPS协议是什么?🎄运营商劫持事件🎋HTTPS的工作过程🚩对称加密🚩非对称加密🚩引入证书🚩完整流程 🌳HTTPS加密总结⭕总结 🌴HTTPS协议是什么&…

基于Netty实现TCP通信

创建一个Maven项目添加下面依赖 <dependencies><!-- 日志依赖 --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><g…

帮亲戚个忙,闲来有事用php写个58商铺出租转让信息抓取

最近亲戚想做点小超市生意&#xff0c;但是又不懂互联网&#xff0c;信息获取有点闭塞。知道我身在互联网大潮中&#xff0c;想让我帮忙看看网上有没有商铺转让的。心想&#xff0c;这不是小菜一碟&#xff0c;大显身手的时候来了&#xff0c;大概去58瞅了瞅&#xff0c;这玩意…

【问题定位】阅读Nacos服务注册与发现的源码解决服务注册异常

问题现象 本地服务启动&#xff0c;发现调用FeignClient的服务&#xff0c;跑的是sit的服务&#xff0c;而本地是uat的环境配置。 问题跟踪 feign.SynchronousMethodHandler#invoke&#xff0c;调用远程服务。 public Object invoke(Object[] argv) throws Throwable {Reque…

信号类型(通信)——高斯最小频率键控(GMSK)

系列文章目录 《信号类型&#xff08;通信&#xff09;——仿真》 《信号类型&#xff08;通信&#xff09;——QAM调制信号》 《信号类型&#xff08;通信&#xff09;——QPSK、OQPSK、IJF_OQPSK调制信号》 《信号类型&#xff08;通信&#xff09;——最小频移键控&…

【秒懂JDK,JRE,JVM的关系】

&#x1f320;作者&#xff1a;TheMythWS. &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 ​ JDK与JRE与JVM的关系 先用一张图来直观感受JDK JRE JVM之间的关系&#xff1a; JDK与JRE的关系 先说JDK和JRE…

卷轴模式:金融领域的新趋势

卷轴模式在金融领域逐渐崭露头角&#xff0c;成为一种新型的投资策略。这种模式基于完成任务或达成特定目标来获取积分&#xff0c;利用这些积分进行投资或获取现实物品。它不同于传统的资金盘&#xff0c;而是以一种更稳健的方式运作&#xff0c;避免了资金盘的风险。 一、卷轴…

替代升级虚拟化 | ZStack Cloud云平台助力中节能镇江公司核心业务上云

数字经济正加速推动各行各业的高质量升级发展&#xff0c;云计算是数字经济的核心底层基础设施。作为云基础软件企业&#xff0c;云轴科技ZStack 坚持自主创新&#xff0c;自研架构&#xff0c;产品矩阵可全面覆盖数据中心云基础设施&#xff0c;针对虚拟化资源实现纳管、替代和…

springboot自定义校验注解的实现

自定义校验注解的实现 通过谷粒商城项目学习了自定义校验器的实现一、编写自定义校验注解二、自定义注解的校验器三、关联自定义的校验器和自定义的校验注解总结 通过谷粒商城项目学习了自定义校验器的实现 近日在学习雷神的谷粒商城项目&#xff0c;其中有一个自定义校验的实…

网络字节序

字节序的概念和示例 CPU向内存保存数据的方式有2种&#xff0c;所以CPU解析数据的方式也分为2种。CPU保存和解析数据的方式叫字节序&#xff0c;分为小端字节序和大端字节序。 大端字节序&#xff1a;高位字节存放到低位地址。 小端字节序&#xff1a;高位字节存放到高位地址。…

2023年第三届中国高校大数据挑战赛思路及代码

比赛时间&#xff1a;2023.12.28 08:00 至 2023.12.31 20:00 赛题方向介绍 1、大数据统计分析方向 涉及内容包含&#xff1a;数据的清洗、数据的预测、数据之间的关联分析、综合评价、分类与判别等 2、文本或图象分析方向 涉及内容包含&#xff1a;计算机视觉基础、特征匹配…

基于YOLOv8深度学习的火焰烟雾检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…