解析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 服务注册与发现流程
服务注册流程:
- 服务启动:微服务实例启动时,会初始化Eureka Client。
- 发送注册请求:Eureka Client向Eureka Server发送注册请求,包含服务实例的信息。
- Eureka Server接收注册:Eureka Server接收注册请求,并将服务实例信息存储在其注册表中。
- 返回注册结果:Eureka Server返回注册成功的响应给Eureka Client,服务实例开始向Eureka Server定期发送心跳。
服务发现流程:
- 服务请求:当微服务需要调用其他服务时,首先会向Eureka Server请求服务列表。
- 获取服务实例:Eureka Server返回当前注册的服务实例列表。
- 负载均衡选择:Eureka Client根据负载均衡策略,从服务实例列表中选择一个实例进行调用。
- 服务调用: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.properties
或application.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.yml
或application.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提供了一些高级配置选项,以实现更高的灵活性和可用性。
高级配置选项示例:
-
自定义实例ID:
配置服务实例的唯一ID,以便于在注册表中识别。eureka:instance:instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
-
心跳间隔和超时设置:
自定义Eureka Client发送心跳的频率和超时参数,以确保服务的状态更新及时。eureka:client:lease-renewal-interval-in-seconds: 10 # 心跳间隔(默认30秒)lease-expiration-duration-in-seconds: 90 # 超时期限(默认90秒)
-
服务过滤和注册管理:
配置只允许某些服务注册到Eureka Server。eureka:server:registry-sync-retries: 3 # 注册表同步重试次数eviction-interval-timer-in-ms: 60000 # 实例剔除间隔时间
-
自我保护机制设置:
可以启用或禁用自我保护机制,以防止网络故障时大规模服务下线。eureka:server:enable-self-preservation: false # 禁用自我保护
-
配置多区域支持:
在跨数据中心或多区域部署时,可以配置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的性能和健康状态。以下是一些常见和关键的监控指标:
-
注册实例数量:
- 已注册实例总数:显示当前在Eureka Server上注册的所有服务实例数量。
- 可用实例数量:显示目前被认为健康、可用的实例数量。
-
心跳和续租:
- 心跳频率:监控Eureka Client发送到Eureka Server的心跳频率,以确保客户端的健康状态。
- 续租失败次数:统计未能成功续租(心跳)请求的次数,用于识别客户端可能存在的连接或网络问题。
-
自我保护模式:
- 自我保护触发状态:监控Eureka Server是否已进入自我保护模式。如果心跳失败次数超过一定阈值,自我保护模式会被触发以防止大规模实例下线。
- 心跳丢失阈值:用于监控是否达到触发自我保护的条件。
-
请求和响应延迟:
- 服务注册请求延迟:统计Eureka Client注册到Eureka Server的请求延迟。
- 服务发现请求延迟:统计客户端请求服务实例列表的平均响应时间。
- 实例取消注册延迟:监控服务实例取消注册时的延迟。
-
健康检查状态:
- 健康检查结果:显示所有实例的健康检查状态,用于确定哪些实例在心跳检测中被认为是不可用的。
- 健康检查失败次数:记录检测到服务实例不健康的次数。
这些监控指标可以帮助开发者和运维人员快速定位和排查问题,确保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.yml
或application.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 服务无法注册的原因
- 网络问题:检查服务实例与Eureka Server之间的网络连接是否正常。
- 配置错误:确保服务实例的Eureka配置(如
eureka.client.serviceUrl.defaultZone
)正确指向Eureka Server的地址。 - 服务端未启动:确认Eureka Server是否正在运行,并监听正确的端口。
- 注册信息不完整:确保服务实例的元数据(如应用名、实例ID等)正确配置。
- 过期时间设置:检查Eureka的心跳配置,确保服务实例的注册信息未过期。
8.2 Eureka Server的高可用性配置
- 集群部署:在多台机器上部署多个Eureka Server实例,配置
eureka.client.registerWithEureka
和eureka.client.fetchRegistry
为false
以避免自我注册。 - 负载均衡:使用负载均衡器(如Nginx或HAProxy)在客户端与Eureka Server之间实现请求分发,增强可用性。
- 数据复制:配置Eureka Server之间的复制,确保注册信息在所有实例中保持一致,通过
eureka.client.serviceUrl.defaultZone
指定其他Eureka Server的地址。 - 监控与报警:使用监控工具监控Eureka Server的状态,及时处理故障。
这些解决方案能够帮助快速定位和解决服务注册中的常见问题,并提高Eureka Server的可用性。
9. 总结
9.1 Eureka 的优缺点
优点:
- 简化服务注册与发现: Eureka 提供了简单易用的 API,使得微服务的注册和发现变得轻松,无需复杂的配置。
- 高可用性: Eureka 通过服务的自我注册和心跳机制,实现了高可用性。当某个实例下线时,其他实例能够快速知晓并进行处理。
- 与 Spring Cloud 的集成: Eureka 是 Spring Cloud 的核心组件之一,与 Spring Boot 的集成非常顺畅,适合微服务架构的开发。
- 灵活的负载均衡: Eureka 支持客户端负载均衡,能够根据注册信息动态调整流量分配。
- 可扩展性: 可以轻松添加和删除服务实例,适应服务规模的变化。
缺点:
- 单点故障问题: 默认的 Eureka Server 如果没有配置高可用集群,可能成为单点故障,影响服务的可用性。
- 性能瓶颈: 当服务实例数量增多时,Eureka 可能面临性能瓶颈,需要进行合理的资源分配和监控。
- 复杂的网络配置: 在多区域或多云环境中,Eureka 的网络配置可能较为复杂,需要额外的设置以确保服务之间的通信顺畅。
- 服务发现延迟: 在实例注册与更新过程中,可能存在一定的延迟,导致客户端获取的服务信息不是实时的。
- 与 Kubernetes 的兼容性: 在 Kubernetes 环境中,Eureka 的角色和使用场景可能会有所不同,可能需要结合其他工具来实现最佳效果。
9.2 未来的发展方向
- 提升高可用性: 加强 Eureka 的高可用性设计,支持更简单的集群配置和故障转移机制,确保在多节点环境下的稳定性。
- 性能优化: 对于大规模微服务架构,继续优化性能,减少服务发现和注册的延迟,提高处理效率。
- 与云原生架构的集成: 进一步与 Kubernetes、Service Mesh(如 Istio)等云原生架构整合,提升微服务的灵活性和可管理性。
- 多租户支持: 开发多租户功能,使得多个团队或项目可以在同一个 Eureka 实例上安全地运行,互不干扰。
- 智能路由与负载均衡: 集成智能路由和负载均衡功能,提升服务调用的效率和准确性,满足更复杂的业务需求。
- 监控与管理工具: 提供更友好的监控和管理界面,帮助开发和运维人员实时监控服务状态,快速定位和解决问题。
相关文章:
解析Eureka的架构
1. 引言 1.1 Eureka的定义与背景 Eureka是由Netflix开发的一个RESTful服务,用于服务发现。它是微服务架构中的一个核心组件,主要用于管理服务的注册和发现。Eureka允许服务提供者注册自己的服务信息,同时也允许服务消费者查询可用的服务&am…...

AI变现,做数字游民
在数字化时代,AI技术的迅猛发展不仅改变了各行各业的生产方式,还为普通人提供了前所未有的变现机会。本文将探讨如何利用AI技术实现变现,成为一名数字游民,享受自由职业带来的便利与乐趣。 一、AI技术的变现潜力 AI技术以其强大…...

linux-vlan
# VLAN # 1.topo # 2.创建命名空间 ip netns add ns1 ip netns add ns2 ip netns add ns3 # 3.创建veth设备 ip link add ns1-veth0 type veth peer name ns21-veth0 ip link add ns3-veth0 type veth peer name ns23-veth0 # 4.veth设备放入命名空间,启动接口 ip link set n…...
前端跨域~简述
前言 :绿蚁新醅酒,红泥小火炉 第一:前端跨域(粗谈概念) 1. 疑惑 当前端请求后端接口不通,浏览器控制台出现类似信息,则需要解决跨域 Access to XMLHttpRequest at ‘http://47.100.214.160:10…...

GIN:逼近WL-test的GNN架构
Introduction 在 图卷积网络GCN 中我们已经知道图神经网络在结点分类等任务上的作用,但GIN(图同构神经网络)给出了一个对于图嵌入(graph embedding)更强的公式。 GIN,图同构神经网络,致力于解…...

NIST密码学未来展望:Naughty Step 上的 SHA-1、3DES 和 SHA-224
1. 引言 NIST 几十年来一直致力于推动密码学标准的发展,2024年10月,其发布了Transitioning the Use of Cryptographic Algorithms and Key Lengths 草案: 概述了 SHA-1(为160位哈希算法) 将在不久的将来退役…...
go 集成gorm 数据库操作
一、什么是gorm GORM 是一个用于 Go 语言的 ORM(对象关系映射)库,它提供了一种简单而强大的方式来与数据库进行交互。GORM 支持多种数据库,包括 MySQL、PostgreSQL、SQLite、SQL Server 等,并且提供了丰富的功能&…...
进程 线程 和go协程的区别
进程和线程是操作系统中两个重要的执行单元,理解它们的区别对于编程和系统设计非常重要。以下是它们的主要区别: ### 进程(Process) 定义:进程是一个正在执行的程序的实例,具有独立的地址空间。 资源&…...

STM32获取SHT3X温湿度芯片数据
目录 一、概述 二、单次数据采集模式的测量 1、配置说明 2、代码实现方式 三、周期性数据采集模式的测量 1、配置说明 2、代码实现方式 四、完整代码下载链接 一、概述 SHT3X是Sensirion公司推出的一款高精度、完全校准的温湿度传感器,基于CMOSens技术。它提…...
卸载miniconda3
1. 找到miniconda目录,删除。 rm -rf miniconda3/ 2. 编辑bashrc sudo vim .bashrc setup路径改回anaconda3的,注释掉“>>> conda initialize >>>”和"<<< conda initialize <<<"之间的miniconda的语…...
游戏中的设计模式及杂项
概述 如果要做以下游戏功能会用到哪些设计模式。比如创建一个人物角色,这个角色可以装备刀,然后角色可以用刀砍怪物,造成流血。 对于这个游戏功能,可以使用以下设计模式: 工厂模式(Factory Pattern&#x…...

Docker网络和overlay的基础讲解
本人发现了两篇写的不错的文章:Docker网络 - docker network详解-CSDN博客,Docker 容器跨主机通信 overlay_docker overlay 网络-CSDN博客 因为这两篇文章中含有大量的例子,新手看起来毫不费力。于是我偷了个小懒,在本篇文章中没有…...
分布式数据库:深入探讨架构、挑战与未来趋势
引言 在数字化时代,数据已成为企业的核心资产。随着数据量的爆炸性增长和业务需求的多样化,传统的集中式数据库已难以满足现代应用对于高可用性、可扩展性和性能的需求。分布式数据库以其独特的优势,如数据的高可用性、容错性和可扩展性&…...

基于Springboot+Vue的仓库管理系统 (含源码数据库)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…...

基于立体连接与开源链动 2+1 模式的新商业路径探索
摘要:本文深入剖析了立体连接的内涵,包括其核心关键词、连接路径与主体,同时详细阐述了开源链动 2 1 模式、AI 智能名片和 S2B2C 商城小程序源码的特点与功能。在此基础上,深入研究这些要素的融合方式及其在商业实践中的应用&…...

开启鸿蒙开发之旅:核心组件及其各项属性介绍——布局容器组件
写在前面 组件的结构 rkTS通过装饰器 Component 和 Entry 装饰 struct 关键字声明的数据结构,构成一个自定义组件。 自定义组件中提供了一个 build 函数,开发者需在该函数内以链式调用的方式进行基本的 UI 描述 今天我们要学习的就是写在build 函数里的系…...
RabbitMQ 全面解析:语法与其他消息中间件的对比分析
1. 引言 在分布式系统和微服务架构中,消息中间件扮演着重要的角色。它们能够解耦服务、平衡负载、提高系统的可扩展性和可靠性。RabbitMQ 是其中广受欢迎的一种。本文将从 RabbitMQ 的基础概念、语法介绍、以及与其他消息中间件的对比角度,全面剖析其在…...

Three.js 搭建3D隧道监测
Three.js 搭建3D隧道监测 Three.js 基础元素场景scene相机carema网络模型Mesh光源light渲染器renderer控制器controls 实现3d隧道监测基础实现道路实现隧道实现多个摄像头点击模型进行属性操作实现点击模型发光效果 性能监视器stats引入使用 总结完整代码 我们将通过three.js技…...

「IDE」集成开发环境专栏目录大纲
✨博客主页何曾参静谧的博客📌文章专栏「IDE」集成开发环境📚全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定…...

MySQL-初识数据库
目录 一、数据库基础概念 1、SQL 2、数据(Data) 3、数据库(DB) 4、数据库管理系统DBMS 5、数据库系统DBS 6、关系模型(Relational Model) 7、E-R图 8、常见的数据库 9、数据库基本操作 一、数据库…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...