Docker+Consul+Registrator 实现服务注册与发现
第四阶段
时 间:2023年8月8日
参加人:全班人员
内 容:
Docker+Consul+Registrator
实现服务注册与发现
目录
一、服务注册中心引言
CAP理论是分布式架构中重要理论:
二、服务注册中心软件
(一)ZooKeeper
(二)Eureka
(三)Etcd
(四)Consul
常用的服务发现产品之间的比较:
三、Consul介绍
(一)Consul主要功能:
(二)Consul工作模式:
(三)架构设计
(四)架构优势
四、构建自动发现的 Docker 服务架构
(一)建立 Consul 服务
1、Consul集群部署
2、consul高可用
(二)安装consul
1、下载consul二进制包
3、查看集群信息
4、通过API获取集群信息
五、容器服务自动加入 Nginx 集群
1. 基于 Registrator 镜像部署容器
2. 测试服务发现功能是否正常
3. 验证Tomcat服务是否注册到了consul集群
4. 安装 consul-template
5. 准备 template nginx 模板文件
6. 编译安装 nginx
7. 配置 nginx
8. 配置并启动 consul-template
9. 访问 template-nginx 配置文件
10. 增加一个测试的容器节点
一、服务注册中心引言
服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。
更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。
微服务-将一个大型的单体架构拆分成多个小的服务组件。
CAP理论是分布式架构中重要理论:
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
二、服务注册中心软件
(一)ZooKeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
(二)Eureka
Eureka是基于REST(Representational State Transfer)服务,主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移。我们称此服务为Eureka服务。Eureka提供了Java客户端组件,Eureka Client,方便与服务端的交互。客户端内置了基于round-robin实现的简单负载均衡。在Netflix,为Eureka提供更为复杂的负载均衡方案进行封装,以实现高可用,它包括基于流量、资源利用率以及请求返回状态的加权负载均衡。
(三)Etcd
etcd 是一个分布式键值对存储系统,由coreos 开发,内部采用 raft 协议作为一致性算法,用于可靠、快速地保存关键数据,并提供访问。通过分布式锁、leader选举和写屏障(write barriers),来实现可靠的分布式协作。etcd集群是为高可用、持久化数据存储和检索而准备。
(四)Consul
Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置。 与其他分布式服务注册与发现的方案比如 Airbnb 的 SmartStack 等相比,Consul 的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等)。使用起来也较为简单。Consul 用 Golang 语言实现,因此具有天然可移植性(支持 Linux、windows 和 Mac OS X); 安装包仅包含一个可执行文件,方便部署,与 Docker 等轻量级容器可无缝配合。
常用的服务发现产品之间的比较:
三、Consul介绍
Consul是一个分布式,高可用且支持多数据中心的服务发现,配置和编排工具。 Consul支持大规模部署,配置和维护面向服务的体系结构。
(一)Consul主要功能:
1、服务发现
通过DNS或HTTP接口使得消费者发现服务,应用程序可以轻松找到所依赖的服务。
2、健康检查
防止将请求转发不健康的主机。
3、键值存储
可以使用分层键/值存储,比如功能标记、动态配置等。
4、多数据中心
开箱即用,不需要复杂的配置。这就意味这不用建立抽象的逻辑来扩展多个地区。
(二)Consul工作模式:
1、Consul agent是Consul核心组件,分为client和server两种工作模式。
默认以client模式运行,提供服务注册、健康检查、
转发查询给server leader。
server模式启动时使用-server选项指定,用于维护Consul集群状态、Raft协议进行选举。
2、agent必须在每个Consul节点运行,所有运行Consul agent节点构成Consul集群。
3、官方建议Consul集群至少3或5个节点运行Consul agent server模式,client节点不限。
4、通过join或rejoin选项加入集群。一旦加入,集群信息使用gossip算法同步到整个集群节点。
(三)架构设计
在现实工作中,我们一直渴望着追求提供高质量、高可用的服务架构体系,同时减少不必要的部署和维护代价,减少容错率。面对如此高的要求,可以有两种架构方案:
1、Docker+Etcd+Confd+Nginx
2、Docker+Consul+Nginx
使用 Docker 将 Consul、Consul Template、Registrator 和 Nginx 组装成一个值得信任且可扩展的服务框架,这套架构在这个框架中添加和移除服务,不需要重写任何配置,也不需要重启任何服务,一切都能正常运行。工作流程很简单:
(四)架构优势
Docker+Consul+Nginx虽然看起来是三个组件的运用,但却证明是一个有机的整体。它们互相联系、互相作用,完全满足我们对高可用、高效服务架构方案的需求,是Docker生态圈中最理想的组合之一,具有以下优势:
1、自动发现与注册组件consul使用 Raft 算法来保证一致性,比复杂的Paxos 算法更直接。相比较而言,zookeeper 采用的是 Paxos,而 etcd 使用的则是 Raft;
2、支持多数据中心,多数据中心集群可以避免单数据中心的单点故障,zookeeper 和 etcd 均不提供多数据中心功能的支持;
3、自动、实时发现及无感知服务刷新,具备资源弹性,伸缩自如;
4、支持健康检查,负载能动态在可用的服务实例上进行均衡,etcd 不提供此功能;
5、支持足够多台Docker容器(前提架构资源足以保证性能支撑);
6、支持http 和dns 协议接口,zookeeper 的集成较为复杂,etcd 只支持 http 协议;
7、服务规模方便进行快速调整,官方提供web管理界面,etcd 无此功能;
8、Consul template 搭配consul使用,支持多种接入层,如Nginx、Haproxy。
四、构建自动发现的 Docker 服务架构
(一)建立 Consul 服务
要想利用 Consul 提供的服务实现服务的注册与发现,我们需要建立 Consul 服务。在 Consul 方案中,每个提供服务的节点(Docker主机)上都要部署和运行 Consul 的 client,所有运行 Consul agent节点的集合构成 Consul Cluster。Consul agent 有两种运行模式:Server 和 Client。 这里的 Server 和 Client 只是 Consul 集群层面的区分,与搭建在 Cluster 之上的应用服务无关。以 Server 模式运行的 Consul agent 节点用于维护 Consul 集群的状态,官方建议每个 Consul Cluster 至少有 3 个或以上的运行在 Server mode 的 Agent,Client 节点不限。
1、Consul集群部署
如下图所示,左边三台Consul agent server 集群通过选举,选出一台Leader。来管理右边的client。获取集群状态信息。
Consul agent server -bootstrap自动选举本机为Leader。管理台client。获取集群信息。
2、consul高可用
3台允许坏1台;5台允许坏2台
主机名 | IP地址 | 软件 |
huyang1 | 192.168.100.121 | nginx consul consul-template |
huyang2 | 192.168.100.122 | docker-ce registrator |
huyang3 | 192.168.100.123 | docker-ce registrator |
(二)安装consul
1、下载consul二进制包
下载地址 Install | Consul | HashiCorp Developer
[root@huyangl ~]# unzip consul_0.9.2_linux_amd64.zip
[root@huyangl ~]# mv consul /usr/bin/
[root@huyangl ~]# nohup consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.100.131 -client=0.0.0.0 -node=consul-server01 &> /var/log/consul.log &
配置项说明:
agent:运行一个consul代理。
-server :切换代理到服务器模式。
-bootstrap:用来控制一个 server 是否在 bootstrap 模式,在一个 datacenter 中只能 有一个 server 处于 bootstrap 模式,当一个 server 处于 bootstrap 模式时,可以自己 选举为 raft leader。
-data-dir :参数指定数据存储目录
-bind -bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是 0.0.0.0。
-ui:参数指定开启 UI 界面,这样可以通过 http://localhost:8500/ui 这样的地址访问 consul 自带的 web UI 界面。
-client consul 绑定在哪个 client 地址上,这个地址提供 HTTP、DNS、RPC 等服务, 默认是 127.0.0.1。
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。
安装 consul 是用于服务注册,也就是容器本身的一些信息注册到 consul 里面,其他程 序可以通过 consul 获取注册的相关服务信息,这是就是所为的服务注册与发现。
3、查看集群信息
查看huyangl ~集群成员信息
[root@huyangl ~]# consul members
查看huyangl ~集群中的leader
[root@huyangl ~]# consul info | grep leader
查看huyangl ~集群中管理的服务
[root@huyangl ~]# consul catalog services
查看监听的端口:
启动consul后默认会监听5个端口:
8300: replication、leader farwarding的端口
8301: lan cossip的端口
8302: wan gossip的端口
8500: web ui界面的端口
8600: 使用dns协议查看节点信息的端口
可参考下图查看端口的意思:
4、通过API获取集群信息
[root@huyangl ~]# curl 127.0.0.1:8500/v1/status/peers //查看集群 server 成员
[root@huyangl ~]# curl
127.0.0.1:8500/v1/status/leader //集群 Raf leader
[root@huyangl ~]# curl
127.0.0.1:8500/v1/catalog/services
//注册的所有服务
[root@huyangl ~]# curl
127.0.0.1:8500/v1/catalog/nginx //查看 nginx 服务信息
[root@huyangl ~]# curl
127.0.0.1:8500/v1/catalog/nodes //集群节点详细信息
五、容器服务自动加入 Nginx 集群
1. 基于 Registrator 镜像部署容器
Registrator 服务会检查应用服务容器的运行状态,进行自动注册和注销 docker 容器服务到服务配置中心Consul上。目前支持与 Consul、etcd 和 SkyDNS2等软件进行整合。
在 192.168.100.132/192.168.100.133 节点操作
[root@huyang2 ~]# wget -O
/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@huyang2 ~]# yum -y install yum-utils device-mapper-persistent-data lvm2
[root@huyang2 ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@huyang2 ~]# ls /etc/yum.repos.d/
[root@localhost ~]# yum -y install docker-ce
[root@localhost ~]# systemctl start docker
[root@localhost ~]# systemctl enable docker
2)阿里云镜像加速器
阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
[root@huyang2 ~]# cat << END > /etc/docker/daemon.json
{"registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]}END
[root@huyang2 ~]# systemctl daemon-reload
[root@huyang2 ~]# systemctl restart docker
[root@huyang2 ~]# docker version
3)部署registrator容器服务
注意192.168.100.133主机需要注意IP地址
[root@huyang2 ~]# docker run -d --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest -ip=192.168.100.132 consul://192.168.100.131:8500
[root@huyang3 ~]# docker run -d --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock --restart=always gliderlabs/registrator:latest -ip=192.168.100.133 consul://192.168.100.131:8500
2. 测试服务发现功能是否正常
创建Tomcat测试页面,并部署tomcat测试容器
1)huyang2主机
[root@huyang2 ~]# mkdir /web
[root@huyang2 ~]# vim /web/index.jsp
配置如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head><title>docker consul test page</title></head><body><% out.println("Welcome to consul site,http://www.consul.com");%></body>
</html>
[root@huyang2 ~]# docker run -itd -p:8001:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang2-t1 -h huyang2-t1 tomcat
[root@huyang2 ~]# docker run -itd -p:8002:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang2-t2 -h huyang2-t2 tomcat
访问网页测试:192.168.100.132:8001
192.168.100.132:8002
2)huyang3主机
[root@huyang3 ~]# mkdir /web
[root@huyang3 ~]# vim /web/index.jsp
配置如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head><title>docker consul test page</title></head><body><% out.println("Welcome to consul site,http://www.consul.com");%></body>
</html>
[root@huyang3 ~]# docker run -itd -p:8001:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang3-t1 -h huyang3-t1 tomcat
[root@huyang3 ~]# docker run -itd -p:8002:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang3-t2 -h huyang3-t2 tomcat
访问网页测试:192.168.100.133:8001
192.168.100.133:8002
3. 验证Tomcat服务是否注册到了consul集群
浏览器输入 http://192.168.100.131:8500,点击”NODES“,再点击“consul-server01””, 会出现 5 个服务。
[root@huyang1 ~]#
curl 127.0.0.1:8500/v1/catalog/services
从以上结果中发现Tomcat服务已经注册到 consul 里面,说明服务正常
4. 安装 consul-template
Consul-Template 是基于 Consul 的自动替换配置文件的应用。在 Consul-Template 没出现之前,构建服务大多采用的是 Zookeeper、Etcd+Confd 这样类似的系统。
Consul-template 是一个守护进程,用于实时查询 consul 集群信息,并更新文件系统上的任意数量的指定模板,生成配置文件,更新完成以后可以选择运行 shell 命令执行更新操作,例如:重新加载 nginx。
Consul-Template 可以查询 Consul 中的服务目录、Key、Key-values 等。这种强大的抽象功能和查询语言模板可以使 Consul-Template 特别适合动态的创建配置文件。例如:创建 Apache/Nginx Proxy Balancers、Haproxy Backends、Varnish Servers、Application Configurations 等。
5. 准备 template nginx 模板文件
[root@huyang1 ~]# mkdir consul
[root@huyang1 ~]# cd consul/
[root@huyang1 consul]# vim /root/consul/nginx.tmp
6. 编译安装 nginx
[root@huyang1 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel openssl-devel
[root@huyang1 ~]# tar xf nginx-1.16.0.tar.gz
[root@huyang1 ~]# cd nginx-1.16.0/
[root@huyang1 nginx--1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_realip_module --with-pcre --with-http_ssl_module && make -j 2 && make install
7. 配置 nginx
[root@huyang1 ~]# vim
/usr/local/nginx/conf/nginx.conf
include vhost/*.conf; //在 http 段里面添加虚拟主机目录
[root@huyang1 ~]# mkdir /usr/local/nginx/conf/vhost/
[root@huyang1 ~]# /usr/local/nginx/sbin/nginx
8. 配置并启动 consul-template
手动上传 consul-template_0.19.3_linux_amd64.zip 包到/root 目录下
[root@huyang1 ~]#wget https://releases.hashicorp.com/consul-template/0.19.3/consul-template_0.19.3_linux_amd64.zip
[root@huyang1 ~]# unzip consul-template_0.19.3_linux_amd64.zip
[root@consul ~]# mv consul-template /usr/bin/
在前台启动 template 服务,需要指定 template 模板文件及生成路径即可,启动后不要按 ctrl+c 中止。
[root@huyang1 ~]# consul-template -consul-addr 192.168.100.131:8500 -template "/root/consul/nginx.tmp:/usr/local/nginx/conf/vhost/crushlinux.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
生成的配置文件如下。
[root@consul ~]# cat
/usr/local/nginx/conf/vhost/crushlinux.conf
[root@huyang1 ~]# netstat -lnpt | grep nginx
9. 访问 template-nginx 配置文件
通过浏览器访问nginx 监听的8080 端口
10. 增加一个测试的容器节点
1)增加一个tomcat容器节点,测试服务发现及配置更新功能。
[root@huyang2 ~]# docker run -itd -p:8003:8080 -v /web:/usr/local/tomcat/webapps/ROOT --name huyang2-t3 -h huyang2-t3 tomcat
2)观察consul-template服务,他会自动从模板更新/usr/local/nginx/conf/vhost/crushlinux.conf 文件内容,并且重载 nginx 服务。
3)查看/usr/local/nginx/conf/vhost/crushlinux.conf 文件内容
[root@huyang1 ~]# cat
/usr/local/nginx/conf/vhost/crushlinux.conf
相关文章:
![](https://img-blog.csdnimg.cn/072b4e2a1bb045d091c83d0e2b41baaa.png)
Docker+Consul+Registrator 实现服务注册与发现
第四阶段 时 间:2023年8月8日 参加人:全班人员 内 容: DockerConsulRegistrator 实现服务注册与发现 目录 一、服务注册中心引言 CAP理论是分布式架构中重要理论: 二、服务注册中心软件 (一)Zoo…...
![](https://img-blog.csdnimg.cn/e5bb0674cdb44ce79fe77d99e3632e33.png)
深入学习JVM —— GC垃圾回收机制
前言 前面荔枝已经梳理了有关JVM的体系结构和类加载机制,也详细地介绍了JVM在类加载时的双亲委派模型,而在这篇文章中荔枝将会比较详细地梳理有关JVM学习的另一大重点——GC垃圾回收机制的相关知识,重点了解的比如对象可达性的判断、四种回收…...
![](https://www.ngui.cc/images/no-images.jpg)
Centos7.6 + Apache Ranger 2.4.0编译(docker方式)
目录 一、Ranger简介 1、组件列表 2、支持的数据引擎服务 二、主机环境准备 1、关闭防火墙 2、关闭SELINUX 3、安装docker 4、下载Ranger源码包 5、下载Maven安装包 三、编译Ranger源码 1、修改官方包中的build_ranger_using_docker.sh 2、运行脚本编译 3、编译检…...
![](https://www.ngui.cc/images/no-images.jpg)
LVS-DR模式集群配置
四台虚拟机 node1:128 node2:135 RS端: node3:130 node4:132 [rootnode2 ~]# yum install -y ipvsadm #配置LVS虚拟IP,没有ifconfig命令则先安装 [rootnode2 ~]# yum install net-tools -y #配置VIP [root…...
![](https://www.ngui.cc/images/no-images.jpg)
【数据分析】pandas( 二)
目录 简介: 一,1.1来自Series字典或字典 1.2 来自ndarray或者列表的字典: 1.3来自结构化或记录数组; 1.4来自字典列表: 1.4来自元组的字典: 1.5 来自Series 二,代替构造函数: 2.1DataFram…...
![](https://img-blog.csdnimg.cn/8c128999df5f48f59cb456d204b265cb.png)
ffmpeg工具实用命令
说明:ffmpeg是一款非常好用的媒体操作工具,包含了许多对于视频、音频的操作,有些视频播放器里面实际上就是使用了ffmpeg。本文介绍ffmpeg的使用以及一些较为实用的命令。 安装 ffmpeg是命令行操作的,不需要安装,可在…...
![](https://www.ngui.cc/images/no-images.jpg)
zabbix API笔记
博客园原文 python简单demo 输出id为111主机的主机群组信息 import requests import json request_headers {"Content-Type": "application/json"} zabbix_url "http://xxx.xxx.xxx.xxx:8080/zabbix/api_jsonrpc.php" get_hostgroup_from_h…...
![](https://www.ngui.cc/images/no-images.jpg)
[HDLBits] Mt2015 q4a
Module A is supposed to implement the function z (x^y) & x. Implement this module. module top_module (input x, input y, output z);assign z(x^y)&x; endmodule...
![](https://img-blog.csdnimg.cn/img_convert/57f751ceb028878f24d2c127a50c3fc0.gif)
HarmonyOS NEXT,生命之树初长成
在不同的神话体系中,都有着关于生命之树的记载。 比如在北欧神话中,一株巨大的树木联结着九大世界,其被称为“尤克特拉希尔”Yggdrasill。在中国的《山海经》中,也有着“建木”的传说,它“有九欘,下有九枸&…...
![](https://img-blog.csdnimg.cn/d7a21c9ae548413d8a0382414b454cc6.png)
PHPstudy配置伪静态步骤,tp5.1的框架
搜索mod_rewrite.so,然后去掉前面的#(即放开注释) 2.找到index.php 同级文件.htaccess(没有就新建) 这些是tp5.1自带的内容,把它注释掉,是错误的内容,添加下面的这段配置 #<If…...
![](https://img-blog.csdnimg.cn/7e5eab50be534e21a920724e0061a0e7.png)
LeetCode:Hot100的python版本
94. 二叉树的中序遍历...
![](https://img-blog.csdnimg.cn/9ce1c52ad0b94a3db2998e014be2470f.png)
rv1126更新rknpu驱动教学
测试平台:易佰纳rv1126 38板 查看板端版本-------------------------------------------------- 1:查看npu驱动版本 dmesg | grep -i galcore,可以看到版本为6.4.3.5 2:查看rknn-server版本 strings /usr/bin/rknn_server | g…...
![](https://img-blog.csdnimg.cn/554e41c26f654a3c95a9bf05000715d5.png)
[机器学习]线性回归模型
线性回归 线性回归:根据数据,确定两种或两种以上变量间相互依赖的定量关系 函数表达式: y f ( x 1 , x 2 . . . x n ) y f(x_1,x_2...x_n) yf(x1,x2...xn) 回归根据变量数分为一元回归[ y f ( x ) yf(x) yf(x)]和多元回归[ y …...
![](https://img-blog.csdnimg.cn/bc25e6152e2f46c88d35936603877ca5.jpeg)
Vue基于php医院预约挂号系统_6nrhh
随着信息时代的来临,过去的管理方式缺点逐渐暴露,对过去的医院预约挂号管理方式的缺点进行分析,采取计算机方式构建医院预约挂号系统。本文通过阅读相关文献,研究国内外相关技术,开发并设计一款医院预约挂号系统的构建…...
![](https://www.ngui.cc/images/no-images.jpg)
2023-08-07力扣今日六题-不错题
链接: 剑指 Offer 04. 二维数组中的查找 题意: 一个二维矩阵数组,在行上非递减,列上也非递减 解: 虽然在行列上非递减,但是整体并不有序,第一行存在大于第二行的数字,第一列存在…...
![](https://www.ngui.cc/images/no-images.jpg)
Elasticsearch搜索出现NAN异常
原因分析 Elasticsearch默认的打分,一般是不会出现异常的之所以会出现NAN异常,往往是因为我们重新计算了打分,使用了function_score核心原因是在function_score中,出现了计算异常,比如 0/0,比如log1p(x),x为负数等 真…...
![](https://img-blog.csdnimg.cn/8f3e25debb3740dda03640577608eb05.png)
(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(6)
1001 Count 当k在区间(1n)/2的左边时,如图,[1,k]和[n-k1,n]完全相同,所以就m^(n-k) 当k在区间(1n)/2的右边时,如图,[1,n-k1]和[k,n]完全相同,所以也是m^(n-k) 别忘了特判,当k等于n时,n-k为0,然后a1a1,a2a2,..anan,所以没什么限制,那么就是m^n AC代码: #includ…...
![](https://www.ngui.cc/images/no-images.jpg)
【JavaScript 】浏览器事件处理
1. 什么是浏览器事件? 浏览器事件是指在网页中发生的各种交互和动作,例如用户点击按钮、页面加载完成、输入框文本变化等。通过处理这些事件,可以编写相应的JavaScript代码来实现特定的功能和行为。 2. 常见的浏览器事件 以下是一些常见的浏览器事件及其用途的详细介绍: c…...
![](https://img-blog.csdnimg.cn/4f7a7b8419714ee68b77e7a94038a583.png)
(力扣)用两个队列实现栈---C语言
分享一首歌曲吧,希望在枯燥的刷题生活中带给你希望和勇气,加油! 题目: 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty&#…...
![](https://img-blog.csdnimg.cn/img_convert/bb74e0c45e87c8b2cf44115cec8b322d.webp?x-oss-process=image/format,png)
使用 RediSearch 在 Redis 中进行全文检索
原文链接: 使用 RediSearch 在 Redis 中进行全文检索 Redis 大家肯定都不陌生了,作为一种快速、高性能的键值存储数据库,广泛应用于缓存、队列、会话存储等方面。 然而,Redis 在原生状态下并不支持全文检索功能,这使…...
![](https://img-blog.csdnimg.cn/5d5e7339cb5048b88a3adce727c9ab6d.png)
[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
1.今天开发了一套服务程序,使用的是Odbc连接MySql数据库, 在我本机用VS打开程序时,访问一切正常,当发布出来装在电脑上,连接数据库时提示: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定…...
![](https://img-blog.csdnimg.cn/9114a9a9192b464ab6f569a17a0e0060.png)
springboot生成表结构和表数据sql
需求 业务背景是需要某单机程序需要把正在进行的任务导出,然后另一台电脑上单机继续运行,我这里选择的方案是同步SQL形式,并保证ID随机,多个数据库不会重复。 实现 package com.nari.web.controller.demo.controller;import cn…...
![](https://img-blog.csdnimg.cn/img_convert/38550f29443b33c6599d8e6838c7225a.png)
代码随想录—力扣算法题:209长度最小的子数组.Java版(示例代码与导图详解)
版本说明 当前版本号[20230808]。 版本修改说明20230808初版 目录 文章目录 版本说明目录209.长度最小的子数组思路暴力解法滑动窗口 两种方法的区别总结 209.长度最小的子数组 力扣题目链接 更多内容可点击此处跳转到代码随想录,看原版文件 给定一个含有 n 个…...
![](https://www.ngui.cc/images/no-images.jpg)
81 | Python可视化篇 —— Seaborn数据可视化
Seaborn是Python中一个基于Matplotlib的高级数据可视化库,它提供了更简单的API和更美观的图形样式,适用于数据探索和展示。在本教程中,我们将介绍Seaborn的基本概念和用法,并通过一些示例演示如何使用Seaborn来创建各种图表和图形。 文章目录 1. 导入Seaborn库和数据2. 数据…...
![](https://img-blog.csdnimg.cn/3bffb5c90e0f45d5b9e0bc8f9578814b.png)
解决Error running XXXApplicationCommand line is too long.报错
测试IDEA版本:2019.2.4 ,2020.1.3 文章目录 一. 问题场景二. 报错原因2.1 为什么命令行过长会导致这种问题? 三. 解决方案3.1 方案一3.2 方案二 一. 问题场景 当我们从GitHub或公司自己搭建的git仓库上拉取项目代码时,会出现以下错误 报错代…...
![](https://img-blog.csdnimg.cn/e2abb68a405c4900890ce7ad27f92e61.gif)
【Linux】—— 进程等待 waitwaitpid
序言: 之前讲过,子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏。因此,为了解决这个问题,就需要用到有关 “进程等待” 的基本知识!!&am…...
![](https://www.ngui.cc/images/no-images.jpg)
el-tree 懒加载数据,增删改时局部刷新实现
1.数据过多时进行懒加载孩子节点,根据层级传参获取后端孩子数据 懒加载主要部分: 1参数: :load"loadNode" lazy :props"defaultProps" 2.defaultProps 需要设置isLeaf: isLeaf,去除最后一层孩子节点的展开图表 defaultProps: { ch…...
![](https://img-blog.csdnimg.cn/91dc6099b7ea4d00a30d747b3b68f4f4.png)
opencv基础44- Canny边缘检测详解-cv.Canny()
什么是Canny边缘检测? Canny边缘检测是一种经典的边缘检测算法,由John F. Canny在1986年提出。它被广泛应用于计算机视觉和图像处理领域,是一种多阶段的边缘检测算法,能够有效地检测图像中的边缘并抑制噪声。 Canny边缘检测的主要…...
![](https://www.ngui.cc/images/no-images.jpg)
neo4j查询语言Cypher详解(三)--函数
函数 Cypher中的函数如果输入参数为null,则返回null。 以字符串作为输入的函数都对Unicode字符进行操作,而不是对标准字符进行操作。例如,size()函数应用于任何Unicode字符将返回1,即使该字符不适合一个字符的16位。 可以通过 …...
![](https://img-blog.csdnimg.cn/a93db62b11714cc080269e30acf77ca2.jpeg#pic_center)
kafka权威指南(阅读摘录)
零复制 Kafka 使用零复制技术向客户端发送消息——也就是说,Kafka 直接把消息从文件(或者更确切地说是 Linux 文件系统缓存)里发送到网络通道,而不需要经过任何中间缓冲区。这是 Kafka 与其他大部分数据库系统不一样的地方&#…...
开发网站手机版/摘抄一则新闻
本系列文章一共13篇,本文为第3篇,请关注公众号,后续文章会陆续发布。系列文章列表:《手把手教你从零开始实现一个数据库系统》《世上最简单的SQL编译器和虚拟机》我们将从数据库的诸多限制开始,比如,这个数…...
![](/images/no-images.jpg)
国外移民公司网站设计/中国最大网站排名
远程Linux服务器,报Host key verification failed错误。问题:使用其他电脑登录远程Linux服务器,可以登录,但其中一台电脑登录时报该错误。原因:是因为登录服务器时主机会把它的服务器登录标识证书记录下来,…...
![](https://img-blog.csdnimg.cn/0dfb0012fc0343c29cee22e5b844f9d9.png)
网站建设资讯版块如何做用户运营/长沙优化科技
解决方法 pycharm配置环境变量: PYTHONUNBUFFERED1;SPARK_HOMEF:\spark-3.3.0-bin-hadoop3;PYSPARK_PYTHONpython 或者配置他们到windows环境变量,然后重启pycharm....
![](https://img-blog.csdnimg.cn/20190220100156953.png)
三合一网站怎么建立/网络营销方案策划论文
前言: 在云计算和容器化技术发展火热的当下,对于微服务架构,服务注册于发下组件时必不可少的。在传统的服务架构中,服务的规模处于运维人员可控范围内。当部署服务的多个节点时,一般使用静态配置信息设定。在微服务应…...
![](/images/no-images.jpg)
苏州全网网站建设/长春网站建设公司哪家好
前几天我叔公催我学车买车 今年我妈也跟我念叨了很多次,叫我去学车 说没有一台车说不过去,去见什么人也不方便。 我爸则说有房没有一台豪车都还不算成功,你怎么也得买一台宝马。 之前维哥也跟我说过一台豪车是我们一个重要的标签,…...
![](https://img-blog.csdnimg.cn/img_convert/f6e1681a7eef6fd21327a1161700fc19.png)
网站焦点图怎么做/如何做好网络推广销售
基于集成学习的用户流失预测并利用shap进行特征解释 小P:小H,如果我只想尽可能的提高准确率,有什么好的办法吗? 小H:优化数据、调参侠、集成学习都可以啊 小P:什么是集成学习啊,听起来就很厉害的…...