Dubbo分布式服务框架:原理深度解析与实战应用探索(一)

本系列文章简介:

        在本系列文章中,我们将深入探索Dubbo分布式服务框架的原理和实战应用。我们将从Dubbo的架构设计开始,详细解析其内部的工作原理和核心组件。我们将探讨Dubbo的服务治理机制、负载均衡策略、容错机制等,并通过实际案例演示它们的应用。欢迎大家订阅《Java技术栈高级攻略》专栏,一起学习,一起涨分!

目录

第一章:Dubbo概述

1.1 Dubbo简介

1.2 Dubbo的发展历程

1.3 Dubbo的生态系统

第二章:Dubbo原理深度解析

2.1 服务注册与发现

2.1.1 注册中心的作用与选择

2.1.2 服务注册流程

2.1.3 服务发现机制

2.2 负载均衡

2.2.1 Dubbo支持的负载均衡策略

2.2.2 负载均衡策略的选择与应用

2.3 容错处理

2.3.1 Dubbo的容错机制

2.3.2 失败重试与超时控制

2.4 通信协议与序列化

2.4.1 Dubbo支持的通信协议

2.4.2 Dubbo支持的序列化方式

2.4.3 通信过程详解

2.5 服务治理与监控

2.5.1 Dubbo的服务治理策略

2.5.2 Dubbo的监控与调优

第三章:实战应用探索

第四章:高级特性与扩展

第五章:Dubbo的应用场景

第六章:Dubbo在微服务架构中的应用

第七章:Dubbo的实战应用探索

第八章:Dubbo的未来发展趋势

第九章:结语


第一章:Dubbo概述


1.1 Dubbo简介

Dubbo是一个高性能的分布式服务框架,用于构建可伸缩的企业级应用软件系统。它由阿里巴巴集团开源,并在国内外广泛应用。

Dubbo的主要特点包括:

  1. 服务治理:Dubbo提供了丰富的服务治理功能,包括服务注册与发现、负载均衡、容错机制等。通过这些功能,Dubbo可以实现服务的自动化管理和监控。

  2. 通信协议:Dubbo支持多种通信协议,包括RPC、HTTP和消息队列等。这使得Dubbo可以灵活适应不同的应用场景。

  3. 服务调用方式:Dubbo支持多种服务调用方式,包括同步调用、异步调用和单向调用。这使得Dubbo可以满足不同应用的需求。

  4. 负载均衡:Dubbo提供了多种负载均衡策略,包括随机、轮询和一致性哈希等。这使得Dubbo可以实现服务请求的均衡分配。

  5. 高可用性:Dubbo支持多种容错机制,包括失败重试、失败切换和并行调用等。这使得Dubbo可以提高服务的可用性和容错能力。

在实际应用中,Dubbo可以广泛应用于分布式系统、微服务架构、大规模互联网应用等场景。通过Dubbo,开发人员可以更方便地搭建分布式系统,提高系统的性能和可扩展性。


1.2 Dubbo的发展历程

以下是Dubbo在软件开发领域的发展历程:

  1. 初始阶段:Dubbo最初由阿里巴巴集团开发并于2011年开源。最初的版本主要提供了基本的分布式服务框架功能,比如服务注册与发现、负载均衡、容错机制等。

  2. 社区发展:随着Dubbo的开源,越来越多的开发者参与其中,为框架提供了丰富的功能拓展和优化改进。Dubbo社区的活跃程度逐渐增加,开始有更多的企业和开发团队选择使用Dubbo进行分布式架构开发。

  3. 发展壮大:Dubbo在市场上的认可度逐渐提高,被越来越多的大型企业和互联网公司采用。Dubbo的功能和性能得到了不断的优化和升级,能够满足更多复杂的分布式应用场景。

  4. 新功能引入:随着Dubbo的发展,一些新功能陆续被引入。比如Dubbo支持的RPC协议扩展、跨语言调用、服务治理能力的提升等。这些新功能使得Dubbo能够更好地适应不同的业务需求和技术栈选择。

  5. 生态系统建设:除了Dubbo自身的发展,相关的生态系统也在不断完善。比如Dubbo与Spring等开源框架的集成,以及与其他开源组件如ZooKeeper、Nacos等的整合,为开发者提供更便捷的开发和部署体验。

  6. 持续发展:Dubbo作为一个成熟的分布式服务框架,目前仍在持续发展和演进,不断适应行业变化和用户需求。未来,Dubbo有望继续拓展其功能和应用范围,为分布式系统开发提供更多可能性。

Dubbo在软件开发领域经历了从初始阶段到成熟阶段的发展过程,通过不断的优化和拓展,已成为许多企业和开发者首选的分布式服务框架之一。


1.3 Dubbo的生态系统

在软件开发中,Dubbo也有自己的生态系统,主要包括以下几个方面:

  1. 核心框架:Dubbo是一款高性能的Java RPC框架,提供了远程服务调用、负载均衡、服务治理等基础功能。

  2. 注册中心:Dubbo的生态系统中有多种注册中心可供选择,如Zookeeper、Nacos、Etcd等,用于服务的注册与发现。

  3. 服务提供者和消费者:Dubbo的生态系统中有服务提供者和消费者两个角色。服务提供者将自己的服务注册到注册中心,消费者通过注册中心获取服务提供者的地址信息,并使用Dubbo的远程调用功能调用服务。

  4. 负载均衡:Dubbo的生态系统中提供了多种负载均衡策略,如随机、轮询、一致性哈希等,用于在服务消费者之间均衡地分配负载。

  5. 服务治理:Dubbo的生态系统中提供了丰富的服务治理功能,包括服务降级、容错处理、限流、熔断等,用于提高服务的可靠性和稳定性。

  6. 监控和管理:Dubbo的生态系统中有多种监控和管理工具可供选择,如Dubbo Admin、Dubbo Monitor等,用于监控服务的运行状态和性能指标。

  7. 生态社区:Dubbo有一个活跃的开源社区,开发者可以在社区中获取支持、交流经验,还可以贡献代码、提出改进建议,共同推动Dubbo的发展。

Dubbo的生态系统提供了一整套完善的解决方案,帮助开发者构建分布式系统、实现服务间的通信和调用,并提供了丰富的功能和工具,用于提高服务的性能、稳定性和可维护性。


第二章:Dubbo原理深度解析

2.1 服务注册与发现

2.1.1 注册中心的作用与选择

Dubbo是一种基于分布式架构的服务框架,通过注册中心来实现服务的注册与发现。注册中心是一个独立的组件,用于记录服务提供者的信息,并提供给服务消费者进行查询与访问。

注册中心的作用主要有以下几个方面:

  1. 服务注册:服务提供者将自己提供的服务注册到注册中心,包括服务的名称、地址、版本号等信息。注册中心会将这些信息保存起来,以便服务消费者进行查询和调用。

  2. 服务发现:服务消费者可以通过注册中心查询所需的服务。注册中心提供了服务查询的接口,服务消费者可以根据服务名称、版本号等条件来查询符合条件的服务提供者地址。

  3. 负载均衡:注册中心可以根据一定的负载均衡策略,将服务消费者的请求分发给多个服务提供者。通过负载均衡,可以实现服务的高可用性和性能优化。

  4. 服务下线:当服务提供者不再提供服务时,可以将其从注册中心中注销。这样,服务消费者就不会再查询到已下线的服务,避免了调用无效的服务。

在选择注册中心时,需要考虑以下几个因素:

  1. 可靠性:注册中心需要具备较高的可靠性,即能够在任何时候提供服务。因此,选择一个经过验证且稳定的注册中心是很重要的。

  2. 性能:注册中心需要能够处理大量的服务注册和查询请求,所以性能也是一个关键因素。选择具有高性能的注册中心,可以提升整体系统的性能。

  3. 可扩展性:注册中心需要具备良好的可扩展性,能够支持大规模的服务注册和发现。在实际应用中,可能需要部署多个注册中心实例,因此可扩展性是一个重要的考虑因素。

  4. 安全性:注册中心需要具备一定的安全性,保护注册中心的数据和服务免受未经授权的访问和恶意操作。选择提供安全机制的注册中心可以提高系统的安全性。

常用的注册中心包括ZooKeeper、Etcd、Consul等。它们都是分布式的一致性存储系统,具备高可用性、性能和可扩展性。具体选择哪个注册中心,取决于项目的需求和团队的实际情况。在选择注册中心时,可以根据上述因素综合评估并进行合适的选择。


2.1.2 服务注册流程

服务注册与发现是微服务架构中非常重要的一环,它负责将提供服务的服务实例注册到注册中心,并提供给其他服务消费者发现和调用。

以下是服务注册流程的深度解析:

  1. 服务提供者启动时,会将自己的服务实例信息(包括服务名称、IP地址、端口号等)注册到注册中心。Dubbo支持多种注册中心,可以选择Zookeeper、Consul等。

  2. 服务提供者通过Dubbo暴露的服务接口,将服务实现类发布为可供远程调用的服务。Dubbo提供了丰富的服务暴露方式,包括基于Spring配置的XML方式和注解方式。

  3. 注册中心收到服务提供者的注册请求后,会将服务实例信息存储起来,并对外暴露一个服务列表。

  4. 服务消费者启动时,会从注册中心获取服务列表。Dubbo提供了负载均衡策略,可以根据需要选择合适的负载均衡算法,如随机、轮询等。

  5. 服务消费者根据负载均衡策略选择一个服务提供者进行远程调用。Dubbo通过基于代理的方式实现远程调用,使得调用方可以像调用本地方法一样调用远程服务。

  6. 调用完成后,服务消费者会将调用结果返回给调用方。

  7. 注册中心会定期检查服务提供者的健康状态,并将不可用的服务实例从服务列表中移除。

以上是服务注册与发现的基本流程,Dubbo还提供了服务降级、容错处理等扩展功能,以保证系统的可靠性和高可用性。通过服务注册与发现,微服务架构可以灵活地对服务进行扩展和管理,提高系统的弹性和可伸缩性。


2.1.3 服务发现机制

服务发现是Dubbo中非常重要的一个功能,它可以帮助服务消费者找到提供给它们服务的提供者。在Dubbo中,服务注册与发现的机制采用了两种方式:本地缓存和远程拉取。

首先,Dubbo采用本地缓存的方式来缓存服务提供者的信息。当一个服务提供者启动时,它会向注册中心注册自己的信息,包括服务接口名、版本号、协议、IP地址、端口等。注册中心会将这些信息保存在内存中,并且通知所有的服务消费者来更新它们的本地缓存。这样,当服务消费者需要调用某个服务时,它就可以在本地缓存中找到对应的服务提供者的信息,从而进行调用。

其次,Dubbo还采用了远程拉取的方式来更新本地缓存中的服务提供者的信息。当注册中心的服务提供者信息发生变化时,它会通知所有的服务消费者来更新它们的本地缓存。服务消费者会向注册中心发送请求,获取最新的服务提供者信息,并将这些信息更新到本地缓存中。这样,服务消费者就能够获取到最新的服务提供者信息,从而可以调用到新加入的服务提供者。

总结来说,服务发现机制是通过本地缓存和远程拉取相结合的方式来实现的。本地缓存可以提高服务消费者的性能,减少与注册中心的通信次数;远程拉取可以保证服务消费者获得最新的服务提供者信息,从而进行调用。通过这种机制,Dubbo可以实现高效、可靠的服务发现功能。


2.2 负载均衡

2.2.1 Dubbo支持的负载均衡策略

Dubbo是一款开源的分布式服务框架,旨在提供高性能和可扩展性的服务调用。其中之一的核心功能就是负载均衡,Dubbo支持多种负载均衡策略,用于平衡服务提供者的负载,保证服务调用的高效性和稳定性。

Dubbo支持以下几种负载均衡策略:

  1. 随机(Random):每次随机选择一个服务提供者进行调用。这种策略适用于服务提供者的负载相对均衡的情况下。

  2. 轮询(Round Robin):按照服务提供者列表的顺序依次进行调用。这种策略适用于服务提供者的负载相对均衡的情况下。

  3. 加权轮询(Weighted Round Robin):根据服务提供者的权重进行调用,权重越大的服务提供者被选择的概率越高。这种策略适用于服务提供者具有不同的处理能力的情况下。

  4. 最少活跃数(Least Active):统计服务提供者的活跃调用数,每次选择活跃调用数最小的服务提供者进行调用。这种策略适用于服务提供者具有不同的处理能力和负载情况的情况下。

  5. 一致性哈希(Consistent Hash):根据调用参数的哈希值选择服务提供者。这种策略适用于需要保持一定的调用一致性的场景,例如缓存等。

除了以上几种负载均衡策略外,Dubbo还支持自定义负载均衡策略。开发者可以根据具体需求实现自己的负载均衡策略,并在Dubbo配置中进行配置。

总的来说,Dubbo提供了多种负载均衡策略,开发者可以根据实际情况选择合适的策略,以实现负载均衡和高效稳定的服务调用。


2.2.2 负载均衡策略的选择与应用

负载均衡是指将网络流量分配到多个服务器上,以便实现高可用性和高性能的网络服务。在Dubbo中,负载均衡是一个重要的功能,它决定了请求将被分配到哪个提供者上。

Dubbo提供了多种负载均衡策略,根据不同的应用场景和需求,可以选择合适的负载均衡策略。下面是一些常用的负载均衡策略:

  1. 随机负载均衡(Random Load Balance):随机选择一个提供者来处理请求。这种策略简单、易实现,但不考虑各个提供者的权重和性能,可能导致某些提供者被高频率选择。

  2. 轮询负载均衡(Round Robin Load Balance):按照顺序依次选择提供者,轮流分配请求。这种策略公平,适用于提供者之间性能相近的情况。

  3. 加权轮询负载均衡(Weighted Round Robin Load Balance):每个提供者都有一个权重值,权重越高,被选择的概率越大。这种策略可以根据提供者的性能配置不同的权重,实现负载均衡的优化。

  4. 最少活跃数负载均衡(Least Active Load Balance):选择当前活跃请求最少的提供者。这种策略适用于提供者之间性能差异较大的情况,可以有效地避免请求集中在性能较好的提供者上。

  5. 一致性哈希负载均衡(Consistent Hash Load Balance):将请求根据哈希算法映射到提供者上,相同的请求总是被分配到相同的提供者上。这种策略适用于需要缓存的场景,可以保证相同的请求总是访问同一台提供者。

负载均衡策略的选择需要考虑应用的性能、可用性和可扩展性需求。在Dubbo中,可以通过配置文件或者注解的方式指定负载均衡策略,使得应用能够灵活地选择和使用不同的负载均衡策略。


2.3 容错处理

2.3.1 Dubbo的容错机制

Dubbo作为一个分布式服务框架,具有一定的容错机制,主要包括以下几个方面:

  1. 服务降级:当某个服务出现异常或超时时,Dubbo可以根据配置,自动降级,返回默认的或者预先定义好的降级结果,保证整个系统的稳定性。

  2. 隔离机制:Dubbo支持多种隔离策略,如线程池隔离、信号量隔离等,可以根据实际场景和需求选择合适的隔离策略,避免雪崩效应的发生。

  3. 重试机制:当调用服务失败时,Dubbo可以自动进行重试,通过设置重试次数和超时时间,可以提高服务的可靠性。

  4. 负载均衡:Dubbo提供多种负载均衡算法,如随机、轮询、一致性哈希等,可以根据实际情况选择合适的负载均衡算法,提高系统的整体性能。

  5. 服务熔断:Dubbo支持服务熔断机制,当某个服务出现异常或超时时,Dubbo可以将该服务临时关闭或者降级,避免服务的连锁故障。

  6. 集群容错:Dubbo提供了多种集群容错机制,如失败切换、失败重试、快速失败等,可以实现多个服务提供者之间的容错和故障转移。

总之,Dubbo的容错机制可以提供服务的稳定性和可靠性,保证分布式系统的正常运行。


2.3.2 失败重试与超时控制

在Dubbo中,容错处理是通过失败重试和超时控制来实现的。

  1. 失败重试:当服务调用失败时,Dubbo可以自动进行重试。在Dubbo中,默认情况下,会进行2次重试。可以通过在服务提供者和服务消费者的配置中设置重试次数来进行调整。通过重试,可以增加服务调用的成功率。

  2. 超时控制:Dubbo中可以设置服务调用的超时时间。当服务调用时间超过设定的超时时间时,Dubbo会进行超时处理,可以选择抛出异常或者进行重试。可以通过在服务提供者和服务消费者的配置中设置超时时间来进行调整。通过超时控制,可以防止服务调用时间过长,提高系统的性能和稳定性。

通过失败重试和超时控制,Dubbo可以提高服务调用的可靠性和稳定性。在实际应用中,可以根据具体的场景和需求进行配置,来达到合理的容错处理效果。


2.4 通信协议与序列化

2.4.1 Dubbo支持的通信协议

Dubbo支持的通信协议有:

  1. Dubbo协议:Dubbo使用自定义的二进制协议进行通信,其性能较高,但只能在Java环境下使用。
  2. HTTP协议:Dubbo可以通过HTTP协议进行通信,支持跨语言调用,但性能较低。
  3. Hessian协议:Dubbo也支持使用Hessian协议进行通信,Hessian是一种基于HTTP的二进制序列化协议,性能较好。
  4. RMI协议:Dubbo支持使用RMI协议进行通信,RMI是Java平台的远程方法调用协议,支持跨语言调用。
  5. Thrift协议:Dubbo还支持使用Thrift协议进行通信,Thrift是一个跨语言的RPC框架,性能较好。
  6. gRPC协议:Dubbo也可以使用gRPC协议进行通信,gRPC是一个高性能、开源的RPC框架,支持跨语言调用。


2.4.2 Dubbo支持的序列化方式

Dubbo支持以下序列化方式:

  1. Hessian:Hessian是一种基于二进制的序列化协议,具有良好的性能和跨语言支持能力。
  2. Java原生序列化:Dubbo默认使用Java原生的序列化方式,这种方式简单直接,但性能相对较差。
  3. JSON序列化:Dubbo还支持将数据序列化成JSON格式,这种方式可以在不同的语言之间方便地进行数据交换。
  4. FST:FST是一种高性能的Java序列化库,Dubbo也支持使用FST进行序列化,它可以提供更好的性能和更小的序列化尺寸。
  5. Protobuf:Protobuf是一种基于二进制的高效序列化框架,在Dubbo中也可以使用Protobuf进行序列化。 以上是Dubbo支持的常见序列化方式,可以根据具体的需求选择合适的方式。


2.4.3 通信过程详解

Dubbo的通信过程可以分为服务提供者和服务消费者之间的远程调用过程,具体步骤如下:

  1. 服务注册和发现:服务提供者在启动时会将自己提供的服务信息注册到注册中心,注册中心负责维护服务提供者的地址和可用性信息。服务消费者在启动时通过注册中心获取可用的服务提供者列表。

  2. 服务调用:服务消费者根据服务接口及方法名构造远程调用请求,包括参数、方法名等信息。Dubbo采用异步通信模型,通过Netty进行底层通信。

  3. 通信协议:Dubbo支持多种通信协议,包括Dubbo协议、HTTP协议、RMI协议等。服务消费者和服务提供者在通信时需要使用相同的协议。

  4. 序列化:服务消费者将请求对象进行序列化,通过网络发送给服务提供者。服务提供者在接收到请求后,将请求对象进行反序列化。

  5. 负载均衡:如果服务提供者有多个实例,Dubbo会根据指定的负载均衡策略选择一个实例进行调用。Dubbo支持多种负载均衡算法,如随机、轮询、一致性哈希等。

  6. 容错机制:如果服务调用失败,Dubbo会根据配置的容错策略进行处理,如失败重试、失败切换等。

  7. 超时控制:Dubbo允许用户配置调用超时时间,如果服务调用时间超过设定的超时时间,Dubbo会进行超时处理。

  8. 远程调用:服务调用请求到达服务提供者后,服务提供者根据请求方法名找到对应的实现逻辑进行处理。处理完成后,将结果序列化,通过网络返回给服务消费者。

  9. 结果处理:服务消费者接收到服务提供者返回的结果后,进行反序列化,并进行业务逻辑处理。最终将结果返回给服务消费者的调用方。

以上是Dubbo的基本通信过程,Dubbo提供了丰富的配置选项和扩展点,可以根据实际情况进行定制化配置和扩展。


2.5 服务治理与监控

2.5.1 Dubbo的服务治理策略

Dubbo是一个开源的高性能、轻量级的RPC(远程过程调用)框架,它提供了一套完整的服务治理策略,用于协调和管理Dubbo服务的生命周期。

Dubbo的服务治理策略主要包括以下几个方面:

  1. 注册中心:Dubbo通过注册中心来管理服务的注册和发现。注册中心可以是Zookeeper、Redis、Nacos等,它负责维护服务提供者和消费者的地址信息,并在服务变更时通知相关的消费者。

  2. 负载均衡:Dubbo提供了多种负载均衡策略,用于在服务调用时选择合适的服务提供者。常用的负载均衡策略有随机、轮询、一致性哈希等。

  3. 服务容错:Dubbo提供了多种服务容错策略,用于处理服务调用失败的情况。常用的容错策略有失败重试、失败自动切换、失败安全等。

  4. 服务限流:Dubbo提供了服务限流的功能,可以限制服务的并发调用量,防止服务被过度访问而导致故障。

  5. 隔离策略:Dubbo支持服务的隔离策略,可以将服务进行隔离,避免不同服务之间的互相影响。

  6. 监控和调优:Dubbo提供了丰富的监控和调优功能,可以监控服务的调用情况、性能指标等,并根据监控结果进行调优。

以上是Dubbo的一些常用的服务治理策略,通过合理配置这些策略,可以提高Dubbo服务的可用性和性能。同时,Dubbo也支持自定义扩展,可以根据具体需求自定义其他的服务治理策略。


2.5.2 Dubbo的监控与调优

Dubbo是一种高性能的分布式服务框架,可以用于构建大规模的分布式系统。在使用Dubbo时,监控和调优是非常重要的,可以帮助我们了解系统的运行状态和性能瓶颈,并进行适当的优化。

下面是一些Dubbo的监控和调优的建议:

  1. 监控指标:Dubbo提供了一些内置的监控指标,可以帮助我们了解系统的运行状态,例如请求数、响应时间等。我们可以通过配置Dubbo的监控中心,将这些指标报告到监控中心,并通过监控中心的可视化界面查看和分析。常见的Dubbo监控中心有Dubbo自带的Dubbo Admin和开源的ELK、Prometheus等。

  2. 高可用:在生产环境中,我们需要保证Dubbo服务的高可用性。可以通过配置Dubbo的集群容错策略,来处理服务调用失败的情况。常见的集群容错策略有失败自动切换、失败重试、失败安全等。

  3. 路由规则:Dubbo提供了强大的路由功能,可以根据不同的路由规则将请求分发到不同的服务提供者。我们可以根据实际需求来配置路由规则,以实现灰度发布、流量控制、负载均衡等功能。

  4. 进程优化:Dubbo服务的性能和稳定性也和进程的配置有关。可以根据服务器的性能和负载情况,适当调整Dubbo进程的内存、线程池大小等参数。

  5. 服务调优:当Dubbo服务出现性能瓶颈时,可以通过调整服务的并发数、线程池大小、超时时间等参数进行调优。可以通过监控工具和性能测试工具对服务进行压测,找到性能瓶颈并进行优化。

  6. 网络调优:网络是Dubbo通信的基础,可以通过调整操作系统的网络参数来提高网络性能,例如调整TCP连接数、调整内核缓冲区大小等。

  7. JVM调优:Dubbo使用Java语言开发,在运行时需要依赖JVM。可以通过调整JVM的参数,例如堆内存大小、GC策略等,来优化Dubbo的性能和稳定性。


第三章:实战应用探索

        详见《Dubbo分布式服务框架:原理深度解析与实战应用探索(二)


第四章:高级特性与扩展

        详见《Dubbo分布式服务框架:原理深度解析与实战应用探索(二)


第五章:Dubbo的应用场景

        详见《Dubbo分布式服务框架:原理深度解析与实战应用探索(二)


第六章:Dubbo在微服务架构中的应用

         详见《Dubbo分布式服务框架:原理深度解析与实战应用探索(二)
 

第七章:Dubbo的实战应用探索

        详见《Dubbo分布式服务框架:原理深度解析与实战应用探索(二)
 

第八章:Dubbo的未来发展趋势

         详见《Dubbo分布式服务框架:原理深度解析与实战应用探索(二)​​​​​​​
 

第九章:结语

        通过本文的阅读,我们对Dubbo分布式服务框架的原理和实战应用有了更深入的了解。Dubbo作为一种成熟的分布式服务框架,具有高性能、轻量级和可靠性等优势,被广泛应用于各种分布式系统中。希望本文对您理解Dubbo分布式服务框架的原理和实战应用有所帮助。感谢您的阅读,祝您在使用Dubbo构建分布式系统的过程中取得成功!        


 

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

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

相关文章

Linux:文件权限详解及修改方法

文章目录 1、Linux文件权限1.1、如何查看到文件权限1.2、ll命令介绍 2、权限分类2.1、文件权限2.2、文件夹权限 3、权限修改3.1、修改文件/文件夹权限1)chmod指令2)chmod指令符号 3.2、修改文件/文件夹所属用户3.3、修改文件/文件夹所属群组 4、参考 1、…

AI产品摄影丨香水

AI电商产品拍摄丨(可指定产品) 均为概念图 可换产品 可指定产品,可换logo 工具:StartAI 搭配“手机摄影”风格使用效果更佳哦 咒语:anha perfume in bottle on stone surface, in the style of everyday american…

和为K的子数组

题目: 使用前缀和的方法可以解决这个问题,因为我们需要找到和为k的连续子数组的个数。通过计算前缀和,我们可以将问题转化为求解两个前缀和之差等于k的情况。 假设数组的前缀和数组为prefixSum,其中prefixSum[i]表示从数组起始位…

JQuery的基础笔记

前言: j --> JavaScript Query --> 查询 jquery的入口函数 等DOM结构渲染完毕即可执行内部代码 相当于原生js的DOMContentLoaded 不同于原生js中的load是等一切加载完毕再执行 用法:(推荐第二种) $(document).ready(…

分段线性化问题探析

目录 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 4 matlab测试结果说明 5 分段线性化应用 1 使用0-1变量将分段函数转换为线性约束 2 连续函数采用分段线性化示例 3 matlab程序测试 clc;clear all; gn10;tn1; x_pfsdpvar(1, t…

vue3基础教程(3)——引入ui框架iview(viewui)

博主个人微信小程序已经上线:【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 下载iview2.更新资源3.引入插件4.运行项目 专栏简介 本系列文章由浅入深,从基础知识到实战开发,非常适合入门同学。 零基础读者也能成功由本系列文章入门…

认识事物的几个阶段 GPU学习

1. GPT的说法 认识事物的过程通常可以分为以下几个阶段: 1. 感知阶段: 这是认识事物的第一步,通过感官(视觉、听觉、触觉、味觉、嗅觉)接收外界信息。感知是对外部世界的直接观察和感受。 2. 注意阶段:…

底层day2作业

思维导图 作业: 1.使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度 连接硬件:将光敏电阻与单片机的ADC引脚连接,将LED灯与单片机的PWM引脚连接。初始化:在程序中初始化ADC和PWM模块,并设置相应的…

大数据分析技术工程师CCRC-BDATE

大数据分析技术工程师介绍 大数据始于科技之美,归于创造价值。大数据时代,“谁用好数据,谁就能把握先机、赢得主动”。当下数据驱动的电信、社交媒体、生物医疗、电子政务商务等行业都在产生着海量的数据,随着大规模数据关联、交叉…

@ResponseStatus

目录 概述: 用途: 参数: 注意事项: 自定义异常类: 底层原理: 概述: 在 Spring MVC 中,我们有很多方法来设置 HTTP 响应的状态码其中最直接的方法:使用 ResponseSt…

FolkMQ 作一个简单的消息中间件(最简单的那种)

FolkMQ 打算作一个简单的消息中间件(全球最简单的那种,要比谁都简单!)。追世间简单为何物,可叫我生死相许! 面向简单编程 1) 启动服务 docker run -p 18602:18602 -p 8602:8602 noearorg/folkmq-server:…

K8S之实现业务的蓝绿部署

如何实现蓝绿部署 什么是蓝绿部署?蓝绿部署的优势和缺点优点缺点 通过k8s实现线上业务的蓝绿部署 什么是蓝绿部署? 部署两套系统:一套是正在提供服务系统,标记为 “绿色” ;另一套是准备发布的系统,标记为…

删除指定的数

删除指定的数 题目描述:解法思路:解法代码:运行结果: 题目描述: 先输入10个整数存放在数组中,再输入⼀个整数n,删除数组中所有等于n的数字,数组中剩余的数组保证数组的最前面&#…

向爬虫而生---Redis 探究篇6<Redis的Bigkey问题介绍>

前言: 随着数据规模的增长,Redis的BigKey问题也开始显现。 BigKey问题主要指的是存储了大量数据的key,这可能给Redis的性能和可用性带来负面影响。当一个key的数据量过大时,会占用宝贵的内存资源,拖慢Redis的响应速度。此外,存储和恢复这些BigKey也会变得困难和耗时,增…

SpringBoot项目如何添加全局接口上下文

1. 定义Spring Boot应用的路由 首先,确保您的Spring Boot应用有一个统一的路由前缀。例如,可以在application.properties或application.yml配置文件中使用server.servlet.context-path属性来定义所有请求的基础路径。 # application.properties server…

vue基础教程(4)——深入理解vue项目各目录

博主个人微信小程序已经上线:【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 总览2. node_modules3.public4.src5.assets6.components7.router8.stores9.views10.App.vue11.main.js12.index.html 专栏简介 本系列文章由浅入深,从基础知识到实战…

docker部署若依项目

目录 目录 一、搭建局域 二、redis安装 1.创建目录 2. redis.conf修改 三、MySQL安装 1. 安装 2. 设置远程连接 3. 创建数据库 四、若依后端项目搭建 1. 切换到家目录 2. 上传jar包 3. 上传Dockerfile文件 4. 构建镜像 5. 运行容器 6. 查看运行情况 7. 测试(自己…

AD20软件使用指南:拼板操作与Gerber文件生成详解

文章目录 一、前言二、拼板1.创建新的PCB,用于放置拼板文件2.放置拼板阵列3.设置阵列信息4.V割拼板,放置工艺边和定位孔和光点5.完成拼板 三、生成Gerber文件1.输出Gerber文件2.选择单位和格式3.选择输出的图层4.生成Gerber文件5.生成钻孔文件 四、上传嘉…

01.AJAX 概念和 axios 使用

01.AJAX 概念和 axios 使用 1. 什么是 AJAX ? 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中,使用 AJAX技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端拿…

使用Pandas 玩转透视表(pivot_table)

也许大多数人都有在Excel中使用数据透视表的经历,其实Pandas也提供了一个类似的功能,名为 pivot_table。虽然pivot_table非常有用,但是我发现为了格式化输出我所需要的内容,经常需要记住它的使用语法。所以,本文将重点…