【云原生】服务网格(Istio)如何简化微服务通信

🐇明明跟你说过:个人主页

🏅个人专栏:《未来已来:云原生之旅》🏅

🔖行路有良友,便是天堂🔖

目录

一、引言

1、微服务架构的兴起

2、Istio:服务网格的佼佼者 

二、服务网格的基本原理

1、服务网格的定义

2、代理模式与数据平面

3、控制平面与API

三、Istio简介

1、Istio的核心组件

1.1 Envoy代理

1.2 Pilot

2、Istio的功能特性

2.1 流量管理

2.2 安全性 

四、Istio如何简化微服务通信

1、流量路由与负载均衡

2、服务发现与弹性伸缩

3、安全通信与身份验证


一、引言

1、微服务架构的兴起

微服务架构近年来迅速兴起,成为现代软件开发的重要趋势。其主要推动力包括业务需求的复杂性增加、敏捷开发和持续交付的需求,以及云计算和容器技术的发展。

微服务架构的定义
微服务架构是一种软件架构风格,将应用程序拆分为一组小的、独立部署的服务。每个服务运行在自己的进程中,并通过轻量级的通信机制(通常是 HTTP/REST)进行交互。每个微服务围绕某个业务能力构建,并可以独立部署和扩展。

微服务架构的兴起原因
1. 业务复杂性和灵活性:

  • 随着业务需求的不断变化和复杂性增加,单体架构难以适应快速的变化。
  • 微服务架构允许开发团队围绕具体的业务能力构建服务,使得每个团队可以独立工作,快速响应业务需求的变化。


2. 敏捷开发和持续交付:

  • 微服务架构支持敏捷开发方法,使得开发、测试和部署更加频繁和快速。
  • 各个微服务可以独立部署,不会影响整个系统的稳定性,有助于实现持续集成和持续交付(CI/CD)。


3. 技术异构性和多样性:

  • 微服务架构允许不同的服务使用不同的技术栈和编程语言,这使得团队可以选择最适合具体需求的技术。
  • 各个服务可以独立演化和升级,而不会影响其他服务。


4. 云计算和容器技术:

  • 云计算提供了弹性扩展的基础设施,微服务架构可以充分利用云计算的优势,实现按需扩展。
  • 容器技术(如 Docker 和 Kubernetes)简化了微服务的部署、管理和扩展,提高了开发和运维的效率。


5. 可伸缩性和可靠性:

  • 微服务架构允许各个服务独立伸缩,满足高并发和大流量的需求。
  • 通过服务隔离,即使某个服务出现故障,也不会影响整个系统的可用性,从而提高系统的可靠性。

2、Istio:服务网格的佼佼者 

Istio 是一个开源的服务网格解决方案,被认为是服务网格领域的佼佼者。它提供了一套完整的功能集,用于管理微服务应用的网络流量、安全、可观测性和弹性。以下是关于 Istio 的详细介绍。

什么是 Istio?
Istio 是一个独立于平台的服务网格,旨在通过透明的网络代理,简化和统一微服务之间的通信。Istio 的核心组件包括:

  1. Envoy 代理:一个高性能的代理,作为边车(sidecar)容器部署在每个服务实例旁边,拦截进出服务的所有网络流量。
  2. 控制平面:负责管理和配置 Envoy 代理,控制平面主要包括以下几个组件:
  • Pilot:服务发现和配置管理。
  •  Mixer:策略和遥测数据收集。
  • Citadel:提供服务到服务的认证和密钥管理。 

   

二、服务网格的基本原理

1、服务网格的定义

服务网格是一个用来管理和优化微服务之间通信的工具,就像一个聪明的交通警察,确保每辆车(微服务)在路上(网络)安全、高效地行驶。

为什么需要服务网格?
想象一下你有一个大型购物中心,每个商店都是一个微服务。这些商店需要互相沟通,比如顾客在支付时,支付服务需要联系库存服务来确认商品是否有货。随着商店(微服务)的数量增加,管理这些通信变得越来越复杂。服务网格就是为了解决这个问题而诞生的。

服务网格做了什么?
1. 流量管理:

  • 负载均衡:就像在繁忙的购物中心,顾客不会都挤在一家店里,而是被引导到有空位的店铺,确保每个店铺都能高效服务。
  • 流量路由:如果商店有新产品上线,会先在部分店铺进行测试,服务网格可以控制这些测试产品的流量。


2. 安全性:

  • 身份验证和授权:确保只有授权的服务才能互相通信,就像只有持有有效通行证的人才能进入特定区域。
  • 数据加密:所有的通信都是加密的,防止数据在传输过程中被窃取或篡改。


3. 可观测性:

  • 分布式追踪:跟踪每个请求的路径,就像在购物中心的每个角落都装有监控摄像头,可以看到顾客从进入到离开的全过程。
  • 日志记录和指标监控:记录所有活动并生成报告,帮助你了解哪个店铺(服务)工作正常,哪个店铺需要改进。


4. 弹性和容错:

  • 重试和超时:如果一个店铺暂时无法响应,系统会重试或将请求转到其他店铺,确保顾客总能得到服务。
  • 降级处理:如果某个店铺出现问题,系统会提供备选方案,确保购物中心整体正常运转。

  
 

服务网格的工作方式
服务网格由两个主要部分组成:

1. 数据平面:

  • 边车代理:在每个微服务旁边部署一个小助手(边车),这个小助手负责处理所有进出微服务的流量,确保流量按规则执行。


2. 控制平面:

  • 管理控制中心:类似于购物中心的管理办公室,负责制定和下达各种规则和策略,并收集所有店铺的运行数据。


简单例子
假设你有一个在线购物网站,有三个微服务:用户服务、订单服务和支付服务。用户服务接收用户请求并传递给订单服务,订单服务处理订单后通知支付服务进行支付。

在没有服务网格的情况下,如果订单服务遇到问题,你可能需要手动调试代码、查看日志,甚至联系开发团队。而有了服务网格,系统会自动记录每个请求的详细信息,帮助你快速定位问题,并自动提供备用方案,确保用户体验不受影响。


服务网格就像一个聪明的交通警察,帮助微服务高效、安全地通信。它自动处理复杂的通信问题,提供全面的监控和管理,让开发和运维人员可以更加专注于业务逻辑,而不是纠结于网络问题。

2、代理模式与数据平面

服务网格的基本原理主要依赖于代理模式和数据平面这两个核心概念。

代理模式(Proxy Pattern)
代理模式是一种设计模式,它通过代理(代理服务器)来控制访问某个对象。在服务网格中,每个微服务旁边都会有一个代理,这个代理负责处理所有进出该微服务的流量。

举个例子:
想象一下你是一位大公司总裁,你的办公室门口有一个秘书。任何人想见你,都必须先经过秘书。秘书会决定是否让这个人进来、什么时候进来、以及是否需要告诉你某些重要的信息。秘书就是你的代理。

在服务网格中,这个秘书代理被称为边车代理(sidecar proxy)。每个微服务(相当于总裁)都有自己的边车代理(秘书),处理所有的网络流量。

数据平面(Data Plane)
数据平面是由所有这些边车代理组成的网络层,它负责处理服务之间的所有通信流量。

举个例子:
想象一下在一个大型购物中心里,每家店(微服务)门口都有一个保安(边车代理)。所有的顾客(请求)必须先经过保安的检查(代理处理),才能进入商店。这些保安组成了一个安全网络层(数据平面),确保整个购物中心的安全和秩序。

服务网格的工作原理
1. 流量管理:

  • 代理模式:每个微服务的边车代理会拦截所有进出的流量,按照预定义的规则进行处理,比如负载均衡、重试和限流等。
  • 数据平面:所有边车代理共同工作,确保流量在微服务之间高效、安全地传递。


2. 安全性:

  • 代理模式:边车代理负责加密和解密通信数据,进行身份验证和授权,确保只有合法的服务可以通信。
  • 数据平面:通过所有代理的协同工作,提供统一的安全策略,防止数据泄露和未经授权的访问。


3. 可观测性:

  • 代理模式:边车代理会记录所有通信数据,包括请求的详细信息和响应时间,提供可观测性。
  • 数据平面:所有代理的数据汇集在一起,形成一张完整的通信监控图,帮助运维人员了解系统的运行状态。


4. 弹性和容错:

  • 代理模式:边车代理可以配置重试策略和超时设置,确保请求在遇到问题时能够自动重试或快速失败。
  • 数据平面:所有代理共同实现请求的重试、故障切换和降级处理,保证系统的高可用性。


服务网格通过代理模式和数据平面来管理和优化微服务之间的通信:

  • 代理模式:在每个微服务旁边部署一个边车代理,负责处理所有流量。
  • 数据平面:所有边车代理组成一个统一的网络层,协同工作处理服务间的通信。

     

3、控制平面与API

服务网格的另一个重要部分是控制平面,它与数据平面一起协同工作,使服务网格具备强大的功能和灵活性。

控制平面(Control Plane)
控制平面是服务网格的“大脑”,负责管理和配置整个服务网格的行为。它为数据平面提供规则和策略,监控服务网格的运行状态,并进行动态调整。

举个例子:
想象一个大型购物中心,控制平面就像购物中心的管理办公室。管理办公室制定购物中心的规则,如安全检查、营业时间、促销活动等,并通过广播或保安(代理)将这些规则传达给各个商店(微服务)。

控制平面的主要功能:
1. 配置管理:

  • 控制平面负责将配置和策略分发到各个边车代理。这些配置包括负载均衡策略、限流规则、重试机制等。
  • 例子:如果购物中心要改变营业时间,管理办公室会通知所有保安,确保他们在新的时间点开关门。


2. 服务发现:

  • 控制平面维护服务注册表,记录所有微服务的可用实例和地址。当某个微服务需要与另一个微服务通信时,控制平面会告诉它如何找到对方。
  • 例子:购物中心的管理办公室有一本所有商店的详细目录,任何店铺想联系其他店铺,可以向管理办公室查询。


3. 安全策略:

  • 控制平面定义安全策略,如身份验证、授权和加密,确保只有经过授权的服务才能通信,并且通信内容是加密的。
  • 例子:管理办公室为购物中心制定安全检查规则,确保只有持有有效通行证的人能进入某些特定区域。


4. 监控和日志:

  • 控制平面收集所有边车代理的运行数据,包括流量统计、错误日志和性能指标,帮助运维人员监控系统健康状况。
  • 例子:管理办公室通过监控摄像头和日志记录,了解每家店铺的运营情况,及时发现和解决问题。


 

API(应用程序接口)
API是服务网格与外部系统(如开发人员、运维工具)交互的接口。控制平面通常提供一组API,用于管理和监控服务网格。

API的主要作用:

1. 配置和管理:

  • 开发人员和运维人员可以通过API向控制平面提交配置和策略,控制平面再将这些策略分发到数据平面。
  • 例子:购物中心的管理办公室提供一个电话热线(API),商店经理可以通过电话提交新的规则和要求。


2. 监控和诊断:

  • 运维人员可以通过API查询服务网格的运行状态、监控数据和日志,进行故障诊断和性能优化。
  • 例子:商店经理可以通过电话(API)向管理办公室查询当天的客流量和销售数据,了解运营情况。

     

三、Istio简介

1、Istio的核心组件

1.1 Envoy代理

什么是 Envoy 代理?
Envoy 代理是一个高性能的、由 Lyft 开发的开源边车代理,负责处理微服务之间的所有网络流量。它被设计成轻量级和高效的代理,适用于各种规模的微服务架构。

举个例子:
想象你在一个大型快递公司工作,每个包裹(网络请求)在被递送到目的地(微服务)之前,都会经过一个快递站(Envoy 代理)。快递站负责检查、记录并确保包裹按照最佳路径安全送达。

Envoy 代理的主要功能:
1. 流量管理:

  • 负载均衡:Envoy 可以根据预定义的策略,将请求分配到多个服务实例,确保负载均衡。
  • 流量路由:它能够基于请求的内容(如路径、头部信息)将流量路由到不同的服务。
  • 举个例子:快递站决定每个包裹(请求)应该送到哪个分站(服务实例),以防某个分站过载。


2. 服务发现:

  • Envoy 与服务发现系统集成,能够动态更新服务实例的地址,确保请求总能找到可用的服务。
  • 举个例子:快递站实时获取各个分站的最新地址,确保包裹能够被正确递送。


3. 安全性:

  • Envoy 提供 mTLS(双向传输层安全协议)加密,确保服务之间的通信是安全的。
  • 举个例子:快递站对每个包裹进行扫描和加密,确保在运输过程中包裹不会被篡改。


4. 可观测性:

  • Envoy 收集和报告详细的指标、日志和追踪信息,帮助运维人员监控和调试系统。
  • 举个例子:快递站记录每个包裹的运输路径、时间和状态,便于追踪和查询。


5. 故障恢复:

  • Envoy 提供重试机制、超时设置和熔断器,确保在某个服务不可用时,系统仍能保持稳定。
  • 举个例子:如果某个分站无法接受包裹,快递站会自动重试或将包裹发送到其他可用的分站。

  
Envoy 在 Istio 中的角色
在 Istio 中,Envoy 被部署为每个服务实例的边车代理(Sidecar Proxy),即每个微服务旁边都有一个 Envoy 实例,处理所有进出的流量。这种方式有以下好处:

1. 透明拦截:

  • 微服务不需要修改代码,所有的网络流量自动通过 Envoy 代理处理。
  • 例子:所有包裹在运输过程中自动经过快递站,无需特别通知各个分站。


2. 集中管理:

  • Istio 的控制平面(如 Pilot)集中管理和配置所有 Envoy 代理,实现统一的流量管理和安全策略。
  • 例子:快递公司的总部(Istio 控制平面)统一管理和配置各个快递站(Envoy 代理)的操作规则。


3. 增强功能:

  • Envoy 提供的丰富功能,如负载均衡、服务发现和安全性,使得 Istio 能够高效地管理微服务间的通信。
  • 例子:快递站不仅能路由包裹,还能提供加密、监控和重试等额外服务,确保快递过程高效安全。

   

1.2 Pilot

 什么是 Pilot? 

Pilot 是 Istio 的控制平面组件之一,它负责管理和配置数据平面的 Envoy 代理。它通过将服务发现信息和流量管理策略分发给 Envoy 代理,确保微服务之间的通信是高效且安全的。

举个例子: 想象你在一个大型物流公司工作,每个分站(微服务)都有一个调度员(Envoy 代理),负责处理包裹(请求)的转发和管理。而总部的调度中心(Pilot)负责将所有分站的信息和操作规则传达给各个调度员,确保整个物流网络高效运行。

Pilot 在 Istio 中的角色

在 Istio 架构中,Pilot 扮演着中央控制器的角色,负责从服务发现系统获取服务信息,并将流量管理和安全策略分发给 Envoy 代理。

2、Istio的功能特性

2.1 流量管理

Istio 是一个功能强大的服务网格平台,提供了一系列工具来管理微服务之间的流量。这些工具不仅提高了系统的灵活性,还增强了其可靠性和可观测性。

1. 流量路由(Traffic Routing)
Istio 允许用户通过丰富的规则和策略来控制微服务之间的流量路径。这些规则和策略包括:

  • 流量分割(Traffic Splitting):将流量按比例分配到多个服务版本上。这对于 A/B 测试和金丝雀发布非常有用。
    • 例子:你可以将 90% 的流量发送到旧版本的服务,将 10% 的流量发送到新版本,以逐步验证新版本的稳定性。
  • 请求重试(Retries):在请求失败时自动重试,增加成功的概率。
    • 例子:如果一个请求由于临时的网络问题失败,Istio 可以自动重试该请求,以提高请求成功的几率。
  • 超时设置(Timeouts):设置请求的最大等待时间,防止请求无限期地等待。
    • 例子:如果一个请求超过了设定的 2 秒时间限制,Istio 会终止该请求并返回错误,以避免客户端长时间等待。
  • 熔断器(Circuit Breakers):在服务异常时阻止更多的请求,防止连锁故障。
    • 例子:如果某个服务的错误率过高,熔断器可以暂时停止发送请求给该服务,从而保护其他服务免受影响。

2. 流量镜像(Traffic Mirroring)
流量镜像允许你将生产环境的流量复制一份到新版本的服务进行测试,而不会影响实际的生产流量。这对于测试新版本的服务在真实流量下的表现非常有帮助。

  • 例子:你可以将实际用户请求的流量复制一份发送到新版本的服务,监控新版本在真实流量下的表现,同时确保用户的请求仍然由稳定的旧版本服务处理。


3. 请求路由(Request Routing)
Istio 支持基于请求属性的路由规则,使得流量可以根据请求的内容(如 HTTP 头、路径、参数等)路由到不同的服务版本。

  • 例子:你可以将所有包含特定用户标识的请求路由到某个服务版本,以便为这些用户提供定制化的服务。


4. 负载均衡(Load Balancing)
Istio 提供多种负载均衡策略,确保流量在服务实例之间均匀分布,以优化资源使用和响应时间。这些策略包括:

  • 轮询(Round Robin):依次将请求分配到每个服务实例。
  • 随机(Random):随机选择服务实例处理请求。
  • 最少请求(Least Request):将请求分配到当前处理请求最少的服务实例。
  • 例子:你可以选择轮询策略,确保每个服务实例依次接收请求,从而均衡负载。

5. 服务发现(Service Discovery)
Istio 通过与底层平台(如 Kubernetes)的集成,自动发现并管理服务实例。这使得流量管理规则能够动态适应服务实例的变化。

  • 例子:当一个新的服务实例启动时,Istio 会自动将其添加到流量管理规则中,无需手动配置。


6. 请求故障注入(Fault Injection)
Istio 允许你注入故障(如延迟、错误响应等)到服务请求中,以测试系统的健壮性和故障恢复能力。

  • 例子:你可以模拟一个服务的高延迟,观察系统的整体响应和恢复能力,以验证故障处理机制的有效性。


7. HTTP 重写和重定向(HTTP Rewrite and Redirect)
Istio 支持根据预定义规则重写或重定向 HTTP 请求路径和主机名。

  • 例子:你可以将所有对旧 URL 结构的请求重定向到新的 URL 结构,确保 URL 重构对用户透明。

2.2 安全性 

1. 身份验证(Authentication)
Istio 支持双向 TLS(mTLS)和 JWT(JSON Web Token)认证,确保服务之间和用户与服务之间的通信是安全的和经过认证的。

  • 双向 TLS(mTLS):自动加密服务之间的通信,防止中间人攻击。双方服务都需要验证对方的身份,确保只有经过认证的服务可以通信。
    • 例子:当服务 A 与服务 B 通信时,双方都需要验证对方的证书,确保通信是安全和可信的。
  • JWT 认证:支持基于 JWT 的用户认证,确保用户请求是由经过认证的用户发出的。
    • 例子:在用户请求访问某个服务时,Istio 会验证请求中的 JWT 令牌,以确保用户的身份是合法的。


2. 授权(Authorization)
Istio 提供细粒度的访问控制策略,可以基于多种属性(如服务、用户、路径、方法等)定义访问控制规则。

  • 基于角色的访问控制(RBAC):根据用户或服务的角色定义访问权限,确保只有具备特定角色的用户或服务可以访问资源。
    • 例子:你可以定义规则,只有管理员角色的用户才能访问某个敏感的服务或 API。
  • 基于属性的访问控制(ABAC):基于请求的属性(如 HTTP 头、请求路径、方法等)定义更灵活的访问控制规则。
    • 例子:你可以定义规则,只有特定 IP 地址范围内的请求才能访问某个服务。

四、Istio如何简化微服务通信

1、流量路由与负载均衡

  1. 动态配置:无需修改服务代码,通过 Istio 的配置即可动态调整流量路由和负载均衡策略。
  2. 精细控制:可以根据具体业务需求灵活定义路由规则和负载均衡策略,精确控制流量分配。
  3. 提高可靠性:通过重试、超时、故障注入等机制,提高服务的稳定性和可靠性。
  4. 简化部署:在不影响生产环境的情况下,通过流量镜像和拆分进行新版本的验证和灰度发布,降低发布风险。
  5. 提升性能:通过智能负载均衡优化资源利用,确保系统性能和响应时间。

2、服务发现与弹性伸缩

通过服务发现和弹性伸缩,Istio 显著简化了微服务通信的管理:

  1. 动态服务发现:无需手动管理服务实例,Istio 自动进行服务注册和注销,确保服务目录的准确性。
  2. 透明的服务调用:通过 DNS 服务发现机制,服务可以直接使用名称进行通信,避免手动配置 IP 地址。
  3. 自动扩展和缩减:根据实际负载动态调整服务实例数量,优化资源利用,确保服务性能和响应时间。
  4. 发布管理:通过金丝雀发布和蓝绿部署,降低新版本上线的风险,确保平稳过渡。
  5. 故障隔离:通过熔断器和速率限制机制,防止单点故障和过载问题,提高系统的稳定性和可靠性。

 

3、安全通信与身份验证

  1. 自动化配置:Istio 自动配置 mTLS 和证书管理,无需开发人员手动干预,大大简化了安全配置的复杂度。
  2. 透明加密:Istio 代理自动处理数据加密和解密,对应用代码透明,无需修改现有代码即可实现安全通信。
  3. 集中管理:通过 Citadel 实现证书的集中管理和轮换,确保证书始终有效和安全,降低证书管理的运维负担。
  4. 双重身份验证:结合 JWT 和 mTLS,实现多层次的身份验证,确保只有经过认证和授权的请求可以访问服务。
  5. 安全策略:Istio 支持定义和应用细粒度的安全策略(如访问控制、流量加密策略),提高系统的安全性和灵活性。

  💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于云原生的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

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

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

相关文章

AI绘画Stable Diffusion 超强一键去除图片中的物体,免费使用!

大家好,我是设计师阿威 在生成图像时总有一些不完美的小瑕疵,比如多余的物体或碍眼的水印,它们破坏了图片的美感。但别担心,今天我们将介绍一款神奇的工具——sd-webui-cleaner,它可以帮助我们使用Stable Diffusion轻…

音乐:触动心灵的艺术语言

Enjoy your music 音 乐 作为一种跨越时空和文化的艺术形式,拥有着无穷的魅力和力量。 它不仅能够带给我们愉悦的听觉享受,还对我们的身心健康、认知发展和社会交往产生着深远的影响。 一、音乐的基本元素 音乐由多个基本元素构成,包括…

python-逻辑语句

if else语句 不同于C:else if range语句: continue continue的作用是: 中断所在循环的当次执行,直接进入下一次 continue在嵌套循环中的应用 break 直接结束所在的循环 break在嵌套循环中的应用 continue和break,在…

SAP AFAB 资产过账如何查看配置的对应的会计科目

首先查看资产AS03 科目定位码 T004 然后去找对应的科目 AO93

绘唐3一键追爆款文刻创作聚星文社

聚星文社是一个中国的文学社交平台,提供了一个让作家和读者相互交流和分享作品的平台。 在聚星文社,作家可以在平台上发布自己的作品,获得读者的阅读和评论,同时也可以与其他作家进行交流与学习。 点击下载即可 读者可以在平台上…

Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单

文章目录 一、SSO介绍1、使用SSO的好处 二、中间件介绍1、Express安装导入使用 2、cors安装导入配置 3、express-session安装导入配置使用 4、jsonwebtoken安装导入使用 5、jwt和session对比 三、SSO实现方案1、安装依赖2、结构3、实现原理 四、示例代码1、nodejs端 server/ind…

如何在AWS上使用免费的服务器

要在AWS上免费使用的服务器,你可以按照以下步骤操作: (1)注册AWS账户: 访问AWS官方网站(https://aws.amazon.com/cn/),点击右上角的“完成注册”,按照页面提示填写相关…

谷粒商城篇章10 -- P262-P291/P295-P310 -- 订单服务(支付)【分布式高级篇七】

目录 1 页面环境搭建 1.1 静态资源上传到nginx 1.2 SwitchHosts增加配置 1.3 网关配置 1.4 订单模块基础配置 1.4.1 引入 thymeleaf 依赖 1.4.2 application.yml配置 1.4.3 bootstrap.properties配置 1.4.4 开启nacos注册发现和远程调用 1.5 修改各个页面的静态资源路…

配电房挂轨巡检机器人

配电房作为电网中的重要组成部分。其运行的的安全和稳定性直接影响到电力供应的质量。然而,传统的人工巡检模式存在诸多弊端,例如巡检效率低下、人员安全难以保障、巡检结果主观性强等问题。为了解决这些问题,旗晟机器人推出B3系列升降云台轨…

mst[讲课留档]

最小生成树(Minimum Spanning Tree) (1)概念 我们知道,树是有 n n n个结点, n − 1 n-1 n−1条边的无向无环的连通图。 一个连通图的生成树是一个极小的连通子图,它包含图中全部的 n n n个顶点,但只有构成一棵树的 n − 1 n-1 …

【C++】C++指针在线程中调用与受保护内存空间读取方法

引言 在C的多线程编程中,正确地管理内存和同步访问是确保程序稳定性和安全性的关键。特别是当涉及到指针在线程中的调用时,对受保护内存空间的访问必须谨慎处理,以防止数据竞争、死锁和内存损坏等问题。本文将详细探讨C指针在线程中调用时如何…

【stm32】大一上学期笔记复制

砌墙单片机 外设是什么? ipage 8 nx轴 128 X0-127 y0-63 PWM脉冲宽度调制 PWM脉冲宽度调制 2023年10月13日 基本特性:脉冲宽度调制PWM是一种对模拟信号进行数字编码的方法。广泛引用于电机控制,灯光的亮度调节,功率控制等领域…

人工智能--目标检测

欢迎来到 Papicatch的博客 文章目录 🍉引言 🍉概述 🍈目标检测的主要流程通常包括以下几个步骤 🍍数据采集 🍍数据预处理 🍍特征提取 🍍目标定位 🍍目标分类 🍈…

调度器APScheduler定时执行任务

APScheduler(Advanced Python Scheduler)是一个Python库,用于调度任务,使其在预定的时间间隔或特定时间点执行。它支持多种调度方式,包括定时(interval)、日期(date)和Cr…

使用Git从Github上克隆仓库,修改并提交修改

前言 本次任务主要是进行github提交修改的操作练习实践,本文章是对实践过程以及遇到的问题进行的一个记录。 在此之前,我已经简单使用过github,Git之前已经下好了,所以就省略一些步骤。 步骤记录 注册github账号,gi…

C++ | Leetcode C++题解之第208题实现Trie(前缀树)

题目&#xff1a; 题解&#xff1a; class Trie { private:vector<Trie*> children;bool isEnd;Trie* searchPrefix(string prefix) {Trie* node this;for (char ch : prefix) {ch - a;if (node->children[ch] nullptr) {return nullptr;}node node->children[…

华为OD机试 - 表演赛游戏分组 - 动态规划(Java 2024 D卷 200分)

华为OD机试 2024D卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;D卷C卷A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测…

React-Redux

Redux 通常用于管理 React 应用程序的状态&#xff0c;特别是在大型和复杂的应用程序中。 在 React 应用程序中&#xff0c;组件的状态通常由组件自身管理。然而&#xff0c;当应用程序变得复杂时&#xff0c;状态管理可能会变得困难&#xff0c;因为需要在多个组件之间共享和同…

基于STM32的温湿度检测TFT屏幕proteus恒温控制仿真系统

一、引言 本文介绍了一个基于STM32的恒温控制箱检测系统&#xff0c;该系统通过DHT11温湿度传感器采集环境中的温湿度数据&#xff0c;并利用TFT LCD屏幕进行实时显示。通过按键切换页面显示&#xff0c;通过按键切换实现恒温控制箱的恒温控制。为了验证系统的可靠性和稳定性&…

电影交流平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;电影类型管理&#xff0c;留言反馈管理&#xff0c;电影中心管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;电影中心&#xff0c;留言反馈 开发系统&#xff1a;Window…