微服务中的相关概念

在这里插入图片描述
在这里插入图片描述

Eureka

Eureka 是由 Netflix 开发的一个服务发现和注册中心,广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现,确保各个服务之间能够方便地找到并通信。它是 Netflix OSS(Netflix Open Source Software)技术栈中的一部分,通常与 Spring Cloud 集成使用。

Eureka 的主要作用

  1. 服务注册

    • 每个微服务启动时,会将自己的信息(如服务名、实例地址、端口等)注册到 Eureka 服务器(也称为 Eureka Server)。
    • Eureka 服务器会维护一个服务实例列表,记录所有注册到它的微服务信息。
  2. 服务发现

    • 当一个微服务需要调用另一个微服务时,可以通过 Eureka 服务器查询所需服务的实例列表。
    • Eureka 客户端(也称为 Eureka Client)会定期从 Eureka 服务器获取更新的服务实例列表,并将请求路由到适当的服务实例。
  3. 健康检查

    • Eureka 客户端会定期向 Eureka 服务器发送心跳请求,表明服务实例的健康状态。
    • 如果 Eureka 服务器在一定时间内没有收到某个服务实例的心跳,将认为该实例不可用,并从服务实例列表中移除。
  4. 高可用性

    • Eureka 服务器可以集群部署,实现高可用性和容错能力。多个 Eureka 服务器实例之间会相互同步服务注册信息,确保服务的高可用性。
    • 在客户端缓存服务实例列表,即使 Eureka 服务器全部宕机,客户端仍可以使用缓存的服务实例列表进行服务发现。

Eureka 的功能特性

  1. 自我保护模式

    • 当 Eureka 服务器检测到短时间内大量服务实例不可用时,会启动自我保护模式。在这种模式下,Eureka 服务器将不会移除未收到心跳的服务实例,避免因网络分区等问题导致的大规模服务剔除。
    • 自我保护模式可以提高系统的稳定性和容错能力,防止因瞬时网络故障引发的连锁反应。
  2. 易于集成

    • 与 Spring Cloud 集成紧密,提供了简单的配置和使用方式,极大简化了服务注册和发现的实现。
  3. 灵活的客户端配置

    • Eureka 客户端可以通过配置文件或代码灵活地设置注册、心跳、缓存等参数,满足不同应用场景的需求。
  4. 丰富的 API

    • 提供了丰富的 REST API,支持对服务实例的注册、查询、更新、删除等操作,方便开发者进行管理和监控。

Eureka 在微服务中的应用场景

  1. 服务注册与发现

    • 在微服务架构中,服务实例的数量和地址是动态变化的,使用 Eureka 可以实现动态的服务注册和发现,简化服务间的调用。
  2. 负载均衡

    • Eureka 客户端可以从服务实例列表中选择合适的服务实例进行调用,实现客户端负载均衡,提升系统的性能和可靠性。
  3. 高可用性和容错

    • 通过集群部署 Eureka 服务器,实现服务注册中心的高可用性和容错能力,保证系统在部分节点故障时仍能正常运行。
  4. 自动化运维

    • 使用 Eureka 的自我保护模式和健康检查机制,可以实现服务实例的自动注册和注销,简化运维工作,提升系统的稳定性和可靠性。

示例架构

Eureka Server
  • 通常部署在多个节点上,以实现高可用性。
  • 负责维护所有注册的服务实例信息,并将这些信息提供给 Eureka 客户端。
Eureka Client
  • 每个微服务在启动时会注册到 Eureka Server,并定期发送心跳以表明自己是健康的。
  • 当微服务需要调用其他服务时,通过 Eureka Client 获取最新的服务实例列表进行调用。

总结

Eureka 作为微服务架构中的服务注册和发现中心,提供了动态服务注册、服务发现、健康检查和高可用性等功能,简化了服务间的调用和管理。通过与 Spring Cloud 的集成,Eureka 提供了简单而强大的服务注册和发现机制,极大地提高了分布式系统的弹性和可靠性。Eureka 的自我保护模式和灵活的客户端配置,使其能够适应各种复杂的网络环境和应用场景,是构建稳定可靠的微服务架构的重要工具。


Nacos

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款支持云原生架构的服务发现、配置管理和动态 DNS 的解决方案。它在微服务架构中发挥着重要作用,主要包括以下几个方面:

Nacos 的主要作用

  1. 服务发现与服务注册

    • 服务注册:微服务启动时,将自己的信息(如服务名、实例地址、端口等)注册到 Nacos 服务中心。
    • 服务发现:微服务可以通过 Nacos 查询到其他服务的地址和端口,从而实现服务间的调用。
    • 动态更新:当服务实例的状态发生变化(如上线、下线、崩溃等),Nacos 能够及时更新服务列表,并通知相关的微服务。
  2. 配置管理

    • 集中管理:Nacos 提供统一的配置管理平台,支持对分布式系统中各个微服务的配置进行集中管理。
    • 动态更新:配置文件的变更可以实时生效,Nacos 会将最新的配置推送给所有订阅该配置的微服务实例,减少了因配置变更导致的服务重启和停机时间。
    • 多环境、多版本管理:支持对不同环境(如开发、测试、生产)和不同版本的配置进行管理。
  3. 动态 DNS

    • DNS 服务:Nacos 提供类似 DNS 的功能,微服务可以通过域名访问其他服务,无需关心实际的 IP 地址。
    • 负载均衡:Nacos 可以将流量均匀分配到多个服务实例上,提升系统的可用性和扩展性。

Nacos 的功能特性

  1. 易于集成

    • Nacos 与 Spring Cloud 和 Dubbo 等微服务框架无缝集成,提供了友好的 API 和 SDK,使得开发者可以方便地使用 Nacos 的功能。
  2. 高可用性和可靠性

    • Nacos 支持集群部署,保证了服务的高可用性和可靠性。
    • 它使用 Raft 协议来实现一致性和故障恢复,确保数据的一致性和可靠性。
  3. 灵活性

    • 支持多种数据存储(如 MySQL、嵌入式存储等),开发者可以根据实际需求选择合适的存储方式。
    • 支持多种注册中心协议(如 HTTP、gRPC),兼容性强。
  4. 可视化界面

    • Nacos 提供了友好的管理控制台,用户可以通过 Web 界面方便地管理服务和配置,监控服务状态和配置变更。

Nacos 在微服务中的应用场景

  1. 服务治理

    • 通过 Nacos 实现服务的注册与发现,简化了服务之间的调用,提升了服务治理的效率。
    • 提供了服务健康检查和负载均衡功能,确保服务的稳定性和高可用性。
  2. 配置管理

    • 集中管理微服务的配置,支持配置的动态更新和多环境管理,降低了配置管理的复杂性。
    • 提供了细粒度的权限控制,确保配置的安全性。
  3. 流量管理

    • 支持灰度发布和流量控制,通过动态 DNS 和负载均衡机制,实现服务流量的精细化管理。
  4. 监控和报警

    • 集成了监控和报警功能,用户可以实时监控服务的运行状态和性能指标,及时发现和处理问题。

总结

Nacos 在微服务架构中充当了服务发现、配置管理和动态 DNS 的重要角色,极大地简化了服务治理和配置管理的工作。它通过提供统一的服务注册与发现、集中化的配置管理和灵活的流量控制,帮助开发者构建高可用、高性能、易扩展的分布式系统。在云原生和微服务架构越来越普及的今天,Nacos 是一个非常实用的工具。


Zuul

Zuul 是 Netflix 开发的一个基于 JVM 路由和服务网关的项目,主要用于微服务架构中的动态路由、监控、弹性、安全等功能。它可以作为微服务的 API 网关,处理所有外部请求,并将请求转发到相应的后端服务。

Zuul 的主要作用

  1. 动态路由

    • 根据请求路径、请求参数等动态地将请求转发到不同的后端服务。
    • 支持基于各种条件的路由规则配置。
  2. 负载均衡

    • 通过集成 Ribbon 等客户端负载均衡器,实现对后端服务的负载均衡。
  3. 安全管理

    • 可以在 API 网关层实现身份认证、授权等安全机制,确保请求的合法性。
  4. 流量控制

    • 支持对请求流量的限流、熔断等操作,保护后端服务免受流量激增的冲击。
  5. 监控和统计

    • 可以记录请求的各项指标,如延迟、成功率、失败率等,提供丰富的监控数据和日志。
  6. 过滤器机制

    • Zuul 提供了丰富的过滤器机制,开发者可以编写自定义过滤器来实现各种功能,如请求日志记录、请求参数校验等。

Zuul 的应用场景

  1. API 网关

    • 作为微服务的入口,处理所有外部请求,统一路由和转发到后端服务。
    • 实现统一的身份认证和授权,保证请求的安全性。
  2. 流量管理

    • 对请求流量进行限流和熔断,保护后端服务免受流量冲击。
  3. 日志和监控

    • 记录请求日志,提供丰富的监控数据,帮助运维人员了解系统的运行状况。
  4. 过滤器

    • 通过自定义过滤器,实现请求的校验、修改、转发等操作,满足各种业务需求。

总结

  • Zuul:作为 API 网关,主要负责请求路由、负载均衡、安全管理、流量控制和监控等功能,是微服务架构中外部请求的统一入口。

Sentinel

Sentinel 是阿里巴巴开源的一个用于分布式系统的流量防护组件,主要用于实现流量控制、熔断降级、系统负载保护等功能,确保分布式系统的稳定性和高可用性。

Sentinel 的主要作用

  1. 流量控制

    • 根据设定的限流规则,对进入系统的流量进行控制,防止系统过载。
    • 支持多种限流策略,如并发线程数限流、QPS(每秒查询数)限流等。
  2. 熔断降级

    • 当某个服务的调用失败率或响应时间超过设定阈值时,触发熔断机制,暂时拒绝对该服务的调用。
    • 在熔断期间,可以返回预设的降级处理结果,确保系统的可用性。
  3. 系统负载保护

    • 根据系统的负载情况(如 CPU 使用率、内存使用率等),动态调整流量控制策略,保护系统稳定运行。
  4. 热点参数限流

    • 对热点参数进行限流控制,防止某些高频请求导致系统性能下降。
  5. 实时监控

    • 提供丰富的监控数据,支持实时监控和统计各项指标,如流量、响应时间、成功率、失败率等。
  6. 规则动态调整

    • 支持动态调整限流、熔断等规则,能够根据实际情况灵活调整策略,适应系统的动态变化。

Sentinel 的应用场景

  1. 流量控制

    • 在微服务架构中,对服务的调用进行限流,防止服务过载。
    • 在流量激增时,确保核心服务的稳定性。
  2. 熔断降级

    • 当某个服务出现故障或性能下降时,通过熔断机制及时隔离问题,防止故障蔓延。
    • 提供降级处理,确保系统的基本可用性。
  3. 系统保护

    • 根据系统负载情况,动态调整流量控制策略,保护系统的稳定运行。
  4. 监控和报警

    • 实时监控各项指标,及时发现和处理系统中的异常情况,保障系统的正常运行。

总结

  • Sentinel:作为流量防护组件,主要负责流量控制、熔断降级、系统负载保护、热点参数限流和实时监控,确保分布式系统的稳定性和高可用性。

Hystrix

Hystrix 是由 Netflix 开发的一款用于处理分布式系统中延迟和容错的库,主要应用于微服务架构中。它通过隔离服务之间的调用、监控、熔断和故障恢复机制,提高了系统的弹性和容错能力。Hystrix 已经被广泛用于保护分布式系统中的服务免受依赖故障的影响,确保系统在面对部分服务故障时仍能提供关键功能。

Hystrix 的主要作用

  1. 熔断器模式(Circuit Breaker Pattern)

    • 熔断器:当服务的调用失败率达到一定阈值时,熔断器会打开,暂时中断对该服务的调用,以避免连锁故障。熔断器会在一段时间后尝试恢复对服务的调用,检查服务是否恢复正常。
    • 保护机制:避免对已知不可用的服务进行无效的重试调用,从而保护系统资源。
  2. 隔离技术(Isolation Techniques)

    • 线程池隔离:每个依赖服务都有一个独立的线程池,当线程池满时,新的请求会被立即拒绝,而不是排队等待,从而避免了服务调用之间的相互影响。
    • 信号量隔离:使用信号量限制并发调用的数量,适用于对延迟敏感且调用频繁的服务。
  3. 回退机制(Fallback)

    • 当服务调用失败、超时或熔断器打开时,Hystrix 可以执行一个预定义的回退方法,提供一个降级的服务响应,以确保系统的可用性。
  4. 实时监控

    • Hystrix 提供了丰富的监控指标和实时的监控数据,帮助开发者了解服务的运行状态和健康状况,及时发现和处理问题。
  5. 请求合并(Request Collapsing)

    • 合并多个请求以减少请求次数,提升性能。例如,将对同一服务的多个请求合并成一个批量请求,减少网络开销。
  6. 请求缓存(Request Caching)

    • 对相同的请求进行缓存,避免重复调用,提升效率。

Hystrix 的功能特性

  1. 熔断器配置

    • 支持自定义熔断器的各项参数,包括失败阈值、熔断器打开后的休眠时间、失败率计算窗口等。
  2. 隔离策略

    • 可以选择线程池或信号量两种隔离策略,灵活适应不同的服务调用场景。
  3. 超时设置

    • 可以为每个服务调用设置超时时间,确保慢调用不会拖累系统的整体性能。
  4. 统计和监控

    • Hystrix 提供了丰富的统计信息,包括成功、失败、超时、拒绝等调用的次数和比例,帮助开发者及时了解服务健康状况。
    • 提供了 Hystrix Dashboard,通过可视化界面展示各项指标,方便监控和管理。

Hystrix 在微服务中的应用场景

  1. 服务保护

    • 在微服务架构中,各个服务之间相互依赖,某个服务的故障可能会引发连锁反应。Hystrix 通过熔断器和隔离技术,有效防止服务之间的故障传播,保护系统的整体稳定性。
  2. 提升系统弹性

    • 通过回退机制和请求合并,Hystrix 能在服务不可用或性能下降时,提供降级服务或合并请求,提升系统的弹性和用户体验。
  3. 流量控制

    • 通过线程池和信号量隔离,Hystrix 能有效控制对依赖服务的调用流量,避免因过载导致的系统崩溃。
  4. 实时监控和报警

    • Hystrix 提供的实时监控和报警功能,帮助运维人员及时发现和处理系统中的异常情况,保障系统的正常运行。

总结

Hystrix 在微服务架构中扮演了重要的角色,通过熔断器、隔离、回退等机制,增强了系统的容错能力和弹性,保护了服务间的调用链路。尽管 Hystrix 项目已进入维护模式,不再积极开发新功能,但其设计理念和模式仍然在很多现代微服务框架中得到了应用和延续,例如 Spring Cloud 的 Resilience4j。Hystrix 的应用和经验为分布式系统的稳定性设计提供了宝贵的借鉴。

在微服务架构中,Hystrix 是一个用于处理延迟和容错的库,旨在提高系统的弹性和稳定性。Hystrix 提供了熔断和降级机制,这两者在保护系统免受依赖服务故障影响方面发挥了关键作用。

熔断机制(Circuit Breaker Pattern)

熔断机制的灵感来自电气工程中的电路断路器,当电流过大时,断路器会切断电路以保护设备。在软件系统中,熔断器保护系统免受持续的错误请求影响。

熔断器状态

  1. 关闭状态(Closed)

    • 默认状态,所有请求都正常发送给目标服务。
    • 如果请求失败次数超过设定阈值,熔断器进入半开状态。
  2. 打开状态(Open)

    • 熔断器阻止所有对目标服务的请求,并直接返回失败响应或执行回退逻辑。
    • 熔断器在打开状态下等待一段时间,然后进入半开状态。
  3. 半开状态(Half-Open)

    • 部分请求被允许通过,测试目标服务是否恢复正常。
    • 如果通过的请求成功,熔断器关闭;否则,重新进入打开状态。

触发熔断的条件

  1. 请求失败率:如果在一个时间窗口内,请求失败率超过设定的阈值(例如 50%),熔断器打开。
  2. 请求数量:熔断器只在达到一定数量的请求后才进行计算,以避免在请求量很少时误触发熔断。
  3. 响应时间:如果请求响应时间超过设定的阈值,也可以触发熔断。

熔断器打开后的行为

  1. 立即返回:直接返回一个错误响应,通知客户端服务不可用。
  2. 执行回退:执行一个预定义的回退方法,提供一个降级服务响应。

降级机制(Fallback)

降级机制是指在服务调用失败、超时或熔断器打开时,执行一个备用的回退方法,以提供替代的服务响应。这确保了系统在部分功能不可用时仍能提供基本的服务。

降级场景

  1. 服务调用失败:目标服务宕机或不可用时,执行回退逻辑。
  2. 服务超时:请求超时未响应时,执行回退逻辑。
  3. 熔断器打开:当熔断器进入打开状态时,直接执行回退逻辑。
  4. 自定义错误条件:开发者可以定义其他错误条件触发降级,例如特定的异常类型。

具体应用场景

  1. 网络故障:由于网络问题导致服务调用失败,熔断器打开,执行回退逻辑。
  2. 服务过载:目标服务因负载过高无法响应请求,触发熔断,执行降级服务。
  3. 服务升级或维护:目标服务临时下线进行维护,调用失败,触发熔断和降级。
  4. 瞬时高流量:突发流量导致部分请求失败,熔断器打开,提供降级响应以保护系统。

实际代码示例

以下是使用 Hystrix 的一个简单示例,展示了熔断和降级机制:

import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;public class MyServiceCommand extends HystrixCommand<String> {private final String name;public MyServiceCommand(String name) {super(HystrixCommandGroupKey.Factory.asKey("MyServiceGroup"));this.name = name;}@Overrideprotected String run() {// 模拟调用远程服务if (Math.random() > 0.5) {throw new RuntimeException("Service failure!");}return "Hello, " + name;}@Overrideprotected String getFallback() {// 降级逻辑return "Fallback, " + name;}public static void main(String[] args) {MyServiceCommand command = new MyServiceCommand("World");String result = command.execute();System.out.println(result);}
}

在这个示例中,run 方法模拟了一个远程服务调用,如果调用失败,getFallback 方法将返回降级响应。Hystrix 通过这种方式实现了熔断和降级机制,确保系统的稳定性和高可用性。

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

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

相关文章

C#心跳机制客户端

窗体&#xff08;richTextBox右显示聊天&#xff09; 步骤 点击链接按钮 tcpclient客户端步骤 1创建客户端对象 2连接服务器connect 3创建网络基础流发消息 .write发消息 4 创建网络基础流接消息 .read接消息 5 断开连接…

python库离线安装方法(pyqt5离线安装方法)

在某些情况下&#xff0c;我们的计算机是无法联网的。 网上大部分方法&#xff1a; 这些方法都有个问题&#xff0c;就是库是需要依赖其它库的&#xff0c;你不知道它需要依赖什么库&#xff0c;就是提供了依赖库的列表也麻烦&#xff0c;依赖库也是有对应版本要求的&#xf…

自制调色小工具给图片加滤镜,修改图片红、绿、蓝通道及亮度,修改图片颜色

上篇&#xff1a; 上篇我们给地图添加了锐化、模糊等滤镜&#xff0c;这篇来写一个小工具给图片调色。 调色比锐化等滤镜要简单许多&#xff0c;直接拿到像素值修改即可。不需要用到卷积核。。。(*^▽^*) 核心原理就是图像结构&#xff0c;使用context.getImageData获取图像像…

cad怎么转成pdf文件?方法很简单!

cad怎么转成pdf文件&#xff1f;在数字化时代&#xff0c;CAD图纸的转换与共享已成为日常工作中的常态。无论是建筑设计师、工程师还是学生&#xff0c;都可能遇到需要将CAD文件转换为PDF格式的需求。本文将为您推荐三款高效的CAD转PDF软件&#xff0c;让您轻松实现文件格式的转…

C++ 48 之 继承的基本语法

#include <iostream> #include <string> using namespace std;// 定义一个基类&#xff0c;把公共的部分写在这里&#xff0c;以后让别的类继承即可 class BasePage{ public:void header(){cout << "公共的头部"<< endl;}void footer(){cout…

STM32单片机-BKP和RTC

STM32单片机-BKP和RTC 一、Unix时间戳1.1 时间戳转换 二、BKP(备份寄存器)三、RTC(实时时钟)3.1 RTC工作原理 四、代码部分4.1 BKP备份寄存器4.2 RTC实时时钟 一、Unix时间戳 Unix时间戳定义为从伦敦时间的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒时间戳…

vue3使用echarts简单教程~~概念篇

没写过 写着玩玩 不足的地方还望小伙伴补充~~ 概念篇 文档奉上&#xff1a;数据集 - 概念篇 - 使用手册 - Apache EChartshttps://echarts.apache.org/handbook/zh/concepts/dataset <template><div id"main" style"width: 600px; height: 400px&…

集合进阶:增强for循环和lambda表达式

一.增强for遍历 1.增强for的底层是迭代器,为了简化迭代器的代码书写的。 2.他是JDK5之后出现的,其内部原理就是一个lterrator迭代器。 3.所有的单列集合和数组才能用增强for进行遍历 二.格式 for(元素的数据类型 变量名;数组或者集合){} 三.代码 Collection<String>…

72-UDP协议工作原理及实战

#ifndef UDPCOMM_H #define UDPCOMM_H#include <QMainWindow> #include <QUdpSocket> // 用于发送和接收UDP数据报 #include <QtNetwork>QT_BEGIN_NAMESPACE namespace Ui { class udpComm; } QT_END_NAMESPACEclass udpComm : public QMainWindow {Q_OBJECT…

定个小目标之刷LeetCode热题(23)

今天写这道题&#xff0c;背过八股文的都应该知道LRU算法缓存的基本原理&#xff0c;在 Java 语言中&#xff0c;同样有类似的数据结构 LinkedHashMap&#xff0c;本题我们采用自己创建哈希表双链表的形式简单实现一下 对于get操作&#xff1a;通过cache.get(key)获取&#xff…

格雷母线定位与控制系统:确保机车平稳运行的关键

微深节能的格雷母线高精度位移检测系统是一种高精度的位置检测设备&#xff0c;它通过发射和接收信号来确定移动物体的实时位置。在机车定位系统中&#xff0c;格雷母线被安装在固定的轨道上&#xff0c;而机车上的检测装置则负责读取这些信号&#xff0c;从而准确计算出机车的…

一文弄懂 Python os.walk(),轻松搞定文件处理和目录遍历

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ Python os 模块的 walk() 方法以自顶向下或自底向上的方式遍历指定的目录树&#xff0c;从而显示目录树中的文件名。对于目录树中的每个目录&#xff0c;os.walk() 方法都会产生一个包含目录路径、当前…

Java17 --- redis7缓存双写一致性

一、缓存双写一致性 如果redis中有数据&#xff1a;需要和数据库中的值相同。如果redis中没有数据&#xff1a;数据库中的值要是最新值&#xff0c;且准备回写redis。只读缓存。读写缓存&#xff1a;①、同步直写策略&#xff1a;写数据库后也同步写redis缓存&#xff0c;缓存…

光纤三维布里渊温度和应变分布matlab模拟与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 光纤三维布里渊温度和应变分布matlab模拟与仿真。其中 , 布里渊散射是光波与声波在光纤中传播时相互作用而产生的光散射过程 , 在不 同的条件下 , 布里渊散射又分…

数据结构与算法-字符出现的次数

问题描述 以下是这个找出字符串中字符串出现频率最多的字符。大家可以自行研究一下&#xff0c;题目不难&#xff0c;我今天尝试使用C语言来完成解答&#xff0c;但是在解答过程居然出现了一个意想不到的问题。可能是高级语言用多了&#xff0c;C语言某些函数的限制和风险忘记管…

C++之std::type_identity

目录 1.简介 2.C20的std::type_identity 3.使用 type_identity 3.1.阻止参数推导 3.1.1.模板参数推导过程中的隐式类型转换 3.1.2.强制显式实例化 3.2.阻止推断指引 3.3.类型保持 3.4.满足一些稀奇古怪的语法 4.示例 5.总结 1.简介 std::type_identity 是 C17 引入的…

【Python/Pytorch - 网络模型】-- 手把手搭建E3D LSTM网络

文章目录 文章目录 00 写在前面01 基于Pytorch版本的E3D LSTM代码02 论文下载 00 写在前面 测试代码&#xff0c;比较重要&#xff0c;它可以大概判断tensor维度在网络传播过程中&#xff0c;各个维度的变化情况&#xff0c;方便改成适合自己的数据集。 需要github上的数据集…

这些数据可被Modbus采集,你还不知道???

为什么要用Modbus采集模块 Modbus采集模块之所以被广泛使用&#xff0c;是因为它提供了标准化的通信协议&#xff0c;确保了不同设备间的兼容性。它支持多种通信方式&#xff0c;易于实现&#xff0c;并且能够适应不同的网络环境。Modbus模块能够收集和传输各种工业数据&#x…

061、Python 包:模块管理

包&#xff08;Package&#xff09;是一种用于组织模块的层次结构。包实际上就是一个包含了__init__.py文件的目录&#xff0c;该文件可以为空或包含包的初始化代码。通过使用包&#xff0c;可以更好地组织和管理大型项目中的模块&#xff0c;避免命名冲突&#xff0c;并提高代…

kettle从入门到精通 第七十一课 ETL之kettle 再谈http post,轻松掌握body中传递json参数

场景&#xff1a; kettle中http post步骤如何发送http请求且传递body参数&#xff1f; 解决方案&#xff1a; http post步骤中直接设置Request entity field字段即可。 1、手边没有现成的post接口&#xff0c;索性用python搭建一个简单的接口&#xff0c;关键代码如下&#…