Hystrix的原理及应用:构建微服务容错体系的利器(二)

本系列文章简介:

        本系列文章旨在深入剖析Hystrix的原理及应用,帮助大家理解其如何在微服务容错体系中发挥关键作用。我们将从Hystrix的核心原理出发,探讨其隔离、熔断、降级等机制的实现原理;接着,我们将结合实际应用场景,介绍Hystrix在微服务项目中的集成、配置和使用方法;最后,我们还将分享一些Hystrix的性能优化和最佳实践,帮助读者更好地发挥Hystrix的优势,构建出稳定可靠的微服务系统。欢迎大家订阅《Java技术栈高级攻略》专栏,一起学习,一起涨分!

目录

一、引言

二、Hystrix的应用实践

2.1 Hystrix的集成与配置

与Spring Cloud的集成

配置参数详解

2.2 Hystrix在微服务中的使用场景

服务间调用的隔离与保护

防止雪崩效应

2.3 监控与告警

Hystrix Dashboard的使用

自定义监控与告警策略

三、Hystrix的性能优化与最佳实践

3.1 性能调优建议

线程池大小的配置

请求超时设置

3.2 最佳实践分享

避免过度依赖熔断与降级

结合其他容错机制使用

四、Hystrix的未来发展趋势

4.1 社区支持与更新情况

4.2 新兴技术的挑战与机遇

五、结语


一、引言

        Hystrix是一个用于处理分布式系统中的故障和延迟的开源库。它由Netflix开发并开源,最早用于处理Netflix的视频流服务中的故障保护。Hystrix的起源可以追溯到Netflix在2011年左右遭受了一次大规模的服务故障。这次故障暴露了Netflix服务之间的依赖性和相互影响,导致了整个系统的崩溃。为了避免类似的故障再次发生,Netflix决定开发一个能够处理分布式系统中的故障和延迟的解决方案,这就是Hystrix。

        本文将跟随《Hystrix的原理及应用:构建微服务容错体系的利器(二)》的进度,继续介绍Hystrix。希望通过本系列文章的学习,您将能够更好地理解Hystrix的内部工作原理,掌握Hystrix的使用技巧,以及通过合理的配置完成最佳实践,充分发挥Hystrix的潜力,为系统的高效运行提供有力保障。

二、Hystrix的应用实践

2.1 Hystrix的集成与配置


与Spring Cloud的集成

Hystrix和Spring Cloud是两个独立的项目,但Hystrix是Spring Cloud Netflix的子项目,因此它们之间有很好的集成和配合。

要将Hystrix与Spring Cloud集成,您需要进行以下步骤:

  1. 添加依赖:在您的项目中添加Hystrix和Spring Cloud Netflix的依赖。例如,使用Maven,您可以在pom.xml文件中添加以下依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

        2.启用Hystrix:在您的Spring Boot应用程序的主类上添加@EnableCircuitBreaker注解来启用Hystrix功能。例如:

@SpringBootApplication
@EnableCircuitBreaker
public class YourApplication {// ...
}

        3. 创建Hystrix命令:使用@HystrixCommand注解来标记需要进行容错处理的方法。例如,您可以在Spring Bean上使用该注解:

@Service
public class YourService {@HystrixCommand(fallbackMethod = "fallbackMethod")public String yourMethod() {// ...}public String fallbackMethod() {// ...}
}

        4. 配置Hystrix:您可以在应用程序的配置文件(例如application.yml)中配置Hystrix的属性。例如,以下是一些常见的配置属性:

hystrix:command:default:execution:timeout:enabled: truetimeoutInMilliseconds: 5000circuitBreaker:requestVolumeThreshold: 20errorThresholdPercentage: 50sleepWindowInMilliseconds: 5000

这些配置属性可以自定义Hystrix命令的行为,例如超时时间,断路器的阈值等。

        5. 使用Hystrix仪表盘(可选):如果您想要可视化监控Hystrix命令的性能指标,您可以集成Hystrix仪表盘。首先,您需要添加如下依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

然后,在您的应用程序主类上添加@EnableHystrixDashboard注解。

以上就是将Hystrix与Spring Cloud集成和配置的基本步骤。您可以根据自己的需求和场景来进一步定制和扩展。


配置参数详解

Hystrix是一个用于处理分布式系统中的容错和延迟容忍的开源库。它提供了一套用于控制服务间交互的模式,使得系统能够以可控的方式处理故障和延迟。

在使用Hystrix的过程中,可以通过配置参数来控制Hystrix的行为。下面是一些常用的配置参数的详细解释:

  1. execution.isolation.strategy:该参数用于设置Hystrix命令执行的隔离策略。常见的取值有THREAD(Hystrix命令在独立的线程中执行)和SEMAPHORE(Hystrix命令在调用线程中执行)两种。

  2. circuitBreaker.enabled:该参数用于设置Hystrix的断路器是否启用。断路器是Hystrix中一种控制机制,用于在服务出现故障时禁止服务的调用,以避免连锁故障。

  3. circuitBreaker.requestVolumeThreshold:该参数用于设置触发断路器的最小请求数。只有在该参数所设置的数量的请求之后,断路器才会开始起作用。

  4. circuitBreaker.sleepWindowInMilliseconds:该参数用于设置断路器进入半开状态的时间窗口。在该时间窗口内,断路器会允许一部分请求通过,以判断服务是否恢复正常。

  5. circuitBreaker.errorThresholdPercentage:该参数用于设置断路器的错误阈值百分比。只有当请求的错误率超过该阈值时,断路器才会打开。

  6. execution.timeout.enabled:该参数用于设置Hystrix命令是否启用超时控制。如果启用,Hystrix命令会在超时时间内返回一个默认值,避免长时间的等待。

  7. execution.isolation.thread.timeoutInMilliseconds:该参数用于设置Hystrix命令的执行超时时间。超过该时间后,Hystrix会中断命令的执行。

以上是一些常见的Hystrix配置参数的解释,不同的参数可以根据具体的需求进行调整,以适应不同的场景。在使用Hystrix时,可以通过编写配置文件或者编程的方式来配置这些参数。


2.2 Hystrix在微服务中的使用场景


服务间调用的隔离与保护

Hystrix是一个开源的容错框架,主要用于在分布式系统中提供服务间调用的隔离与保护。

在微服务架构中,服务间的调用是非常常见的,但是如果一个服务出现了故障或者延迟,会导致调用方的性能下降甚至发生级联故障。Hystrix通过提供隔离和保护机制,可以避免这些问题。

Hystrix的主要使用场景之一就是服务间调用的隔离。它通过使用线程池或者信号量对服务间的调用进行隔离,每个调用都在独立的线程或者信号量中执行,这样就可以防止一个服务的故障或者延迟影响到其他服务。

此外,Hystrix还提供了服务的熔断功能。当一个服务的失败率超过阈值时,Hystrix可以自动触发熔断机制,不再调用该服务,而是直接返回预设的默认值或者执行指定的降级逻辑。这样可以避免服务的故障或者延迟导致整个系统的性能下降。

另外,Hystrix还可以提供服务的限流功能。当服务的请求量超过预设的阈值时,Hystrix可以通过直接拒绝请求或者排队等待的方式来限制服务的并发量,避免资源过载,保护系统的稳定性。

总而言之,Hystrix在微服务中的使用场景主要包括服务间调用的隔离与保护、熔断机制和限流功能。通过使用Hystrix,可以有效地保护系统免受故障和延迟的影响,提高系统的可靠性和稳定性。


防止雪崩效应

Hystrix在微服务中可以用来防止雪崩效应,具体的使用场景如下:

  1. 服务依赖的隔离:当一个服务依赖多个其他服务时,如果其中一个服务发生故障或延迟,可能会导致所有依赖于它的服务也受到影响。使用Hystrix可以对服务进行隔离,当某个服务出现故障或延迟时,只会影响到该服务本身,不会影响到其他的服务。

  2. 服务降级:当一个服务不可用时,可以通过Hystrix进行服务降级,返回一个备选的响应或执行一个备选的逻辑,而不是返回错误信息。这样可以保证整体系统的可用性,避免因为一个服务不可用导致整个系统崩溃。

  3. 熔断器模式:Hystrix可以实现熔断器模式,当某个服务的错误率或响应时间超过一定的阈值时,Hystrix会开启熔断器,所有对该服务的请求都会被快速失败,不会再调用该服务,从而避免雪崩效应的发生。当过一段时间后,Hystrix会尝试再次调用该服务,如果调用成功,熔断器会关闭,否则继续开启熔断器。

  4. 请求缓存:Hystrix可以对服务的请求进行缓存,当下次请求相同的参数时,可以直接返回缓存的结果,避免重复执行相同的操作,提高系统的性能。

综上所述,Hystrix在微服务中的使用场景之一就是防止雪崩效应的发生。通过对服务的隔离、降级、熔断和请求缓存等机制的支持,Hystrix可以保证整体系统的可用性和稳定性,避免单个服务的故障影响到整个系统。


2.3 监控与告警


Hystrix Dashboard的使用

Hystrix Dashboard是Hystrix提供的一种可视化监控工具,用于查看和分析Hystrix的运行情况。下面将介绍如何使用Hystrix Dashboard来监控和告警Hystrix。

  1. 添加Hystrix Dashboard依赖: 在项目的pom.xml文件中添加Hystrix Dashboard的依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

        2. 启用Hystrix Dashboard: 在Spring Boot应用的启动类上添加@EnableHystrixDashboard注解,开启Hystrix Dashboard的功能:

@SpringBootApplication
@EnableHystrixDashboard
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

        3. 配置Hystrix和Spring Boot的端点: 在application.properties或application.yml文件中添加以下配置:

# 开启Hystrix监控端点
management.endpoints.web.exposure.include=hystrix.stream# 指定Hystrix Dashboard的URL路径
management.endpoints.web.path-mapping.hystrix.stream=/hystrix.stream

        4. 访问Hystrix Dashboard: 启动应用后,访问http://localhost:port/hystrix,其中port是应用的端口号。在Hystrix Dashboard的页面上输入要监控的Hystrix流的URL,例如http://localhost:port/hystrix.stream,然后点击"Monitor Stream"按钮,即可开始监控。

        5. 监控和告警: Hystrix Dashboard会以图表的形式展示Hystrix的各种指标,例如请求的请求数、成功数、失败数、超时数等。可以通过这些指标来监控应用的性能和健康状况。

Hystrix Dashboard还可以配置告警机制,当某个Hystrix指标超过一定阈值时,可以触发告警通知。可以通过Spring Boot Actuator中的监控端点和Hystrix的事件流来实现告警功能。

以上就是使用Hystrix Dashboard来监控和告警Hystrix的简单实践方法。通过Hystrix Dashboard,可以更好地了解应用的运行情况,并及时发现和解决潜在的问题。


自定义监控与告警策略

Hystrix是一种用于隔离和管理分布式系统之间的依赖关系的开源库。它提供了一种容错机制,可以防止因依赖故障而导致整个系统的崩溃。

在Hystrix的应用实践中,监控与告警是非常重要的一环。通过监控可以及时发现系统中的故障或性能问题,并通过告警机制及时通知相关人员进行处理。

Hystrix提供了丰富的监控指标和告警策略,可以根据实际需求进行自定义。

  1. 自定义监控指标: Hystrix提供了很多内置的监控指标,如错误百分比、请求量、平均响应时间等。但有时候我们可能需要更具体的指标来监控系统的状态。在此情况下,可以通过实现Hystrix内置的HystrixMetricsPublisher接口来自定义监控指标。通过这个接口,可以将自定义的指标发送给监控系统,比如将指标写入数据库或发送给指定的监控平台。

  2. 自定义告警策略: Hystrix内置了一些告警策略,比如错误百分比超过一定阈值、错误数超过一定阈值等。但有时候我们需要更灵活的告警策略来适应业务需求。可以通过实现HystrixCommandMetrics中的getHealthCounts()方法来自定义告警策略。这个方法返回一个HystrixCommandHealthCounts对象,可以根据具体需求定义告警逻辑。比如可以根据错误数、错误百分比、请求量等指标来触发告警机制。

以上是Hystrix的应用实践中自定义监控与告警策略的一些思路和方法。根据具体需求,可以结合实际场景进行定制和优化,以实现更好的监控和告警效果。

三、Hystrix的性能优化与最佳实践

3.1 性能调优建议


线程池大小的配置

在Hystrix中,线程池大小的配置对性能优化非常重要。以下是一些关于线程池大小的最佳实践和性能优化建议:

  1. 确定适当的线程池大小:线程池大小应根据系统的负载和资源情况来确定。可以通过监控系统的负载情况,例如CPU使用率、内存使用率等来进行调整。一般来说,线程池大小应该足够大以处理系统的高峰负载,但不至于过大导致资源浪费。

  2. 使用线程池隔离:Hystrix提供了线程池隔离的功能,可以将不同的Hystrix命令隔离到独立的线程池中。这样可以有效地避免因单一线程池中某个命令的执行时间过长而导致其他命令被阻塞的情况。

  3. 监控和调整线程池大小:Hystrix提供了丰富的监控功能,可以通过Hystrix Dashboard或者Hystrix Metrics来监控线程池的使用情况。根据监控数据可以及时发现线程池的负载情况,从而进行调整。

  4. 避免线程池饱和:线程池饱和会导致请求被拒绝或者排队,影响系统的性能。可以通过设置合适的线程池队列大小来避免线程池饱和问题。此外,还可以通过调整线程池的拒绝策略,例如使用CallerRunsPolicy来降低对请求的拒绝。

  5. 使用合适的线程工厂:Hystrix提供了默认的线程工厂,但也可以根据实际需求自定义线程工厂。合适的线程工厂可以提高线程的创建和销毁性能,从而提升系统的整体性能。

总而言之,线程池大小的配置对Hystrix的性能至关重要。合理地配置线程池大小可以提高系统的吞吐量和响应时间,同时避免资源的浪费和线程池饱和等问题。


请求超时设置

在使用Hystrix时,合理的请求超时设置是非常重要的。设置过短的超时时间可能导致合理的请求被错误地标记为超时,而设置过长的超时时间可能导致资源长时间被占用,影响系统的整体性能。以下是一些关于Hystrix请求超时设置的性能优化和最佳实践:

  1. 根据实际情况设置超时时间:超时时间应根据实际情况来设置,考虑到网络延迟、系统负载等因素。可以通过对实际场景的测试和观察,找到一个适合的超时时间。

  2. 使用合适的线程池配置:Hystrix中的线程池是用来执行被隔离的逻辑的,设置合适的线程池大小可以避免线程池过载和线程资源的浪费。如果线程池中的线程被占满,超时时间可能无效。

  3. 避免阻塞操作:使用Hystrix时,应避免在Hystrix的逻辑中进行长时间的阻塞操作,因为超时时间是针对整个Hystrix命令的执行时间的,包括阻塞操作和等待时间。

  4. 使用超时降级策略:当请求超时时,可以根据实际情况采用合适的降级策略,如返回默认值、返回缓存数据等,避免请求被无限等待或重试。

  5. 监控和调优:通过Hystrix提供的监控功能,可以及时发现超时请求的情况,并根据监控指标进行调优。监控指标可以包括请求超时占比、线程池使用情况等。

总的来说,合理的请求超时设置应该基于实际情况,同时结合线程池配置、避免阻塞操作、使用超时降级策略和监控调优等,才能达到最佳的性能和可靠性。


3.2 最佳实践分享


避免过度依赖熔断与降级

在使用Hystrix时,需要注意避免过度依赖熔断和降级,以保证系统的性能和可用性。以下是一些Hystrix性能优化与最佳实践的建议,可以帮助避免过度依赖熔断与降级:

  1. 设置适当的超时时间:根据实际情况调整Hystrix命令的超时时间,避免命令超时过于频繁导致熔断。可以通过设置execution.isolation.thread.timeoutInMilliseconds属性来调整超时时间。

  2. 避免过度的线程隔离:Hystrix默认使用线程隔离来执行命令,每个命令都会创建一个独立的线程。如果系统中存在大量的Hystrix命令,可能会导致线程池资源耗尽。可以通过修改hystrix.threadpool.default.coreSize属性来调整线程池的大小,避免过度的线程隔离。

  3. 预热线程池:在系统启动时,Hystrix线程池可能会处于冷启动状态,需经过一段时间的预热才能达到最佳性能。可以使用Hystrix的HystrixThreadPoolMetrics类来监控线程池的状态,确保线程池已经预热完成。

  4. 避免过度降级:降级是为了保证系统的可用性,但过度降级可能会导致系统性能下降。在设置Hystrix命令的降级逻辑时,需确保降级后的响应能够满足系统的性能要求。

  5. 监控与调优:使用Hystrix Dashboard和Turbine等工具监控Hystrix的性能指标,及时发现和处理性能瓶颈。可以使用Hystrix的HystrixCommandMetricsHystrixThreadPoolMetrics类来获取命令和线程池的性能指标。

  6. 异常处理:Hystrix会将命令执行过程中产生的异常包装成HystrixRuntimeException,并抛给调用方。在处理异常时,需根据不同的异常类型采取适当的处理策略,避免过度熔断和降级。

总之,要确保使用Hystrix的性能优化与最佳实践,需要根据系统的实际情况进行调整和优化。通过合理设置超时时间、线程池大小和降级逻辑,以及监控和调优Hystrix的性能指标,可以避免过度依赖熔断和降级,提高系统的性能和可用性。


结合其他容错机制使用

在使用Hystrix进行性能优化和最佳实践时,我们还可以结合其他容错机制使用,以提高应用的稳定性和可靠性。

  1. 熔断器模式(Circuit Breaker):Hystrix已经实现了熔断器模式,但在某些情况下,可能需要结合其他熔断器库来实现更细粒度的熔断策略。比如,在一些高流量的场景下,可以使用Netflix的Hystrix Turbine来集中管理多个Hystrix实例的熔断器状态,以便更好地进行监控和管理。

  2. 限流(Rate Limiting):除了使用Hystrix进行熔断和降级外,我们还可以使用其他限流工具来控制流量,以避免系统的过载。例如,可以使用Netflix的限流库Ribbon来对请求进行限制,以保证系统的稳定性。

  3. 重试机制(Retry):在某些情况下,服务调用可能会因为网络问题或其他原因而失败。为了增加调用的成功率,我们可以在Hystrix的fallback方法中实现重试逻辑,或者结合其他重试框架(如Netflix的Hystrix Retry)来进行重试操作。

  4. 降级策略(Fallback):Hystrix已经提供了fallback机制,用于在服务调用失败或超时时提供默认值或备用逻辑。但在某些情况下,可能需要结合其他降级框架(如Netflix的Resilience4j)来实现更灵活的降级策略,以适应不同的业务场景。

综上所述,结合其他容错机制使用可以进一步提高应用的容错性和可靠性。但需要注意的是,在使用其他容错机制时,要确保与Hystrix的使用方式不会产生冲突,并且要进行适当的配置和管理,以避免引入更多的复杂性和潜在的问题。

四、Hystrix的未来发展趋势

4.1 社区支持与更新情况

Hystrix是一个熔断器库,用于预防和处理远程服务的故障。它是Netflix开源的项目,并且已经获得了广泛的应用和社区支持。

关于Hystrix的未来发展趋势,可以从以下几个方面来进行考虑:

  1. 社区支持:作为一个开源项目,Hystrix的未来发展将取决于社区的支持和贡献。目前,Hystrix已经得到了广泛的应用,并且在GitHub上有一个活跃的社区。随着时间的推移,社区可能会提供更多的建议、问题和解决方案,从而推动Hystrix的进一步发展。

  2. 更新情况:Hystrix目前的版本是1.5.18,最近的更新日期为2019年3月。然而,Netflix宣布将停止对Hystrix进行进一步的维护,并推荐使用Resilience4j或Sentinel等替代的解决方案。因此,从Netflix的角度来看,Hystrix可能不会有太多的更新。但是,由于它的开源性质,社区仍然可以继续对Hystrix进行更新和维护。

  3. 替代方案的发展:随着Hystrix的维护停止,许多开发者已经转向使用替代的熔断器库,如Resilience4j和Sentinel。这些项目都在吸取了Hystrix的经验教训,并提供了一些新的特性和改进。因此,Hystrix的未来发展可能会受到这些替代方案的竞争和影响。

总的来说,Hystrix作为一个已经被广泛应用和社区支持的熔断器库,虽然Netflix宣布停止对其进行维护,但是它仍然有可能通过社区的贡献和替代方案的竞争来继续发展。但是,开发者在选择熔断器库时可能会更加倾向于使用更新的替代方案。


4.2 新兴技术的挑战与机遇

Hystrix是一个用于构建容错和弹性系统的开源库,它可以帮助开发人员通过实现断路器模式来应对分布式系统中的故障和延迟。未来,Hystrix将面临许多新兴技术的挑战和机遇。

首先,随着云原生技术的普及,容器化和微服务架构的使用将不断增加。这将导致更复杂的分布式系统,并给容错和弹性带来更大的挑战。 Hystrix需要适应这种变化并提供更加灵活和可扩展的解决方案。

其次,随着人工智能和机器学习的迅速发展,Hystrix可能面临新的挑战。利用机器学习技术和大数据分析,可以更准确地预测和检测故障,并在故障发生之前采取相应的措施。 Hystrix可以借鉴这些技术,提供更智能和自动化的容错和弹性机制。

另外,随着边缘计算和物联网的兴起,分布式系统将更加普遍和复杂。 Hystrix需要适应这一趋势,并提供适用于边缘设备和网络环境的解决方案。例如,Hystrix可以通过优化网络传输和减少资源消耗来提高边缘设备的性能和可靠性。

此外,数据安全和隐私保护也是未来发展的重要考虑因素。随着越来越多的敏感数据通过分布式系统传输和处理,确保数据的机密性和完整性变得更加困难。 Hystrix需要加强对数据安全和隐私的支持,例如提供加密和数据授权等功能。

总的来说,Hystrix的未来发展将与新兴技术的发展密切相关。通过适应和整合这些新技术,Hystrix将能够提供更强大和可靠的容错和弹性机制,支持更复杂和高性能的分布式系统。

五、结语

        随着微服务架构的广泛应用,服务治理和容错机制的重要性日益凸显。Hystrix作为微服务容错体系中的一把利器,以其强大的隔离、熔断和降级功能,为系统的稳定性和可用性提供了坚实的保障。

        通过对Hystrix原理的深入剖析,我们理解了其如何在微服务架构中发挥作用。Hystrix通过隔离机制,将远程服务调用与主应用线程池进行隔离,防止了单个服务的故障影响到整个系统。同时,熔断机制能够在服务调用异常时快速失败,避免资源的进一步浪费,并触发降级逻辑,确保服务的可用性。这些机制的协同工作,使得Hystrix成为了构建稳定可靠的微服务系统的重要组件。

        总之,Hystrix作为构建微服务容错体系的利器,为我们提供了强大的支持和保障。通过深入理解和应用Hystrix的原理和功能,我们能够构建出更加稳定、可靠和高效的微服务系统,为业务的持续发展提供有力的技术支撑。

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

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

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:RelativeContainer)

相对布局组件&#xff0c;用于复杂场景中元素对齐的布局。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 规则说明 容器内子组件区分水平方向&#xff0c;垂直方向&#xff1a; 水平方向为left&…

华为云计算hcie认证考什么?华为hciie认证好考吗

1.理论知识&#xff1a;HCIE认证首先要求考生具备扎实的云计算理论基础&#xff0c;包括云计算的基本概念、架构、关键技术、安全管理等方面的知识。考生需要深入理解云计算的核心原理&#xff0c;以及华为云计算产品的特点和优势。 2.实践技能&#xff1a;除了理论知识外&…

HTTPS的工作过程

一、HTTPS 是什么 HTTPS 也是⼀个应用层协议&#xff0c;是在 HTTP 协议的基础上引入了⼀个加密层. HTTP 协议内容都是按照文本的方式明文传输的。这就导致在传输过程中出现⼀些被篡改的情况. 在互联网上, 明文传输是比较危险的事情!!! HTTPS 就是在 HTTP 的基础上进行了加密…

platform设备注册驱动模块的测试

一. 简介 上一篇文章编写了 platform设备注册代码&#xff0c;文章地址如下&#xff1a; 无设备树platform驱动实验&#xff1a;platform设备注册代码实现-CSDN博客 本文继续无设备树platform驱动实验&#xff0c;本文对编译好的 设备注册程序进行测试&#xff0c;测试所实…

(二)丶RabbitMQ的六大核心

一丶什么是MQ Message Queue(消息队列&#xff09;简称MQ&#xff0c;是一种应用程序对应用程序的消息通信机制。在MQ中&#xff0c;消息以队列形式存储&#xff0c;以便于异步传输&#xff0c;在MQ中&#xff0c;发布者&#xff08;生产者&#xff09;将消息放入队列&#xff…

LeetCode 面试经典150题 80.删除有序数组中的重复项II

题目&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件…

百度paddleocr GPU版部署

显卡&#xff1a;NVIDIA GeForce RTX 4070&#xff0c;Nvidia驱动程序版本&#xff1a;537.13 Nvidia驱动程序能支持的最高cuda版本&#xff1a;12.2.138 Python&#xff1a;python3.10.11。试过python3.12&#xff0c;安装paddleocr失败&#xff0c;找不到相关模块。 飞桨版本…

Linux从0到1——Linux第一个小程序:进度条

Linux从0到1——Linux第一个小程序&#xff1a;进度条 1. 输出缓冲区2. 回车和换行的本质3. 实现进度条3.1 简单原理版本3.2 实际工程版本 1. 输出缓冲区 1. 小实验&#xff1a; 编写一个test.c文件&#xff0c;&#xff1a; #include <stdio.h> #include <unistd.h…

老电脑装什么系统流畅

对于一些老旧电脑来说&#xff0c;重装系统是提升电脑性能的最佳选择。那么&#xff0c;老电脑装什么系统流畅呢&#xff1f;推荐Windows 7系统&#xff0c;它对硬件的需求相对较低。配置较低的电脑运行Windows 7可以更好地利用系统资源&#xff0c;提高电脑的运行速度和响应能…

【学习】目标检测中的anchor

参考知乎&#xff1a;anchor 简单理解 每个网格都会有一个自己的中心&#xff0c;每个小格子都可以抽象成为在自己的中心生成了一个指定大小为16个像素的矩形框&#xff0c;在这里&#xff0c;我们把这些中心称之为”锚点“&#xff0c;把每个锚点处的框称之为”锚框“。 锚…

ZooKeeper 概述

定义和功能 ZooKeeper 是一个开源的分布式协调服务&#xff0c;由 Apache 软件基金会托管。它主要用于解决分布式应用中遇到的一些复杂问题&#xff0c;如命名服务、状态同步服务、集群管理、分布式锁和队列管理等。 核心特性 一致性: ZooKeeper 保证了客户端之间的数据一致性…

c语言实现https客户端 源码+详细注释(OpenSSL下载,visual studio编译器环境配置)

OpenSSL的下载和环境配置 请参考&#xff1a;openssl下载安装教程 步骤&#xff1a;官网下载->安装到选定目录->配置环境变量->打开命令窗口检查是否安装成功 注意&#xff1a; 打开命令窗口&#xff08;快捷键winr,在弹出窗口内输入cmd按回车&#xff09;&#xff0…

ChatGPT解决hmm...something seems to have gone wrong.

ChatGPT解决hmm…something seems to have gone wrong. 这里是官方社区的一种workaround办法。仅仅只是mark一下。 我这边遇到的现象是&#xff0c;ChatGPT 3.5是正常的&#xff0c;但是使用ChatGPT 4就会频繁的出现这样的输出。而且恶心的是&#xff0c;即使是这种输出&…

安卓性能优化面试题 11-15

11. 简述APK安装包瘦身方案 ?(1):剔 除掉冗余的代码与不必要的jar包;具体来讲的话,我们可以使用SDK集成的ProGuard混淆工具,它可以在编译时检查并删除未使用的类、字段、方法 和属性,它会遍历所有代码找到无用处的代码,所有那些不可达的代码都会在生成最终apk文件之前被…

(三)丶RabbitMQ的四种类型交换机

前言&#xff1a;四大交换机工作原理及实战应用 1.交换机的概念 交换机可以理解成具有路由表的路由程序&#xff0c;仅此而已。每个消息都有一个称为路由键&#xff08;routing key&#xff09;的属性&#xff0c;就是一个简单的字符串。最新版本的RabbitMQ有四种交换机类型&a…

java高可用系统之降级 + 熔断

服务降级&#xff1a;服务器压力太大&#xff0c;根据当前业务及流量对一些服务和页面有策略的降级&#xff0c;保证核心任务事务正常运行。 降级方式包括&#xff1a; 延迟服务&#xff1a;发表评论是重要服务&#xff0c;要保证正常运行&#xff0c;但是给用户加积分&#…

音频数据如果在中断中会随机给的那就放入队列或者缓冲区;队列缓冲区对音频的作用

回采的数据是在中断函数au0_dma_isr_data_output里面给的&#xff0c;而给算法的时候是在主程序karaok_sdadc_process&#xff0c;这样子就会出现中断给的数据和当前的mic帧不匹配&#xff0c;或者说每次的差值不一定&#xff0c;算法就会有问题&#xff0c;解决办法是讲回采数…

云计算2主从数据库

设置主从数据库的目的是将数据库1和数据库2分别建在两个虚拟机上&#xff0c;并实现数据互通访问 首先准备两个虚拟机&#xff0c;这里示例ip分别为&#xff1a; 192.168.200.10&#xff1b;192.168.200.20 修改主机名&#xff0c;一个是mysql1&#xff0c;一个是mysql2&#x…

vscode 运行 java 项目之解决“Build failed, do you want to continue”的问题

Visual Studio Code运行 java 起来似乎比 IDEA 更轻量、比 eclipse 更友好&#xff0c;是不可多得的现代编译法宝。 安装好官方推荐的 java 扩展包后&#xff0c;就可以运行 java 代码了。功能 比 code runner 强&#xff0c;支持 gradle、maven、普通java项目&#xff0c;运行…

[云原生] Prometheus之部署 Alertmanager 发送告警

一、Alertmanager 发送告警的介绍 Prometheus 对指标的收集、存储与告警能力分属于 Prometheus Server 和 AlertManager 两个独立的组件&#xff0c;前者仅负责定义告警规则生成告警通知&#xff0c; 具体的告警操作则由后者完成。 Alertmanager 负责处理由 Prometheus Serve…