Ribbon负载均衡:提升应用性能与可靠性的秘密武器(一)

本系列文章简介:

        本系列文章将深入探讨Ribbon负载均衡的工作原理、应用场景和实践经验,帮助大家更好地理解和应用这一强大的技术。通过合理配置和优化Ribbon负载均衡,您可以为您的应用带来更高的性能和可靠性,从而获得竞争优势并满足用户的需求。欢迎大家订阅《Java技术栈高级攻略》专栏,一起学习,一起涨分!

目录

一、引言

1.1 负载均衡在微服务架构中的重要性

1.2 Ribbon简介与特点

二、Ribbon的工作原理

2.1 Ribbon的客户端负载均衡机制

2.2 负载均衡策略详解

2.2.1 轮询策略

2.2.2 随机策略

2.2.3 最少活跃调用策略

2.3 服务实例的健康检查与选择

三、Ribbon的配置与使用

3.1 Ribbon的配置项详解

3.2 集成Ribbon到Spring Cloud项目中

3.3 Ribbon的自定义配置与扩展

四、Ribbon 负载均衡的优势

4.1 提升应用性能

4.2 提高应用可靠性和可用性

五、Ribbon的负载均衡策略定制

六、Ribbon在高并发场景下的表现

七、Ribbon的最佳实践与应用案例

八、总结与展望

九、结语


一、引言

1.1 负载均衡在微服务架构中的重要性

负载均衡在微服务架构中扮演着重要的角色。微服务架构将一个大型应用拆分成多个小型服务,每个服务负责完成特定的功能。这些服务可能分布在多个服务器上,并且可能存在不同的负载情况。负载均衡的作用是将来自用户的请求分发到可用的服务实例上,以实现性能优化和高可用性。

以下是负载均衡在微服务架构中的重要性:

  1. 提高性能:微服务架构中的一个主要目标是提高整体系统的性能。负载均衡器可以将请求分发到空闲的服务实例上,避免某个实例过载,从而提高系统的响应速度和吞吐量。

  2. 实现水平扩展:负载均衡器可以轻松地将请求分发到多个服务实例上。当负载增加时,可以通过添加更多实例来水平扩展系统的容量,而无需对整个系统进行更改。这种扩展方式可以提高系统的可伸缩性和弹性。

  3. 实现高可用性:微服务架构中的一个关键要素是高可用性。负载均衡器可以监控服务实例的健康状态,并自动将请求转发到健康的实例上。如果某个实例出现故障或不可用,负载均衡器可以将流量转移到其他可用的实例,从而保持系统的可用性。

  4. 简化服务发现和动态路由:微服务架构中服务实例的数量是动态变化的,因此需要一种机制来发现和路由请求到正确的实例上。负载均衡器可以根据配置或动态发现机制,自动从服务注册中心获取可用的服务实例,并将请求路由到正确的实例上。

总之,负载均衡在微服务架构中起到至关重要的作用,它不仅可以提高性能和可用性,还可以实现系统的伸缩性和弹性,简化服务发现和动态路由。


1.2 Ribbon简介与特点

Ribbon是Netflix开源的一款负载均衡器,它可以帮助应用程序实现客户端负载均衡。Ribbon可以与各种前端组件轻松集成,如Spring Cloud、Eureka、Zuul等。

Ribbon的主要特点包括:

  1. 客户端负载均衡:Ribbon工作在客户端,它通过维护服务实例和根据特定的负载均衡策略选择服务实例,来实现负载均衡。相比于传统的服务端负载均衡器,Ribbon更加灵活和可扩展。

  2. 多种负载均衡算法:Ribbon提供了多种负载均衡算法,包括轮询、随机、权重等。开发人员可以根据具体的需求选择合适的负载均衡算法。

  3. 服务实例自动刷新:Ribbon与服务注册中心(如Eureka)集成,可以自动获取可用的服务实例列表,并实时更新。这意味着当新的服务实例上线或下线时,Ribbon能够及时感知到,并自动调整负载均衡策略。

  4. 容错机制:Ribbon提供了容错机制,当某个服务实例不可用时,会自动切换到其他可用的服务实例。这可以提高系统的可用性和稳定性。

  5. 定制化配置:Ribbon支持通过配置文件或编程方式进行负载均衡的定制化配置。开发人员可以根据具体的需求,对负载均衡算法、重试机制、超时时间等进行灵活配置。

总的来说,Ribbon是一款功能强大的负载均衡器,它能够帮助应用程序实现分布式系统中的客户端负载均衡,提高系统的性能、可用性和稳定性。

二、Ribbon的工作原理

2.1 Ribbon的客户端负载均衡机制

Ribbon是Netflix开源的一个客户端负载均衡库,常用于微服务架构中。

Ribbon的客户端负载均衡机制主要包括以下几个步骤:

  1. 服务实例的获取:通过注册中心或者配置文件中的服务列表,Ribbon会获取可用的服务实例列表。

  2. 负载均衡策略选择:Ribbon提供了多种负载均衡策略,包括轮询、随机、权重等,根据配置文件或者代码中的配置选择相应的负载均衡策略。

  3. 服务实例选择:根据选择的负载均衡策略,Ribbon会根据一定的规则选择一个可用的服务实例。

  4. 服务实例的调用:Ribbon将调用请求发送到选中的服务实例。

  5. 响应处理:Ribbon根据调用结果,处理服务实例的状态信息,比如是否正常、是否超时等。

  6. 故障转移:如果选中的服务实例不可用,Ribbon会尝试选择下一个可用的服务实例进行请求调用。

总的来说,Ribbon的客户端负载均衡机制是通过选择负载均衡策略,从服务实例列表中选择一个可用的服务实例,并调用该服务实例来实现负载均衡。


2.2 负载均衡策略详解

2.2.1 轮询策略

轮询(Round Robin)是一种常用的负载均衡策略之一。它的工作原理如下:

  1. 当收到客户端请求时,负载均衡器按照事先定义好的顺序,依次将请求分配给后端服务器。例如,有三台服务器A、B、C,那么第一个请求将被分配给服务器A,第二个请求将被分配给服务器B,第三个请求将被分配给服务器C,以此类推。

  2. 如果所有后端服务器都已分配到了请求,那么下一个请求将再次从第一个服务器开始分配。

  3. 轮询策略的优点是简单且公平,每个服务器都会被平均分配请求,避免了某个服务器负载过重而其他服务器负载过轻的情况。

  4. 然而,轮询策略无法动态适应服务器的运行状态。如果某个服务器出现问题或者负载过高,轮询策略无法主动将请求分配给其他服务器,也无法根据服务器的性能调整权重。因此,在实际应用中,通常会配合其他负载均衡策略使用,以提高系统的可靠性和性能。

需要注意的是,轮询策略可能存在一些问题。例如,如果某个后端服务器的处理能力比其他服务器低,那么它可能会成为性能瓶颈,影响系统的整体性能。此外,如果后端服务器的响应时间不一致,轮询策略可能导致某些请求等待时间过长。因此,实际使用中需要仔细评估系统的需求和性能,并选择合适的负载均衡策略。


2.2.2 随机策略

随机策略是一种简单的负载均衡策略,其工作原理是当有多个后端服务器时,每次请求都随机选择一个服务器进行处理。

具体的实现方法是,当一个请求到达负载均衡器时,负载均衡器会从可用的服务器列表中随机选择一个服务器,并将请求转发到该服务器上进行处理。因为每次选择的服务器都是随机的,所以每个服务器都有相等的机会获得请求。

随机策略的优点是实现简单,不需要额外的计算和记录,能够较为均匀地分配请求到各个服务器上。同时,随机策略适用于请求量比较小且请求类型比较简单的场景,因为随机策略没有考虑服务器的负载情况和性能差异。

然而,随机策略也有一些缺点。首先,由于每次选择服务器都是完全随机的,可能会导致某些服务器负载过高,而其他服务器负载过低的情况。其次,当某个服务器发生故障或者下线时,随机策略无法自动感知和调整,仍然会将请求转发到该服务器上,导致请求失败或者延迟。

因此,在实际应用中,随机策略一般会结合其他负载均衡策略一起使用,以克服其缺点。例如,可以使用健康检查来监测服务器的状态,当服务器发生故障时,负载均衡器会自动将该服务器从可用列表中移除,避免将请求转发到故障服务器上。


2.2.3 最少活跃调用策略

最少活跃调用策略是一种常见的负载均衡策略,用于在多个服务提供者之间分发请求。该策略的工作原理如下:

  1. 当一个服务消费者需要调用某个服务提供者时,Ribbon会先统计每个服务提供者的当前活跃调用数。
  2. 活跃调用数表示当前正在处理的请求个数,可以理解为服务提供者的负载情况。
  3. Ribbon会选择活跃调用数最小的服务提供者,将请求分发给它。
  4. 如果有多个活跃调用数最小的服务提供者,Ribbon会根据一定的规则进行选择,比如轮询选择或随机选择。
  5. 一旦请求被分发给某个服务提供者,它的活跃调用数就会增加。

通过使用最少活跃调用策略,可以实现请求的均衡分发,避免某些服务提供者过载而导致性能下降。这种策略适用于服务提供者之间的负载不平衡情况,可以有效地提高系统的可用性和性能。

需要注意的是,活跃调用数的统计需要依赖于服务提供者的一些监控信息,比如正在处理的请求个数。这些信息可以通过一些监控工具或健康检查接口获取。另外,最少活跃调用策略只是负载均衡的一种策略,可以与其他策略结合使用,以适应不同的场景和需求。

2.3 服务实例的健康检查与选择

Ribbon是一个负载均衡器,它的工作原理是基于服务实例的健康检查与选择。

在Ribbon中,首先会通过服务注册中心获取所有可用的服务实例列表。然后,Ribbon会定期对这些服务实例进行健康检查,以确定它们是否可用。通常,健康检查会发送一个简单的请求至服务实例,并根据返回结果来判断服务实例的健康状态。

根据服务实例的健康状态,Ribbon会进行服务实例的选择。具体选择策略可以根据实际需求进行配置,常见的选择策略有以下几种:

  1. 轮询(Round Robin):按照顺序依次选择每个服务实例。这是最常用的负载均衡策略。

  2. 随机(Random):随机选择一个服务实例。

  3. 权重(Weighted):根据服务实例的权重来选择。权重越高的服务实例被选中的概率越大。

  4. 最少连接(Least Connection):选择当前连接数最少的服务实例。

除了以上几种常见的选择策略,Ribbon还支持自定义的选择策略,可以根据实际需求来实现自己的选择逻辑。

总之,Ribbon通过对服务实例的健康检查和选择策略的配置,实现了负载均衡的功能,确保请求能够平均分发到可用的服务实例上,提高系统的可用性和性能。

三、Ribbon的配置与使用

3.1 Ribbon的配置项详解

Ribbon是一个负载均衡器和客户端HTTP库。它可以帮助你分发客户端请求到不同的服务器实例上,从而实现负载均衡。Ribbon提供了很多配置选项来控制其行为。

以下是Ribbon的一些常用配置项:

  1. ribbon.IsSecure: 指定是否使用安全连接(HTTPS)。默认为true。

  2. ribbon.MaxAutoRetries: 指定在尝试发送请求之前,Ribbon应该尝试的最大次数。默认为0,表示不进行重试。

  3. ribbon.MaxAutoRetriesNextServer: 指定在尝试切换到另一个服务器实例之前,Ribbon应该尝试的最大次数。默认为1。

  4. ribbon.ConnectTimeout: 指定与服务器建立连接的超时时间(以毫秒为单位)。默认为1000。

  5. ribbon.ReadTimeout: 指定从服务器读取响应的超时时间(以毫秒为单位)。默认为1000。

  6. ribbon.OkToRetryOnAllOperations: 指定是否对所有操作(GET、POST等)都进行重试。默认为false。

  7. ribbon.ServerListRefreshInterval: 指定更新服务器列表的间隔时间(以毫秒为单位)。默认为30000。

  8. ribbon.ServerListRefreshConnectionTimeout: 指定更新服务器列表时,尝试建立连接的超时时间(以毫秒为单位)。默认为2000。

这些是Ribbon的一些常用配置项,可以根据自己的需求进行配置。


3.2 集成Ribbon到Spring Cloud项目中

要将Ribbon集成到Spring Cloud项目中,需要以下步骤:

        1. 确保项目中已经引入了Spring Cloud的依赖。在项目的pom.xml文件中添加以下依赖:

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

        2. 在启动类上添加@EnableDiscoveryClient注解,以启用服务发现功能,并让Ribbon能够自动发现可用的服务实例。例如:

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

        3. 在配置文件中配置Ribbon的负载均衡策略。在application.properties或application.yml文件中添加以下配置:

# 配置负载均衡策略为随机
ribbon:# 负载均衡策略NIWSServerListClassName: com.netflix.loadbalancer.RandomRule

        4. 在RestTemplate的bean定义中使用@LoadBalanced注解,以启用Ribbon的负载均衡功能。例如:

@Configuration
public class RibbonConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

        5. 在需要调用其他服务的地方使用RestTemplate进行服务调用。例如:

@RestController
public class MyController {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/hello")public String hello() {String result = restTemplate.getForObject("http://service-provider/hello", String.class);return result;}
}

请注意,上述示例中的service-provider是要调用的服务的名称,它会通过服务发现功能自动解析为实际的服务实例地址。

这样,就成功将Ribbon集成到Spring Cloud项目中了。Ribbon将根据配置的负载均衡策略,选择可用的服务实例进行调用。


3.3 Ribbon的自定义配置与扩展

Ribbon是一个用于客户端负载均衡的开源项目,它可以与Spring Cloud等微服务框架集成使用。在使用Ribbon时,可以通过自定义配置和扩展来满足特定的需求。

  1. 自定义配置: 可以通过在配置文件中添加以下属性来进行自定义配置:
# Ribbon的客户端配置,可以设置全局的负载均衡算法和连接超时时间等
ribbon:ConnectTimeout: 3000  # 连接超时时间为3秒ReadTimeout: 5000  # 读取超时时间为5秒NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  # 使用随机负载均衡算法# 针对具体的服务进行配置
service-name:ribbon:ReadTimeout: 6000  # 读取超时时间为6秒

可以通过配置文件中的属性来配置Ribbon的行为,如连接超时时间、读取超时时间、负载均衡算法等。

        2. 扩展Ribbon的功能:在Ribbon中,可以通过扩展接口来实现自定义的功能。以下是一些常用的扩展方法:

  • 自定义负载均衡规则: 默认情况下,Ribbon使用的是轮询算法进行负载均衡,但可以通过实现IRule接口来扩展自定义的负载均衡规则。
  • 自定义服务列表获取方式: 默认情况下,Ribbon从Eureka或Consul等注册中心获取服务列表,但可以通过实现ILoadBalancer接口来扩展自定义的服务列表获取方式。
  • 自定义服务器选择逻辑: 默认情况下,Ribbon使用的是ZoneAvoidanceRule规则进行服务器选择,但可以通过实现IPing和ServerListFilter接口来扩展自定义的服务器选择逻辑。

通过自定义配置和扩展,可以使Ribbon更好地满足特定的业务需求。

四、Ribbon 负载均衡的优势

4.1 提升应用性能

Ribbon 负载均衡有以下几个优势,可以提升应用性能:

  1. 分布式流量调度:Ribbon 能够将请求流量分发到多个服务实例上,从而平衡各个实例的负载。通过分散流量,可以避免单个实例被过度请求而导致性能下降。

  2. 故障转移和容错:Ribbon 能够监测后端服务实例的健康状况,一旦发现某个实例故障,可以自动将请求转发到其他健康的实例上。这样可以提高系统的可用性和容错能力。

  3. 算法选择和策略配置:Ribbon 提供了多种负载均衡算法和策略配置的选项,可以根据实际需求对流量进行细粒度的调控。例如,可以根据服务器的负载情况选择合适的调度算法,或者设置优先级策略来确保高优先级的请求能够优先处理。

  4. 缓存和重试:Ribbon 支持请求的缓存和重试机制。通过缓存请求的结果,可以减少对后端服务的访问次数,从而提高系统性能。同时,对于处理失败的请求,Ribbon 可以自动进行重试,增加请求的成功率。

综上所述,Ribbon 负载均衡可以提高应用的性能和可靠性,通过分散流量、容错处理、灵活的调度策略以及缓存和重试等功能,来提升应用的整体性能。

4.2 提高应用可靠性和可用性

Ribbon 负载均衡的优势之一是提高应用的可靠性和可用性。以下是一些具体的优势:

  1. 高可靠性:Ribbon 能够自动检测和剔除故障节点,当某个节点不可用时,Ribbon 会自动将请求转发到其他健康节点,从而保证应用的可靠性。

  2. 降低单点故障风险:通过将请求分发到多个节点,Ribbon 能够减少单个节点故障对应用的影响。即使某个节点发生故障,其他节点仍然可以继续处理请求,降低了单点故障的风险。

  3. 动态调整负载:Ribbon 能够根据节点的负载情况动态调整请求的分发策略。当某个节点的负载过高时,Ribbon 可以将请求转发到负载较低的节点上,从而平衡整个系统的负载,提高可用性。

  4. 灵活配置:Ribbon 提供了丰富的配置选项,可以根据应用的需求进行灵活的配置。例如,可以根据节点的性能指标、地理位置等因素进行权重调整和路由策略的配置,从而进一步提高应用的可靠性和可用性。

总的来说,Ribbon 负载均衡能够提高应用的可靠性和可用性,通过动态调整负载、降低单点故障风险和灵活配置等方式,保证应用能够始终处于可用状态,提供稳定的服务。

五、Ribbon的负载均衡策略定制

        详见《Ribbon负载均衡:提升应用性能与可靠性的秘密武器(二)

六、Ribbon在高并发场景下的表现

        详见《Ribbon负载均衡:提升应用性能与可靠性的秘密武器(二)

七、Ribbon的最佳实践与应用案例

        详见《Ribbon负载均衡:提升应用性能与可靠性的秘密武器(二)

八、总结与展望

        详见《Ribbon负载均衡:提升应用性能与可靠性的秘密武器(二)

九、结语

        总之,Ribbon负载均衡作为提升应用性能和可靠性的秘密武器,为企业和组织提供了一种简单而高效的解决方案。它能够通过分散负载、提升吞吐量和保证高可靠性,提升用户体验,满足不断增长的应用需求。因此,无论是大型企业还是中小型组织,都可以将Ribbon负载均衡作为其应用架构中的重要组成部分,从而获得更好的业务效果和竞争力。希望本文能够对您有所启发,并在实际应用中取得成功。

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

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

相关文章

nginx---------------重写功能 防盗链 反向代理 (五)

一、重写功能 rewrite Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;重写功能(…

React回顾

一、基础 1、使用babel解析 2、不直接使用jsx&#xff0c;jsx写起来很繁琐 3、jsx语法规则 4、函数式组件的使用 5、函数式组件渲染 6、类组件渲染 7、类组件中事件调用this指向问题 8、类组件不能直接改变状态 9、props接收数据类型限制 类型限制放到类组件内部&#xff0c;用…

汽车油封的重要性

在汽车运行中&#xff0c;某些部件&#xff0c;如发动机或变速箱&#xff0c;相当于主角。然而&#xff0c;也有一些小不点在幕后发挥着至关重要的作用。不起眼的油封就是这样的组件之一。 1、油封的作用 油封&#xff0c;也称为旋转轴密封件&#xff0c;是提高汽车性能的重要…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的生活垃圾检测与分类系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本篇博客详细讲述了如何利用深度学习构建一个生活垃圾检测与分类系统&#xff0c;并且提供了完整的实现代码。该系统基于强大的YOLOv8算法&#xff0c;并进行了与前代算法YOLOv7、YOLOv6、YOLOv5的细致对比&#xff0c;展示了其在图像、视频、实时视频流和批量…

刷题第六天

代码随想录刷题第六天 | 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和 454.四数相加II 这个题分完组之后和两数其实差不多 得重新复习STL了&#xff0c;好多东西全忘了&#xff0c; class Solution { public:int fourSumCount(vector<int>& nums1, vect…

Day03:Web架构OSS存储负载均衡CDN加速反向代理WAF防护

目录 WAF CDN OSS 反向代理 负载均衡 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件上传下载/端口服务/Shell反弹等 抓包技术&#xff1a…

非线性优化资料整理

做课题看了一些非线性优化的资料&#xff0c;整理一下&#xff0c;以方便查看&#xff1a; 优化的中文博客 数值优化|笔记整理&#xff08;8&#xff09;——带约束优化&#xff1a;引入&#xff0c;梯度投影法 (附代码)QP求解器对比对于MPC的QP求解器 数值优化| 二次规划的…

Flask中使用日志库loguru

文章目录 README.mdapp.pyconfig.py参考资料 关于日志记录库loguru的介绍&#xff0c;具体可参见之前的博客&#xff1a;Python日志记录库——loguru 今天来介绍下&#xff0c;如何在Flask中使用loguru日志库。 README.md This is a simple example of how to use loguru in…

【Godot4自学手册】第十七节主人公的攻击和敌人的受伤

本节主要学习主人公是如何向敌人发起进攻的&#xff0c;敌人是如何受伤的&#xff0c;受伤时候动画显示&#xff0c;击退效果等。其原理和上一节内容相同&#xff0c;不过有许多细节需要关注和完善。 一、修改Bug 在本节学习之前&#xff0c;我将要对上一节的代码进行完善&am…

租赁系统|租赁软件提供免押金等多种租赁方式

租赁小程序是一种全新的租赁模式&#xff0c;为用户提供了免押金、多种租赁方式、定制化服务等多项优势&#xff0c;让用户的租赁体验更加美好。让我们来了解一下它的特点和功能。 首先&#xff0c;租赁小程序支持租完即送&#xff0c;无需等待固定租期。它提供了多种租赁方式&…

bash和sh和./的区别

bash和sh和./的区别 今天在执行一个脚本的时候&#xff0c;用的是sh script.sh&#xff0c;执行报错&#xff0c;使用bash script.sh执行时就能成功&#xff0c;才知道sh和bash是不一样的 sh sh表示 Bourne Shell&#xff0c;是 Unix 系统上的一种基本的命令解释器。它也可以…

GPT与MBR:硬盘分区表格式的革新与区别

概述 在计算机存储领域&#xff0c;硬盘分区是管理数据和操作系统部署的基础。两种广泛使用的分区表格式——MBR&#xff08;Master Boot Record&#xff09;和GPT&#xff08;GUID Partition Table&#xff09;&#xff0c;各自代表了不同的技术阶段和发展需求。本文将详细介…

NR 2-STEP RA Absolute Timing Advance Command MAC CE的应用场景

3 GPP在 R2-2002413中将2-step RA引入&#xff0c;进而R16 38.321出现了 Absolute TAC MAC CE&#xff0c;在 NR Timing Advance(TA)_ntn rrc-CSDN博客 有提到这个MAC CE&#xff0c;当时以“absolute timing advance command MAC CE 在2-step RA的某个场景下使用”一笔带过&am…

python使用unittest进行单元测试

文章目录 示例程序更多assert方法 通过一种规范的测试方法&#xff0c;可以帮助我们在修改程序后能够快速的检测一些bug&#xff0c;使用unittest库的方法如下&#xff1a; 示例程序 import unittestclass Demo01(unittest.TestCase):classmethoddef setUpClass(self) -> …

设计模式----装饰器模式

在软件开发过程中&#xff0c;有时想用一些现存的组件。这些组件可能只是完成了一些核心功能。但在不改变其结构的情况下&#xff0c;可以动态地扩展其功能。所有这些都可以釆用装饰器模式来实现。 装饰器模式 允许向一个现有的对象添加新的功能&#xff0c;同时又不改变他的…

MQTT协议解析:揭秘固定报头、可变报头与有效载荷的奥秘

MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;是一种轻量级的通讯协议&#xff0c;常用于远程传感器和控制设备的通讯。MQTT协议基于发布/订阅模式&#xff0c;为大量计算能力有限且工作在低带宽、不可靠网络环境中的设备…

Java集合基础梳理(集合体系+ArrayList)

目录 Java集合体系 为什么要使用集合类 ? 如何选用集合? 哪些集合类是线程安全的&#xff1f;哪些不安全&#xff1f; 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么&#xff1f; 遍历的同时修改一个List有几种方式 ArrayList 如何进行元素的遍历操作&#x…

Spring Boot项目误将Integer类型写成int来进行传参

在处理项目中Idea中无报错&#xff1a; 问题&#xff1a; localhost:8080/param/m2在浏览器中输入&#xff1a;localhost:8080/param/m2 产生报错&#xff1a; This application has no explicit mapping for /error, so you are seeing this as a fallback. Tue Feb 27 20:55…

Android PMS——系统更新和版本管理(十三)

当 Android 系统进行升级时,PMS(Package Manager Service)在系统更新和版本管理中扮演着关键角色。PMS 负责确保应用程序在新的系统版本上能够正常运行,这涉及到一系列的适配流程,具体如下: 检测不兼容应用:在系统升级过程中,PMS首先会扫描已安装的应用程序,识别出那些…

git上传了一个文件到远程仓库里面,之后如何忽略它

我们可能会遇到这种情况&#xff0c;因为一些失误或者别人的粗心&#xff0c;将一些本地的文件上传到了远程仓库&#xff0c;而且这个文件是环境相关的&#xff0c;随着不同开发者的环境&#xff0c;编译器会动态修改&#xff0c;从而导致每个人都不同 在提交过程中相互覆盖&a…