解析Eureka的架构

1. 引言

1.1 Eureka的定义与背景

Eureka是由Netflix开发的一个RESTful服务,用于服务发现。它是微服务架构中的一个核心组件,主要用于管理服务的注册和发现。Eureka允许服务提供者注册自己的服务信息,同时也允许服务消费者查询可用的服务,以便进行通信和数据交互。Eureka的设计目标是简化微服务之间的相互通信,提高系统的灵活性和可扩展性。

1.2 在微服务架构中的重要性

在微服务架构中,服务数量庞大且动态变化,服务实例可能随时上线或下线。Eureka通过提供服务注册和发现功能,使得微服务之间的调用变得更加简单和高效。具体来说,Eureka的重要性体现在以下几个方面:

  • 动态服务管理:Eureka支持服务的动态注册和注销,允许微服务在运行时自我管理,确保系统能够适应变化。
  • 负载均衡:通过Eureka,服务消费者可以获取多个服务实例的信息,从而实现负载均衡,提高系统的可用性和性能。
  • 容错处理:Eureka具备故障检测能力,能够在服务不可用时及时更新服务列表,保证服务调用的可靠性。
  • 简化配置:Eureka集成了许多配置管理功能,减少了开发和运维的复杂度,使得微服务的部署和维护更加便捷。

通过Eureka,微服务架构能够实现高可用、高扩展性的系统设计,为现代应用程序的开发提供了强有力的支持。

2. Eureka架构概述

Eureka是一个RESTful服务,用于中间层服务的注册与发现。它是Netflix开源的一个组件,广泛用于微服务架构中,帮助服务实例相互发现。

2.1 Eureka Server与Eureka Client的角色

Eureka Server:

  • 服务注册中心:Eureka Server充当服务注册中心,负责管理所有服务实例的注册信息。
  • 提供服务发现:Eureka Server能够提供服务实例的信息,供其他服务进行调用和访问。
  • 高可用性:Eureka Server可以部署多个实例,以实现负载均衡和高可用性。通过使用客户端负载均衡,Eureka能够保证在某个实例不可用时,服务仍然可以被发现。

Eureka Client:

  • 服务注册:每个微服务实例作为Eureka Client,启动时会向Eureka Server注册自身的信息(如服务名、实例ID、IP地址、端口等)。
  • 心跳机制:Eureka Client定期向Eureka Server发送心跳,以维持注册状态。如果某个客户端停止发送心跳,Eureka Server会在一定时间后将其标记为下线。
  • 服务发现:Eureka Client能够从Eureka Server获取其他服务实例的信息,从而实现服务调用。

2.2 服务注册与发现流程

服务注册流程:

  1. 服务启动:微服务实例启动时,会初始化Eureka Client。
  2. 发送注册请求:Eureka Client向Eureka Server发送注册请求,包含服务实例的信息。
  3. Eureka Server接收注册:Eureka Server接收注册请求,并将服务实例信息存储在其注册表中。
  4. 返回注册结果:Eureka Server返回注册成功的响应给Eureka Client,服务实例开始向Eureka Server定期发送心跳。

服务发现流程:

  1. 服务请求:当微服务需要调用其他服务时,首先会向Eureka Server请求服务列表。
  2. 获取服务实例:Eureka Server返回当前注册的服务实例列表。
  3. 负载均衡选择:Eureka Client根据负载均衡策略,从服务实例列表中选择一个实例进行调用。
  4. 服务调用:Eureka Client向选定的服务实例发送请求,完成服务调用。

3. Eureka的核心特性

3.1 自我保护机制

Eureka的自我保护机制可以有效防止由于网络抖动或临时性故障导致的服务实例不可用情况。当Eureka Server发现某个服务实例在一定时间内未能心跳(即未定期向Eureka Server发送状态更新),它并不会立即将该实例从注册列表中移除。相反,Eureka会启动自我保护模式,允许服务实例在短时间内保持“存活”状态,防止服务的意外下线。这种机制的主要目的是避免因短暂的网络问题而导致的服务大规模宕机,从而提高系统的稳定性。

3.2 客户端负载均衡

Eureka实现了客户端负载均衡的功能,使得客户端能够在请求服务时根据注册的服务实例动态选择一个合适的实例。Eureka与Spring Cloud Ribbon等负载均衡组件紧密集成,允许开发者通过配置来选择负载均衡策略(如轮询、随机等)。客户端在获取服务实例列表后,可以选择最适合的实例进行请求,从而提高系统的吞吐量和响应速度,优化资源的利用。

3.3 服务实例的健康检查

Eureka提供了服务实例的健康检查机制,以确保客户端请求的服务实例是可用的。每个注册的服务实例在向Eureka Server发送心跳的同时,也可以在心跳请求中包含健康状态信息。Eureka Server会根据这些信息来判断服务实例的健康状态,并在必要时将不可用的实例从服务列表中剔除。这样,客户端在进行负载均衡时就能避免将请求发送到不可用的服务实例,提高了整个系统的可靠性和可用性。

4. Eureka的使用场景

4.1 微服务架构中的应用示例

在微服务架构中,各个服务通常是独立运行的,但它们需要通过网络进行通信和协作。Eureka的服务注册与发现机制为这些服务提供了一个动态的、中心化的注册表,便于服务之间的相互发现和通信。以下是一些典型应用场景:

  • 动态服务发现:当一个服务实例上线时,它会自动注册到Eureka Server,其他需要调用此服务的服务实例可以通过Eureka Server获取其详细信息。这样,服务提供者和服务消费者都不需要硬编码服务地址,增强了系统的灵活性和动态扩展能力。
  • 弹性扩展:在系统负载增加时,可以部署更多的服务实例,它们会自动注册到Eureka Server,从而实现服务的无缝扩展。当负载下降时,多余的实例可以被下线并从Eureka Server中移除。
  • 故障转移:如果某个服务实例宕机,Eureka会在健康检查中发现,并将该实例从可用服务列表中剔除,使得服务消费者可以自动选择其他可用实例进行调用,保证了系统的高可用性。

4.2 与Spring Cloud的集成

Eureka在与Spring Cloud集成时,可以实现更加强大的功能和更便捷的配置。Spring Cloud Netflix是Spring Cloud生态系统中提供Eureka功能的模块。以下是Eureka与Spring Cloud集成的优势和示例:

  • 快速启动和配置:通过Spring Boot和Spring Cloud的自动配置功能,开发者可以快速配置Eureka Server和Eureka Client。只需在application.propertiesapplication.yml文件中添加必要的配置,即可启动Eureka。
  • 服务注册与发现的自动化:Spring Cloud Netflix Eureka使服务在启动时自动注册到Eureka Server。消费者可以通过简单的声明式注解或配置,从Eureka Server获取服务实例列表,实现服务发现。
  • Spring Cloud Ribbon负载均衡:Eureka与Spring Cloud Ribbon无缝集成,提供客户端负载均衡功能,使得请求可以根据负载策略选择服务实例。
  • Spring Cloud Feign支持:通过与Feign结合,开发者可以实现更简洁的服务调用,Feign会自动使用Eureka的服务发现功能来调用远程服务,使服务间调用代码更加简洁和可维护。

例如,一个简单的Eureka Server配置可以如下实现:

# application.yml for Eureka Server
server:port: 8761eureka:client:register-with-eureka: falsefetch-registry: falseserver:enable-self-preservation: true

一个Eureka Client的配置示例如下:

# application.yml for Eureka Client
eureka:client:service-url:defaultZone: http://localhost:8761/eureka/instance:prefer-ip-address: true

通过这些配置,开发者可以轻松搭建一个支持服务注册与发现的微服务架构。Spring Cloud与Eureka的结合为开发者提供了强大的功能,简化了微服务的管理和交互流程。

5. Eureka的配置

5.1 基本配置示例

在设置Eureka时,基本配置包括Eureka Server和Eureka Client的简单配置,以确保服务能够正常注册和发现。

Eureka Server的基本配置
application.yml中,Eureka Server的基础配置如下:

server:port: 8761  # Eureka Server运行的端口eureka:client:register-with-eureka: false  # 不向自身注册fetch-registry: false        # 不从注册中心获取注册表server:enable-self-preservation: true  # 开启自我保护机制

Eureka Client的基本配置
Eureka Client需要在application.ymlapplication.properties中进行配置,以便与Eureka Server通信。

eureka:client:service-url:defaultZone: http://localhost:8761/eureka/  # 指定Eureka Server的URLinstance:prefer-ip-address: true  # 使用IP地址进行服务注册

上述配置适用于将Eureka Server和Client部署在本地环境中的基本场景。

5.2 高级配置选项

为了应对复杂场景,Eureka提供了一些高级配置选项,以实现更高的灵活性和可用性。

高级配置选项示例

  1. 自定义实例ID
    配置服务实例的唯一ID,以便于在注册表中识别。

    eureka:instance:instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
    
  2. 心跳间隔和超时设置
    自定义Eureka Client发送心跳的频率和超时参数,以确保服务的状态更新及时。

    eureka:client:lease-renewal-interval-in-seconds: 10  # 心跳间隔(默认30秒)lease-expiration-duration-in-seconds: 90  # 超时期限(默认90秒)
    
  3. 服务过滤和注册管理
    配置只允许某些服务注册到Eureka Server。

    eureka:server:registry-sync-retries: 3  # 注册表同步重试次数eviction-interval-timer-in-ms: 60000  # 实例剔除间隔时间
    
  4. 自我保护机制设置
    可以启用或禁用自我保护机制,以防止网络故障时大规模服务下线。

    eureka:server:enable-self-preservation: false  # 禁用自我保护
    
  5. 配置多区域支持
    在跨数据中心或多区域部署时,可以配置Eureka以支持多区域注册表同步。

    eureka:client:availability-zones:default: us-east-1, us-west-2  # 多个可用区域service-url:us-east-1: http://eureka-east-1.example.com/eureka/us-west-2: http://eureka-west-2.example.com/eureka/
    

通过以上基本和高级配置示例,开发者可以根据不同的需求灵活调整Eureka的配置,以满足生产环境下的高可用性、稳定性和扩展性需求。

6. Eureka的监控与管理

6.1 Eureka Dashboard介绍

Eureka Dashboard是Eureka Server提供的一个可视化界面,用于监控和管理已注册的服务实例。通过该Dashboard,运维人员和开发者可以直观地查看服务注册中心的状态、注册的服务列表、每个服务的实例信息及其状态。

主要功能

  • 服务列表:显示所有已注册的服务,包括服务名、实例ID、IP地址、端口、状态等。
  • 实例详情:点击某个服务,可以查看其注册的实例详情,如实例的健康状态、最后一次心跳时间等。
  • 自我保护状态:Dashboard还会显示Eureka Server当前是否处于自我保护模式,并提示潜在的问题。
  • 状态检查:提供了Eureka Server自身的状态检查信息,如是否处于UP状态,以及一些统计数据。

如何访问

  • 默认情况下,Eureka Server的Dashboard可以通过http://<Eureka-Server-Host>:<port>访问。例如,如果Eureka Server运行在本地的8761端口上,访问地址为http://localhost:8761
  • 该界面不需要额外的配置,只需确保Eureka Server正确启动。

6.2 常见的监控指标

Eureka在运行中会暴露一系列监控指标,用于监控Eureka Server和Eureka Client的性能和健康状态。以下是一些常见和关键的监控指标:

  1. 注册实例数量

    • 已注册实例总数:显示当前在Eureka Server上注册的所有服务实例数量。
    • 可用实例数量:显示目前被认为健康、可用的实例数量。
  2. 心跳和续租

    • 心跳频率:监控Eureka Client发送到Eureka Server的心跳频率,以确保客户端的健康状态。
    • 续租失败次数:统计未能成功续租(心跳)请求的次数,用于识别客户端可能存在的连接或网络问题。
  3. 自我保护模式

    • 自我保护触发状态:监控Eureka Server是否已进入自我保护模式。如果心跳失败次数超过一定阈值,自我保护模式会被触发以防止大规模实例下线。
    • 心跳丢失阈值:用于监控是否达到触发自我保护的条件。
  4. 请求和响应延迟

    • 服务注册请求延迟:统计Eureka Client注册到Eureka Server的请求延迟。
    • 服务发现请求延迟:统计客户端请求服务实例列表的平均响应时间。
    • 实例取消注册延迟:监控服务实例取消注册时的延迟。
  5. 健康检查状态

    • 健康检查结果:显示所有实例的健康检查状态,用于确定哪些实例在心跳检测中被认为是不可用的。
    • 健康检查失败次数:记录检测到服务实例不健康的次数。

这些监控指标可以帮助开发者和运维人员快速定位和排查问题,确保Eureka的运行状况良好。借助这些数据,可以采取必要的措施来优化Eureka Server和客户端的配置,提升系统的可靠性和可用性。

7. Eureka的性能优化

7.1 调整心跳间隔

Eureka Client和Eureka Server通过心跳机制来维护服务实例的注册状态。心跳间隔的调整对于优化Eureka的性能和系统的整体稳定性至关重要。

心跳间隔的优化策略

  • 缩短心跳间隔:如果需要更加实时地反映服务的健康状态,可以缩短心跳间隔,使Eureka Client更频繁地发送心跳。这样Eureka Server能够更快地检测到服务的状态变化,但这会增加网络和Eureka Server的负载。
  • 延长心跳间隔:在稳定性和网络带宽要求较高的场景中,可以适当延长心跳间隔,减少Eureka Client和Eureka Server之间的通信频率,从而降低系统资源的消耗。

配置示例
在Eureka Client的application.ymlapplication.properties中调整心跳间隔:

eureka:client:lease-renewal-interval-in-seconds: 10  # 心跳间隔,单位为秒,默认是30秒lease-expiration-duration-in-seconds: 90  # 服务过期时间,默认是90秒

通过调整这些参数,可以在性能和服务可用性之间取得平衡。需要根据具体应用场景进行压力测试,以选择最合适的配置。

7.2 服务实例数量的管理

Eureka Server需要处理大量的服务注册和发现请求,因此优化服务实例的数量和分布可以显著提高Eureka的性能和稳定性。

优化策略

  • 服务实例分组:在大型系统中,将服务实例按功能或区域分组,并使用多个Eureka Server实例来分别管理这些组。这样可以减轻单个Eureka Server的负载,提高系统的扩展性和容错能力。
  • 合理配置实例数量:在高负载的系统中,应确保Eureka Server有足够的资源来处理所有服务实例的心跳和注册请求。可以通过垂直扩展(增加Eureka Server的资源)或水平扩展(增加Eureka Server的数量)来优化性能。
  • 实例剔除策略:确保Eureka Server能及时剔除不再活跃的服务实例,以防止注册表冗余和性能下降。定期检查服务实例的健康状态,并在必要时移除长时间未发送心跳的实例。

配置示例
在Eureka Server中,可以调整实例剔除的间隔时间和策略:

eureka:server:eviction-interval-timer-in-ms: 60000  # 实例剔除间隔,默认是60秒

负载均衡与缓存策略

  • 本地缓存:Eureka Client可以启用本地缓存,减少对Eureka Server的频繁访问,降低Eureka Server的负载。客户端会定期从缓存中获取服务实例列表,确保请求在短时间内不会多次访问Eureka Server。
  • 负载均衡器的使用:结合Ribbon或其他负载均衡器,均衡请求的流量,避免某些实例过载。

通过调整心跳间隔和管理服务实例数量,可以实现Eureka的高效运转,确保微服务架构在高并发场景下的稳定性和性能。

8. 常见问题与解决方案

8.1 服务无法注册的原因

  1. 网络问题:检查服务实例与Eureka Server之间的网络连接是否正常。
  2. 配置错误:确保服务实例的Eureka配置(如eureka.client.serviceUrl.defaultZone)正确指向Eureka Server的地址。
  3. 服务端未启动:确认Eureka Server是否正在运行,并监听正确的端口。
  4. 注册信息不完整:确保服务实例的元数据(如应用名、实例ID等)正确配置。
  5. 过期时间设置:检查Eureka的心跳配置,确保服务实例的注册信息未过期。

8.2 Eureka Server的高可用性配置

  1. 集群部署:在多台机器上部署多个Eureka Server实例,配置eureka.client.registerWithEurekaeureka.client.fetchRegistryfalse以避免自我注册。
  2. 负载均衡:使用负载均衡器(如Nginx或HAProxy)在客户端与Eureka Server之间实现请求分发,增强可用性。
  3. 数据复制:配置Eureka Server之间的复制,确保注册信息在所有实例中保持一致,通过eureka.client.serviceUrl.defaultZone指定其他Eureka Server的地址。
  4. 监控与报警:使用监控工具监控Eureka Server的状态,及时处理故障。

这些解决方案能够帮助快速定位和解决服务注册中的常见问题,并提高Eureka Server的可用性。

9. 总结

9.1 Eureka 的优缺点

优点:

  1. 简化服务注册与发现: Eureka 提供了简单易用的 API,使得微服务的注册和发现变得轻松,无需复杂的配置。
  2. 高可用性: Eureka 通过服务的自我注册和心跳机制,实现了高可用性。当某个实例下线时,其他实例能够快速知晓并进行处理。
  3. 与 Spring Cloud 的集成: Eureka 是 Spring Cloud 的核心组件之一,与 Spring Boot 的集成非常顺畅,适合微服务架构的开发。
  4. 灵活的负载均衡: Eureka 支持客户端负载均衡,能够根据注册信息动态调整流量分配。
  5. 可扩展性: 可以轻松添加和删除服务实例,适应服务规模的变化。

缺点:

  1. 单点故障问题: 默认的 Eureka Server 如果没有配置高可用集群,可能成为单点故障,影响服务的可用性。
  2. 性能瓶颈: 当服务实例数量增多时,Eureka 可能面临性能瓶颈,需要进行合理的资源分配和监控。
  3. 复杂的网络配置: 在多区域或多云环境中,Eureka 的网络配置可能较为复杂,需要额外的设置以确保服务之间的通信顺畅。
  4. 服务发现延迟: 在实例注册与更新过程中,可能存在一定的延迟,导致客户端获取的服务信息不是实时的。
  5. 与 Kubernetes 的兼容性: 在 Kubernetes 环境中,Eureka 的角色和使用场景可能会有所不同,可能需要结合其他工具来实现最佳效果。

9.2 未来的发展方向

  1. 提升高可用性: 加强 Eureka 的高可用性设计,支持更简单的集群配置和故障转移机制,确保在多节点环境下的稳定性。
  2. 性能优化: 对于大规模微服务架构,继续优化性能,减少服务发现和注册的延迟,提高处理效率。
  3. 与云原生架构的集成: 进一步与 Kubernetes、Service Mesh(如 Istio)等云原生架构整合,提升微服务的灵活性和可管理性。
  4. 多租户支持: 开发多租户功能,使得多个团队或项目可以在同一个 Eureka 实例上安全地运行,互不干扰。
  5. 智能路由与负载均衡: 集成智能路由和负载均衡功能,提升服务调用的效率和准确性,满足更复杂的业务需求。
  6. 监控与管理工具: 提供更友好的监控和管理界面,帮助开发和运维人员实时监控服务状态,快速定位和解决问题。

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

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

相关文章

《野狗子:裂头怪》角色升级注意事项分享

《野狗子&#xff1a;裂头怪》中的角色升级是游戏里非常重要的事情&#xff0c;不过升级需要注意的事情就是如果你找到一个自己喜欢的角色&#xff0c;我们强烈建议你查看他们的所有被动技能&#xff0c;并尽早解锁一些! 野狗子裂头怪角色升级需要注意什么 在《野狗子 Slitter…

大语言模型训练的全过程:预训练、微调、RLHF

一、 大语言模型的训练过程 预训练阶段&#xff1a;PT&#xff08;Pre training&#xff09;。使用公开数据经过预训练得到预训练模型&#xff0c;预训练模型具备语言的初步理解&#xff1b;训练周期比较长&#xff1b;微调阶段1&#xff1a;SFT&#xff08;指令微调/有监督微调…

MySQL中,GROUP BY 分组函数

文章目录 示例查询&#xff1a;按性别分组统计每组信息示例查询&#xff1a;按性别分组显示详细信息示例查询&#xff1a;按性别分组并计算平均年龄,如果你还想统计每个性别的平均年龄&#xff0c;可以结合AVG()函数&#xff1a;说明 示例查询&#xff1a;按性别分组统计每组信…

兰空图床配置域名访问

图床已经创建完毕并且可以访问了&#xff0c;但是使用IP地址多少还是差点意思&#xff0c;而且不方便记忆&#xff0c;而NAT模式又没法直接像普通服务器一样DNS解析完就可以访问。 尝试了很多办法&#xff0c;nginx配置了半天也没配好&#xff0c;索性直接重定向&#xff0c;反…

OpenCV视觉分析之目标跟踪(8)目标跟踪函数CamShift()使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 找到物体的中心、大小和方向。 CamShift&#xff08;Continuously Adaptive Mean Shift&#xff09;是 OpenCV 中的一种目标跟踪算法&#xff0…

论文1—《基于卷积神经网络的手术机器人控制系统设计》文献阅读分析报告

论文报告&#xff1a;基于卷积神经网络的手术机器人控制系统设计 摘要 本研究针对传统手术机器人控制系统精准度不足的问题&#xff0c;提出了一种基于卷积神经网络的手术机器人控制系统设计。研究设计了控制系统的总体结构&#xff0c;并选用PCI插槽上直接内插CAN适配卡作为上…

Windows11下将某个程序添加到鼠标右键快捷菜单

经常看log&#xff0c;最喜欢用的txt查看和编辑工具是EditPlus&#xff0c;好像是个韩国软件&#xff0c;最大的优势是打开大文件&#xff0c;好几G的log文件也很轻松&#xff0c;速度快&#xff0c;然后还有各种高亮设置查找文件等&#xff0c;非常方便。但是不知道为什么&…

aardio 5分钟多线程开发简单入门

废话不多说 直接开干&#xff01; 借用作者话说 虽然 aardio 的多线程开发非常简单&#xff0c;但是&#xff1a; 1、请先了解:「多线程」开发比「单线程」开发更复杂这个残酷的现实。 2、请先了解: aardio 这样的动态语言可以实现真多线程非常罕见。 建议先找任意的编程语言试…

一个基于Nodejs的快速、简洁且高效的静态博客框架

大家好&#xff0c;今天给大家分享一个基于Node.js的静态博客框架Hexo&#xff0c;它以其快速、简洁且强大的特点&#xff0c;成为搭建个人博客的优选工具。 项目介绍 Hexo 是一个快速、简洁且高效的博客框架。 Hexo 使用 Markdown&#xff08;或其他标记语言&#xff09;解析…

拍立淘API:当购物遇上“读图写话”

在这个看脸的时代&#xff0c;拍立淘API就像是那个总能猜中你心思的“读图写话”高手&#xff0c;你给它一张图&#xff0c;它就能给你一篇购物清单。这项技术就像是魔法&#xff0c;把图片里的商品变到你眼前。本文将带你一起走进这个魔法世界&#xff0c;看看拍立淘API是如何…

天云数据战略签约浪潮 成为浪潮智慧城市银河联盟2024优秀战略合作伙伴

3月29日,浪潮智慧城市银河联盟2024生态伙伴大会正式举办&#xff0c;来自全国各地的行业专家、技术大咖、生态伙伴齐聚一堂,共谋智慧城市新质生产力&#xff0c;助力构筑智慧便民的数字社会新图景。天云数据战略签约浪潮&#xff0c;成为浪潮智慧城市银河联盟2024生态伙伴。 济…

MySQL数据库面试题(下)

视图 为什么要使用视图&#xff1f;什么是视图&#xff1f; 为了提高复杂SQL语句的复用性和表操作的安全性&#xff0c;MySQL数据库管理系统提供了视图特性。所谓视图&#xff0c;本质上是一种虚拟表&#xff0c;在物理上是不存在的&#xff0c;其内容与真实的表相似&#xf…

【p2p、分布式,区块链笔记 Torrent】WebTorrent 的lt_donthave插件

扩展实现 https://github.com/webtorrent/lt_donthave/blob/master/index.js /*! lt_donthave. MIT License. WebTorrent LLC <https://webtorrent.io/opensource> */// 导入所需模块 import arrayRemove from unordered-array-remove // 用于从数组中删除元素的函数 i…

NVR小程序接入平台/设备EasyNVR多品牌NVR管理工具/设备汇聚公共资源场景方案全析

随着信息技术的飞速发展&#xff0c;视频监控已经成为现代社会安全管理和业务运营不可或缺的一部分。特别是在公共资源管理方面&#xff0c;视频监控的应用日益广泛&#xff0c;涵盖了智慧城市、智能交通、大型企业以及校园安防等多个领域。NVR小程序接入平台EasyNVR作为一款功…

C/C++使用AddressSanitizer检测内存错误

AddressSanitizer 是一种内存错误检测工具&#xff0c;编译时添加 -fsanitizeaddress 选项可以在运行时检测出非法内存访问&#xff0c;当发生段错误时&#xff0c;AddressSanitizer 会输出详细的错误报告&#xff0c;包括出错位置的代码行号和调用栈&#xff0c;有助于快速定位…

contenteditable实现需要一个像文本域一样的可编辑框

我这里是因为左上和右下有一个固定的模板&#xff0c;所有用textarea有点不方便&#xff0c;查了下还有一个方法可以解决就是在需要编辑的元素上加上 :contenteditable"true" 完整代码如下&#xff0c;因为这个弹窗是两用的&#xff0c;所以用messageType做了一下判…

QML项目实战:自定义Switch按钮

目录 一.添加模块 1.QtQuick.Controls 2.1 2.QtGraphicalEffects 1.12 二.自定义Switch 三.标签 四.效果 五.代码 一.添加模块 1.QtQuick.Controls 2.1 QtQuick.Controls 提供了一组预定义的 UI 控件&#xff0c;这些控件可以用于构建现代、响应式的用户界面。它包括按…

【数据集】【YOLO】【目标检测】电动车佩戴头盔检测数据集 5448 张,YOLO/VOC格式标注!

数据集介绍 【数据集】电动车头盔检测数据集 5448 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。数据集中包含3种分类&#xff0c;包含两轮电动车、戴头盔、不戴头盔。数据集来自国内外监控摄像头截图。检测范围电动车、摩托车、双轮非自行车。 一、数据概述 佩戴…

秃姐学AI系列之:GRU——门控循环单元 | LSTM——长短期记忆网络

RNN存在的问题 因为RNN模型的BPTT反向传导的链式求导&#xff0c;导致需要反复乘以一个也就是说会出现指数级别的问题&#xff1a; 梯度爆炸&#xff1a;如果的话&#xff0c;那么连乘的结果可能会快速增长&#xff0c;导致梯度爆炸梯度消失&#xff1a;如果的话&#xff0c;…

mysql if函数如何处理无匹配记录的情况?使用聚合函数

问题描述&#xff1a;编者在使用mysql中的if(car_number,"监管车辆","非监管车辆")函数时&#xff0c;场景为在一个car表中如果能查到具体某辆车这辆车就是我司监管车辆&#xff0c;差不到就不是我司监管车辆显示非监管车辆&#xff0c;遇到匹配不到的数据…