Eureka学习笔记-服务端
Eureka学习笔记
服务端
模块设计
Resources
:这部分对外暴露了一系列的 Restful 接口。Eureka Client 的注册、心跳、获取服务列表等操作都需要调用这些接口。另外,其他的 Server 在同步 Registry 时也需要调用这些接口。Controller
:这里提供了几个 web 接口,主要用在 Eureka Server 本身的 Dashboard 页面, 从页面上可以查看到当前注册了的服务,以及每个服务下各个实例的状态。PeerAwareInstanceRegistry
:这里面记录了当前所以注册了的服务实例。当这些注册信息发生变化时,`PeerAwareInstanceRegistry 还要负责把这些变化同步到其他的 Server。PeerEurekaNodes
:这里维护了集群里所有 Eureka Server 节点的信息,PeerAwareInstanceRegistry
在同步时需要从这里获取其他 Server 的信息。同时它还负责定时检查配置来发现是否有 Eureka Server 节点新增或删除。HttpReplicationClient
:这是PeerAwareInstanceRegistry
向其他 Server 同步时发送请求的 http client。
Resources
Eureka Service 的 Resource 是指处理 Eureka Server 提供的各类 RESTful API 的类,主要负责与客户端和其他 Eureka Server 节点交互。包含以下几个重要的重要组成
- ApplicationsResource:提供全量或增量注册表的获取接口,用于服务发现。
- ApplicationResource:管理特定应用的操作,如实例注册和删除。
- InstanceResource:处理单个实例的操作,如续约、状态更新和详细信息获取。
- PeerReplicationResource:处理 Eureka Server 节点之间的数据复制请求,保证注册表一致性。
- HealthCheckHandler:定义实例健康检查逻辑,决定实例的状态更新。
- EurekaServerResource:提供当前 Eureka Server 的状态和配置信息。
- ClustersResource:管理和查看 Eureka 集群的整体状态和节点信息。
- ServerCodecs:定义注册表数据的编码和解码规则,支持 JSON 和 XML 格式。
AbstractInstanceRegistry
register
其内部维护了一个如下的Map结构,key为应用标识,value同样是一个Map,后者的key为单个应用实例的标识,value为单个实例的详细信息(被Lease包装了实例的租期信息)
private final ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry= new ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>>();
InstanceInfo
维护了引用实例的详细信息,主要包含
- instanceId:实例的唯一标识符,用于区分不同的服务实例。
- appName:服务的逻辑名称,便于服务分组和发现。
- vipAddress:虚拟 IP 地址,用于逻辑路由和客户端服务发现。
- status:实例的当前运行状态(如
UP
、DOWN
)。 - lastDirtyTimestamp:实例信息最后一次被修改的时间戳,用于数据冲突判断。
- lastUpdatedTimestamp:实例信息在服务端最后更新的时间戳,用于跟踪本地状态。
- metadata:实例的元数据,存储额外的键值对信息供路由或分组使用。
- hostName:实例的主机名,用于标识和访问实例。
- ipAddr:实例的 IP 地址,用于实例的物理定位。
- leaseInfo:与服务租约相关的信息,如续约间隔和过期时间。
- isDirty:标识实例信息是否处于“脏”状态,用于触发更新。
- actionType:标记实例操作类型(添加、修改、删除)以便同步。
其中lastDirtyTimestamp和lastUpdatedTimestamp看起来很相似实际上二者并不相同
二者对比如下
属性 | 定义 | 用途 | 设置时机 |
---|---|---|---|
lastUpdatedTimestamp | 服务端记录实例信息最后更新时间 | 服务端内部维护,用于跟踪当前实例的更新情况 | 由 Eureka Server 自动设置 |
lastDirtyTimestamp | 客户端记录实例信息最后一次被修改时间戳 | 数据冲突判断与同步传播,表示数据的新旧状态 | 由 Eureka Client 或服务端同步时设置 |
Lease
public class Lease<T> {// 注册、下线、续期enum Action {Register, Cancel, Renew};// 默认驱逐时间public static final int DEFAULT_DURATION_IN_SECS = 90;// 持有的应用实例的引用private T holder;// 被驱逐时间private long evictionTimestamp;// 服务注册时间private long registrationTimestamp;// 服务完全可用时间private long serviceUpTimestamp;// 最后续租时间private volatile long lastUpdateTimestamp;
}
驱逐机制
我们可以看到每个实例都被Lease包装,其中就记录着实例的注册时间registrationTimestamp,以及最后续租时间lastUpdateTimestamp,当实例没有在驱逐超时时间内完成续租将会被驱逐,后者由定时任务EvictionTask来来完成
class EvictionTask extends TimerTask {private final AtomicLong lastExecutionNanosRef = new AtomicLong(0l);@Overridepublic void run() {try {long compensationTimeMs = getCompensationTimeMs();logger.info("Running the evict task with compensationTime {}ms", compensationTimeMs);evict(compensationTimeMs);} catch (Throwable e) {logger.error("Could not run the evict task", e);}}
}
PeerEurekaNodes
PeerEurekaNodes
是一个整体管理类,内部包含多个 PeerEurekaNode
实例,每个实例代表一个集群节点。
其中一个重要的功能便是定时同步集群的节点信息,这个任务由其start()法方法中的定时器完成
public void start() {...updatePeerEurekaNodes(resolvePeerUrls());...taskExecutor.scheduleWithFixedDelay(peersUpdateTask,serverConfig.getPeerEurekaNodesUpdateIntervalMs(),serverConfig.getPeerEurekaNodesUpdateIntervalMs(),TimeUnit.MILLISECONDS);...
}
一致性设计
Eureka 是一个AP系统,本身没有采用任何一种强一致性协议来保证系统整体的强一致性,根据CAP定理,一致性、可以用、分区可容忍性三者不可兼得,Eureka选择放弃强注一致性,来保证即使出现网络分区的情况下,只要客户端可连接上任意一个客户端就可以正常运行。
不同的注册中心产品在一致性的选择上各有千秋,常见的几款产品特性如下
- Eureka(AP系统)
-
牺牲一致性,没有使用严格的一致性协议。
-
最终一致性:Eureka并不要求所有副本在每个时刻都保持一致。在分区恢复时,Eureka会通过心跳和租约机制确保数据最终一致。
-
适用场景:当系统需要高可用性,并且可以容忍短时间的一致性问题时,Eureka非常合适。
- Consul(CP系统)
-
提供强一致性,并使用Raft协议来保证分布式系统的一致性。
-
强一致性:Consul会确保在发生故障或网络分区时,系统的一致性优先。它会牺牲系统的可用性,确保所有的节点看到一致的数据。
-
适用场景:当你需要确保服务注册中心中的数据在所有节点之间保持强一致性时,Consul是一个较好的选择。
- Zookeeper(CP系统)
-
提供强一致性,并使用ZAB协议(Zookeeper Atomic Broadcast)来保证一致性。
-
强一致性:Zookeeper通过分布式共识协议确保数据一致性,因此它在面对网络分区时会牺牲部分可用性。它适用于需要强一致性和协调的应用。
-
适用场景:在需要强一致性的分布式系统中(例如,分布式锁、配置管理等),Zookeeper是一个合适的选项。
- Nacos(AP/CP系统,灵活配置)
-
灵活的可选一致性策略:Nacos可以根据配置调整一致性级别,支持AP模式和CP模式。
-
最终一致性或强一致性:可以通过配置Raft协议来实现一致性保障。默认情况下,Nacos更多的是追求可用性和分区容忍性,但它也支持强一致性模式。
-
适用场景:Nacos适用于需要灵活选择一致性策略的场景,既支持最终一致性,也能在特定场景下实现强一致性。
- Etcd(CP系统)
- 提供强一致性,并使用Raft协议保证数据一致性。
- 强一致性:Etcd优先考虑一致性,在网络分区或节点故障时,它会保持一致性,并且牺牲部分可用性。
- 适用场景:当分布式系统对一致性要求非常高时,Etcd是非常合适的。它常用于服务发现、配置管理和分布式协调等场景。
同步数据设计
数据同步的关键技术要点
- REST API:Eureka集群通过HTTP REST API进行节点间的通信与数据同步。每个Eureka节点向其他节点推送自己更新的服务信息。
- PeerAwareReplication:该机制是Eureka集群的核心,负责将服务注册信息在节点之间进行复制。每个节点知道其他节点的存在,并能够主动或被动地同步服务数据。
- 心跳和租约机制:服务实例通过发送心跳请求来续约租约,确保服务实例不会因未能及时续约而被误删。租约过期的信息也会在节点间同步。
- 最终一致性:Eureka采用最终一致性模型,而不是强一致性。在网络分区或节点故障时,系统可以继续运行,但在恢复后,系统会进行数据同步,直到一致性最终达成。
主动同步
触发条件
Eureka节点会在服务注册、续约、注销等事件发生时主动将变化的信息推送到其他节点。
PeerAwareInstanceRegistryImpl#replicateToPeers()
private void replicateToPeers(Action action, String appName, String id,InstanceInfo info /* optional */,InstanceStatus newStatus /* optional */, boolean isReplication) {Stopwatch tracer = action.getTimer().start();try {// 是否是一个复制请求if (isReplication) {numberOfReplicationsLastMin.increment();}...for (final PeerEurekaNode node : peerEurekaNodes.getPeerEurekaNodes()) {// 是否来自自身,如何是则跳过if (peerEurekaNodes.isThisMyUrl(node.getServiceUrl())) {continue;}// 复制同步到对等节点replicateInstanceActionsToPeers(action, appName, id, info, newStatus, node);}} finally {tracer.stop();}
}
private void replicateInstanceActionsToPeers(Action action, String appName,String id, InstanceInfo info, InstanceStatus newStatus,PeerEurekaNode node) {...switch (action) {case Cancel:node.cancel(appName, id);break;case Heartbeat:InstanceStatus overriddenStatus = overriddenInstanceStatusMap.get(id);infoFromRegistry = getInstanceByAppAndId(appName, id, false);node.heartbeat(appName, id, infoFromRegistry, overriddenStatus, false);break;case Register:node.register(info);break;...
}
工作流程
被动同步
触发条件
被动同步机制通常在以下情况下触发:
- 节点启动时:Eureka节点启动后,需要与其他节点同步当前服务注册表。
- 节点恢复时:节点在网络分区、宕机等故障恢复后,为确保数据完整性,会从其他节点拉取最新数据。
工作流程
DiscoveryClient#getAndStoreFullRegistry()
private void getAndStoreFullRegistry() throws Throwable {long currentUpdateGeneration = fetchRegistryGeneration.get();logger.info("Getting all instance registry info from the eureka server");// 从其他Eureka Service 获取ApplicationsApplications apps = null;EurekaHttpResponse<Applications> httpResponse = clientConfig.getRegistryRefreshSingleVipAddress() == null? eurekaTransport.queryClient.getApplications(remoteRegionsRef.get()): eurekaTransport.queryClient.getVip(clientConfig.getRegistryRefreshSingleVipAddress(), remoteRegionsRef.get());if (httpResponse.getStatusCode() == Status.OK.getStatusCode()) {apps = httpResponse.getEntity();}...localRegionApps.set(this.filterAndShuffle(apps));
}
private Applications filterAndShuffle(Applications apps) {if (apps != null) {...if (isFetchingRemoteRegionRegistries()) {Map<String, Applications> remoteRegionVsApps = new ConcurrentHashMap<String, Applications>();apps.shuffleAndIndexInstances(remoteRegionVsApps, clientConfig, instanceRegionChecker);for (Applications applications : remoteRegionVsApps.values()) {applications.shuffleInstances(clientConfig.shouldFilterOnlyUpInstances());}}...}
}
我们可以看到之类有一个shuffle的操作,即对应用服务的实例做一个随机的打算主要是为了使得每个服务接收的流量更为均匀,同时也是避免新服务启动时出现雪崩现象。
相关文章:
Eureka学习笔记-服务端
Eureka学习笔记 服务端 模块设计 Resources :这部分对外暴露了一系列的 Restful 接口。Eureka Client 的注册、心跳、获取服务列表等操作都需要调用这些接口。另外,其他的 Server 在同步 Registry 时也需要调用这些接口。Controller :这里提…...
LangChain
文章目录 一、LangChain 是什么?二、核心概念1. LLM Wrappers2. Prompt Templates3. Indexes4. Chains5. Agents 三、工作流程四、应用场景示例一:简单的语言模型调用示例二:使用Prompt Templates(提示模板)示例三&…...
搭建分布式Hive集群
title: 搭建分布式Hive集群 date: 2024-11-29 23:39:00 categories: - 服务器 tags: - Hive - 大数据搭建分布式Hive集群 本次实验环境:Centos 7-2009、Hadoop-3.1.4、JDK 8、Zookeeper-3.6.3、Mysql-5.7.38、Hive-3.1.2 功能规划 方案一(本地运行模…...
Scala的惰性求值:深入理解与实践
在编程中,我们经常需要处理那些计算成本高昂或者可能永远不会用到的值。在这种情况下,惰性求值(Lazy Evaluation)是一种非常有用的策略。它允许我们推迟计算,直到这些值真正需要被使用。Scala,作为一种多功…...
游戏引擎学习第54天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们现在正专注于在游戏世界中放置小实体来代表所有的墙。这些实体围绕着世界的每个边缘。我们有活跃的实体,这些实体位于玩家的视野中,频繁更新,而那些离玩家较远的实体则以较低的频率运…...
QT绘制同心扇形
void ChartForm::paintEvent(QPaintEvent *) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置抗锯齿painter.save();// 设置无边框(不需要设置QPen,因为默认是不绘制边框的)QPen pen(Qt::NoPen);// QPen pen…...
梳理你的思路(从OOP到架构设计)_浅尝架构师的滋味02
目录 1、 App开发者的职责:买主提供需求知识,App开发者帮他写代码 撰写的代码 撰写代码,将装配(扩充)到 2、 从生活中体会 基於軟硬整合觀點“两种知识” 编辑 1、 App开发者的职责:买主提供需求知识,App开发者帮…...
使用VLC 搭建 RTSP 服务器
第一步:打开 VLC ,媒体--->流 第二步:添加一个选择本地的文件,然后点击选择"串流" 第三步:确认你选择的文件,然后点击下一个 第四步: 配置 选择的视频文件使用哪种 流输出…...
什么是大型语言模型
大型语言模型简介 大型语言模型 (LLM) 是一种深度学习算法,可以使用非常大的数据集识别、总结、翻译、预测和生成内容。 NVIDIA 开发者计划 想要了解有关 NIM 的更多信息?加入 NVIDIA 开发者计划,即可免费访问任何基础设施云、数据中心或个…...
游卡,科锐国际,蓝禾,汤臣倍健,顺丰,途游游戏25秋招内推
游卡,科锐国际,蓝禾,汤臣倍健,顺丰,途游游戏25秋招内推 ①科锐国际25届秋招补录 人力资源类岗位,补录城市:上海,苏州,锦州;全日制公办本科及以上 25届应届毕业…...
Linux -- 线程控制相关的函数
目录 pthread_create -- 创建线程 参数 返回值 代码 -- 不传 args: 编译时带 -lpthread 运行结果 为什么输出混杂? 如何证明两个线程属于同一个进程? 如何证明是两个执行流? 什么是LWP? 代码 -- 传 args&a…...
【Linux】Linux内核启动流程分析
Linux 内核的启动流程要比 uboot 复杂的多,涉及到的内容也更多,因此我们大致的了解一下Linux 内核的启动流程即可。 Linux启动流程 启动过程可以分为以下几个主要步骤: 1.引导加载程序(Bootloader)阶段 Linux 内核的…...
【uniapp蓝牙】基于native.js链接ble和非ble蓝牙
【uniapp蓝牙】基于native.js链接ble和非ble蓝牙 uniapp不是仅支持低功耗蓝牙(基础蓝牙通讯不支持),有些可能需要基础蓝牙。我现在同步我的手机蓝牙列表低功耗,基础蓝牙都支持 /*** author wzj* 通用蓝牙模块封装* 搜索 ble 和非…...
OpenGL ES 03 加载3张图片并做混合处理
OpenGL ES 02 加载3张图片并做混合处理 什么是纹理单元纹理单元的作用使用纹理单元的步骤详细解释加载图片并绑定到到GPU纹理单元采样器的设置1.设置采样器变量的纹理单元编号,目的是为了告诉纹理采样器,从哪个纹理单元采集数据2.如果你没有显式地设置采…...
c++数据结构算法复习基础--13--基数算法
基数排序 - 桶排序 时间复杂度 O(n*d) – d为数据的长度 每次比较一位(个位、十位。。。),所以取值范围就为0-9。 根据该特点,设计桶的概念 – 0号桶、1号桶… 1、思想 1)找出最长的数字,确定要处理的…...
基于YOLOv5的行人与帽子检测与识别说明文档
基于YOLOv5的行人与帽子检测与识别说明文档 1. 任务的内容和目标 1.1 任务目标 在计算机视觉领域,头盔检测至关重要,主要用于判定图像或视频里的人是否佩戴头盔。于工业生产、建筑工地、交通出行(如摩托车与自行车骑行)等高危场…...
Mybatis——(2)
2.2 Mybatis 工具类(了解) 为了简化MyBatis的开发,可将MyBatis进一步封装。 import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apa…...
QT笔记- QSystemTrayIcon系统托盘功能完整示例
1. 创建托盘对象 // 创建托盘图标QSystemTrayIcon * trayIcon new QSystemTrayIcon(this);QIcon icon("://icon/test.png");trayIcon->setIcon(icon);trayIcon->show();trayIcon->connect(trayIcon, &QSystemTrayIcon::activated,this, &MainWindo…...
ElasticSearch08-分析器详解
零、文章目录 ElasticSearch08-分析器详解 1、分析器原理 Elasticsearch的分词器(Analyzer)是全文搜索的核心组件,它负责将文本转换为一系列单词(term/token)的过程,也叫分词。 (1ÿ…...
指针的深入讲解
本章重点: 字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数 我们在指针的初阶的时候主要讲了: 1.指针就是变量,用来存放地址,地址唯一标识一块内存空间 2.指针的大小是固定4个…...
王佩丰24节Excel学习笔记——第十二讲:match + index
【以 Excel2010 系列学习,用 Office LTSC 专业增强版 2021 实践】 【本章小技巧】 vlookup与match,index 相结合使用match,index 结合,快速取得引用的值扩展功能,使用match/index函数,结合照相机工具获取照片 一、回顾…...
概率论得学习和整理28:用EXCEL画折线图,X轴数据也被当成曲线的解决办法
目录 1 折线图和散点图,对数据的处理差别 1.1 EXCEL画图的一些默认设置 1.2 多于2列的数据,也是如此 2 如果我们非要以第1列数据为X轴,做一个折线图呢?也能 2.1 首先,把第1列,想当成X轴的数据…...
387. 字符串中的第一个唯一字符
1,题目 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 2,代码 class Solution { public:int firstUniqChar(string s) {//记数排序int coutArr[26] {0};//统计字符出现…...
Oracle RAC最佳实践-优化私网连接
在 Oracle RAC 环境中,私网(Interconnect) 是节点之间通信和数据传输的关键部分。一直有个误解,认为私网(心跳网)只要能通随便什么交换机都可以,甚至有直连的,实际上私网的性能至关重要…...
[bug] StarRocks borker load意向之外的bug
意向之外,又清理之中 背景: StarRocks各方面碾压相同类型的数据库,最近我们要从生成HIVE导历史数据(ORC格式)到StarRocks,前期小测一下,在测试是没问题,上生产先导2个月的数据&…...
游戏AI实现-寻路算法(Dijkstra)
戴克斯特拉算法(英语:Dijkstras algorithm),又称迪杰斯特拉算法、Dijkstra算法,是由荷兰计算机科学家艾兹赫尔戴克斯特拉在1956年发现的算法。 算法过程: 1.首先设置开始节点的成本值为0,并将…...
9 OOM和JVM退出。OOM后JVM一定会退出吗?
首先我们把两个概念讲清楚 OOM是线程在申请堆内存,发现堆内存空间不足时候抛出的异常。 JVM退出的条件如下: java虚拟机在没有守护线程的时候会退出。守护线程是启动JVM的线程,服务于用户线程。 我们简单说下守护线程的功能: 1.日志的记录…...
Linux 端口操作
安装netstat yum -y install net-tools 检测端口占用 netstat -npl | grep "端口" 安装lsof lsof yum -y install lsof 检测端口占用 lsof -i :端口号 安装nc yum -y install nc 查看对方端口是否开放 nc -vz 对方ip 对方端口 安装telnet telnet yum -y in…...
【USB-HID】“自动化键盘“ - 模拟键盘输入
目录 【USB-HID】"自动化键盘" - 模拟键盘输入1. 前言2. 模拟键盘2.1 STM32CubeMX 配置2.2 修改代码配置2.3 发送按键信息 3. 接收主机Setup数据3.1 获取PC下发的数据 4. 总结 【USB-HID】“自动化键盘” - 模拟键盘输入 1. 前言 对于模拟键盘的实现,网…...
基于Spring Boot+Vue 的高校运动会管理系统
目录 1 绪论1.1研究背景1.2 研究意义1.3 相关开发技术简介1.3.1 Vue.js1.3.2 Spring Boot1.3.3 MySQL 2 系统分析2.1 需求分析2.1.1 功能需求2.1.2 非功能需求 2.2 系统可行性分析2.2.1 经济可行性2.2.2 技术可行性2.2.3 操作可行性 3 系统概要设计系统功能描述业务流程分析 4 …...
Linux应用程序中终止进程的几种方法
目录 1、正常退出进程的方法 1.1、exit(int status) 函数 1.2、_exit(int status) 函数 1.3、_Exit(int status) 函数 2、异常退出进程的方法 3、何时使用这些方法? 在 Linux 应用程序中,终止进程的方式有多种,通常取决于进程是否需要进…...
电脑文档损坏:原因剖析和修复方法
在使用电脑的过程中,许多用户可能会遇到文档突然提示损坏、无法打开的情况。这种情况的发生往往让人感到困惑,特别是当并未进行任何明显错误操作时。以下是一些常见的原因以及应对方法。 一、文档损坏的常见原因 1、非人为的异常操作: 在编…...
了解ARM的千兆以太网——RK3588
1. 简介 本文并不重点讲解调试内容,重点了解以太网在ARM设计中的框架以及在设备树以及驱动的一个整体框架。了解作为一个驱动开发人员当拿到一款未开发过的ARM板卡应该怎么去把网卡配置使用起来。 2. 基础知识介绍 在嵌入式ARM中实现以太网的解决方案通常有以下两种…...
【Nginx-4】Nginx负载均衡策略详解
在现代Web应用中,随着用户访问量的增加,单台服务器往往难以承受巨大的流量压力。为了解决这一问题,负载均衡技术应运而生。Nginx作为一款高性能的Web服务器和反向代理服务器,提供了多种负载均衡策略,能够有效地将请求分…...
低级计算机网络知识总结
1 应用层 1.1 HTTP(TCP) 浏览器访问WWW服务器过程:首先进行域名解析,然后通过TCP向服务器发送连接请求 HTTP本身是无连接,无状态的。无状态特性使服务器能够支持大量的并发HTTP请求。实际应用中,通常使用Cookie加数据库跟踪用户…...
linux sysrq的使用举例
在menuconfig中选择m和 *的区别: *: 模块驱动编译到内核中,启动时自动加载 M:标识作为内核模块编译 空格:表示该功能不编译到内核中,即新的内核将不支持该功能。 m:模块会被编译,但是不会被编译到内核中,只…...
数字IC后端设计实现篇之TSMC 12nm TCD cell(Dummy TCD Cell)应该怎么加?
TSMC 12nm A72项目我们需要按照foundary的要求提前在floorplan阶段加好TCD Cell。这个cell是用来做工艺校准的。这个dummy TCD Cell也可以等后续Calibre 插dummy自动插。但咱们项目要求提前在floorplan阶段就先预先规划好位置。 TSCM12nm 1P9M的metal stack结构图如下图所示。…...
Oracle 适配 OpenGauss 数据库差异语法汇总
背景 国产化进程中,需要将某项目的数据库从 Oracle 转为 OpenGauss ,项目初期也是规划了适配不同数据库的,MyBatis 配置加载路径设计的是根据数据库类型加载指定文件夹的 xml 文件。 后面由于固定了数据库类型为 Oracle 后,只写…...
【记录】Django解决与VUE跨域问题
1 梗概 这里记录Django与VUE的跨域问题解决方法,主要修改内容是在 Django 中。当然其他的前端项目 Django 也可以这样处理。 2 安装辅助包 pip install django-cors-headers3 配置 settings.py INSTALLED_APPS [ # ... corsheaders, # ... ] 为了响应…...
Yolov10本地部署,torch找不到GPU问题解决
在本地部署跑Yolov10的模型.具体分为以下几步,也是踩了一些坑: 1.YoloV10 代码拉取 2.安装CUDA 1.查看CUDA支持版本 2.下载安装CUDA 3.下载CUDNN 3.创建python虚拟环境 Anaconda下载安装 虚拟环境安装配置 4.运行 1.yoloV10代码拉取 源码地址: GitHub - THU-MIG/yolov10: YOLO…...
el-upload 上传文件 入参格式为form-data格式,入参字段为code、name、type、file(文件)的形式,如何实现?
el-upload 是 Element UI 中用于文件上传的组件。如果你需要上传文件并将其封装为 form-data 格式,并且包含字段如 code、name、type 和 file,你可以通过自定义 before-upload 或 action 进行处理。 1. el-upload 的基本用法 Element UI 的 el-upload …...
VUE组件插槽使用示例,弹窗样式
在Vue.js中,插槽(slots)是一种非常强大的功能,它允许你在父组件中向子组件传递内容。插槽主要有三种类型:默认插槽、具名插槽和作用域插槽。下面是一些示例来展示如何使用这些插槽。 默认插槽 默认插槽是最简单的插槽…...
ARM嵌入式学习--第八天(PWM)
PWM -PWM介绍 PWM(pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量,通信,工控等方面 PWM的频率 是指在1秒钟内,信号从…...
新能源汽车大屏可视化第三次数据存储
任务: 将数据存放到temp.csv 链接: 1.排行页面 https://www.dongchedi.com/sales 2.参数页面 https://www.dongchedi.com/auto/params-carIds-x-9824 完善打印: 1. [{‘series_id’: 5952, ‘series_name’: ‘海鸥’, ‘image’: ‘https://…...
linux 替换yum源镜像
1. 备份源镜像 sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak 2. 下载国内镜像阿里云 如果没有wget可以用curl 代替 sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 清华大学 sudo wget -…...
SAP:如何修改已释放的请求
SAP:如何修改已释放的请求 QQ出了一个新功能,把10年前的旧日志推给自己。这个10年前的日志,是用户反映在SE10中把请求释放后发现漏了内容,想修改已释放的请求。经调查写了一个小程序,实现用户的需求。 *&-------------------…...
js的?. 和??和||有什么区别
let a 0; let b null; let c Hello;console.log(a ?? default); // 0 console.log(b ?? default); // "default" console.log(c ?? default); // "Hello"console.log(a || default); // "default" (因为 0 是假值) console.log(b |…...
clickhouse 分布式表创建、增加、更新、删除、查询
创建分布式表 --先创建本地表 设置自动过期时间3天 CREATE TABLE IF NOT EXISTS ck_database.ck_databaseon cluster default(cluster name) (table_id String COMMENT id,item_id String COMMENT 业务id,desc Int64 COMMENT 描述,time DateTime DEFAULT now() COMMENT 数据…...
推送本地仓库到远程git仓库
目录 推送本地仓库到远程git仓库1.1修改本地仓库用户名1.2 push 命令1.3远程分支查看 推送本地仓库到远程git仓库 删除之前的仓库中的所有内容,从新建库,同时创建一个 A.txt 文件 清空原有的远程仓库内容,重新创建一个新的仓库,…...
LSTM长短期记忆网络
LSTM(长短期记忆网络)数学原理 LSTM(Long Short-Term Memory)是一种特殊的递归神经网络(RNN),解决了标准RNN中存在的梯度消失(Vanishing Gradient) 和**梯度爆炸&#x…...