电子商务网站建设期末作业长沙简单的网站建设

当前位置: 首页 > news >正文

电子商务网站建设期末作业,长沙简单的网站建设,免费的个人简历模板可手机编辑,网站怎样做平面设计图目录 一、介绍1、Dubbo是什么2、为什么需要Dubbo3、Dubbo的特性 二、 Dubbo的核心概念1、暴露和引用#xff08;Export and Refer#xff09;2、服务提供者和服务消费者3、注册中心4、负载均衡5、集群容错 三、Dubbo的架构1、服务提供者和服务消费者之间的通信流程2、Dubbo的… 目录 一、介绍1、Dubbo是什么2、为什么需要Dubbo3、Dubbo的特性 二、 Dubbo的核心概念1、暴露和引用Export and Refer2、服务提供者和服务消费者3、注册中心4、负载均衡5、集群容错 三、Dubbo的架构1、服务提供者和服务消费者之间的通信流程2、Dubbo的三层架构3、Dubbo的扩展机制 四、Dubbo的配置1、XML配置2、注解配置3、属性配置 五、Dubbo的高可用与容错1、服务降级2、服务熔断3、服务隔离4、重试机制 六、 Dubbo的负载均衡策略1、轮询负载均衡2、随机负载均衡3、最少活跃调用负载均衡4、一致性哈希负载均衡 七、Dubbo的集群容错机制1、失败自动切换2、失败安全保护3、并行调用4、快速失败 八、Dubbo的底层通信1、Dubbo的网络通信2、序列化和反序列化 九、Dubbo的扩展机制1、自定义SPI扩展2、自定义过滤器3、自定义负载均衡策略 十、总结1、Dubbo的优缺点2、Dubbo的未来发展趋势 大家好我是哪吒。 Dubbo是一个高性能的Java RPC框架。RPC是远程过程调用的缩写其基本思想是客户端像调用本地方法一样通过网络请求调用远程服务器上的服务。Dubbo可以帮助我们更方便地构建分布式应用程序它具有高效的远程调用、服务自动注册和发现、负载均衡、容错机制等众多特性是企业级应用中可靠的基础架构。本文将从以下十个方面介绍Dubbo。 一、介绍 1、Dubbo是什么 Dubbo是一种高性能、轻量级的分布式服务框架它的设计目标是为大规模分布式应用提供支持。Dubbo由阿里巴巴提供最初由Alibaba Dubbo Team开发目前已经成为Apache基金会的顶级项目。Dubbo在国内得到了广泛的应用像阿里巴巴、京东、美团等众多互联网企业都在使用该框架。 2、为什么需要Dubbo 在分布式系统中服务之间相互依赖非常复杂需要大量的通信和协调。Dubbo可以帮助我们更方便地构建分布式应用程序它具有高效的远程调用、服务自动注册和发现、负载均衡、容错机制等众多特性。通过Dubbo我们可以更方便地实现服务治理、服务调用链追踪、服务降级、服务熔断等重要功能。 3、Dubbo的特性 Dubbo最重要的特性包括 高效的远程调用支持多种传输协议、序列化协议和集群容错机制可扩展的服务自动发现支持多种注册中心丰富的负载均衡策略支持轮询、随机、最少活跃调用等多种策略灵活的集群容错机制支持多种容错策略多协议支持Dubbo同时支持dubbo://、http://和hessian://等多种协议。 二、 Dubbo的核心概念 1、暴露和引用Export and Refer Dubbo的暴露和引用是通过ProviderConfig和ConsumerConfig实现的ProviderConfig是服务提供者配置类可以用于配置服务的接口、服务实现类、协议等还可以设置暴露服务所用的协议、权重、端口号等信息。ConsumerConfig是服务消费者配置类可以用于配置服务消费者所接口、协议等信息还可以设置引用服务所用的协议、集群等信息。 暴露过程中首先需要解析配置根据配置中的协议创建相应的协议实现将协议绑定到指定的 IP 和端口上将服务地址信息注册到注册中心以供其他调用者查询通知订阅者监听器服务地址信息的变化调用者接收到订阅者的通知得知服务地址信息变化调用者通过网络层向提供者发起调用请求提供者处理请求后返回结果给调用者。 引用的过程类似只是方向相反具体如下 引用过程中同样需要解析配置根据配置中的协议创建相应的协议实现连接到指定的服务地址查询注册中心获取对应服务地址信息返回服务地址信息给调用者提供者处理调用请求返回结果给调用者调用者接收到结果结束调用过程。 2、服务提供者和服务消费者 Dubbo的服务提供者是指提供服务的主体通常会暴露自己的服务接口并通过某种协议提供服务。而服务消费者是使用服务的主体通常会引用提供者的服务接口并通过某种协议调用服务。 服务提供者向 Zookeeper 注册服务服务消费者向 Zookeeper 订阅服务服务消费者通过 Zookeeper 获取服务提供者的地址信息然后调用服务提供者的服务。 3、注册中心 Dubbo最核心的概念就是注册中心它用于管理服务提供者的注册与发现使服务消费者能够动态地发现和访问服务提供者。Dubbo支持多种注册中心包括Zookeeper、Redis、Multicast等等其中Zookeeper是Dubbo默认的注册中心。 服务提供者将自己提供的服务注册到注册中心。 服务消费者从注册中心订阅所需的服务列表。 注册中心返回可用的服务列表给服务提供者和服务消费者。 服务消费者调用服务提供者的服务。 服务提供者返回服务结果给服务消费者。
4、负载均衡 Dubbo 的负载均衡是指服务消费者在调用服务提供者的时候如何从多个服务提供者中选择一个进行调用。Dubbo 默认提供了多种负载均衡策略例如随机、轮询、最少活跃数等。服务消费者通过 Dubbo 的负载均衡模块将请求分发给多个服务提供者然后由负载均衡模块根据选定的负载均衡策略选择一个服务提供者进行调用从而达到分摊负载的效果。 在图中服务消费者 A 需要调用一个服务提供者但是有多个服务提供者可供选择这时候负载均衡 B 就发挥作用了。B 会根据负载均衡策略选择一个服务提供者进行调用例如选择了服务提供者1 C。如果 C 发生故障或宕机B 就会重新选择一个可用的服务提供者例如选择了服务提供者2 D。这样服务消费者 A 就可以通过 Dubbo 的负载均衡模块动态地选择服务提供者从而实现负载均衡。 5、集群容错 Dubbo的集群容错是指当服务提供者发生故障时Dubbo如何从备选节点中选择一个可用的节点让服务消费者访问。Dubbo提供了多种集群容错策略包括快速失败、失败切换、失败重试等等可以根据需求选择适合的策略。 Consumer服务的消费者发起服务调用的一方。InvokerDubbo 中的调用器将消费者的请求转换成可执行的任务并执行。ClusterDubbo 中的集群容错模块将多个 Invoker 封装成一个集群。FailoverDubbo 集群容错模块中的容错策略之一如果某次调用失败会自动切换到下一个 Invoker 进行调用直到成功为止。FailfastDubbo 集群容错模块中的容错策略之一如果某次调用失败会立即抛出异常。FailsafeDubbo 集群容错模块中的容错策略之一如果某次调用失败会记录下异常但不会抛出异常。FailbackDubbo 集群容错模块中的容错策略之一如果某次调用失败会在后台异步重试。ForkingDubbo 集群容错模块中的容错策略之一将请求并发调用多个 Invoker只要有一个 Invoker 成功返回结果就立即返回。 三、Dubbo的架构 1、服务提供者和服务消费者之间的通信流程 在Dubbo中服务提供者和服务消费者之间的通信流程较为复杂涉及到多个角色的交互。下面简要介绍Dubbo的通信流程 服务消费者向注册中心发起服务发现请求获取服务列表。注册中心返回服务列表给服务消费者。服务消费者根据负载均衡策略选择一个服务提供者。服务提供者返回自身的 IP 地址和端口号给服务消费者。服务消费者通过网络向服务提供者发送请求消息。服务提供者处理请求并返回响应消息给服务消费者。 整个通信流程中Dubbo使用了类似RPCRemote Procedure Call的方式进行通信即服务消费者发送请求给服务提供者服务提供者返回结果给服务消费者。Dubbo的主要区别在于Dubbo支持多种协议和序列化机制同时还提供了负载均衡、集群容错等功能。 2、Dubbo的三层架构 Dubbo的三层架构包括 1接口层 接口层是Dubbo的核心它定义了服务提供者和服务消费者之间的通信接口。在Dubbo中接口默认使用Java接口实现具有很强的可扩展性。 2配置层 配置层的作用是通过配置文件或代码来配置Dubbo的各种参数包括连接参数、超时时间、重试次数等等。Dubbo支持多种配置方式包括XML配置、注解配置和属性配置。 3基础设施层 基础设施层是Dubbo的底层架构包括了Dubbo的RPC框架、网络通信、序列化和反序列化等实现细节。Dubbo的基础设施层具有较高的性能和可定制性。 3、Dubbo的扩展机制 Dubbo提供了较为完善的扩展机制使得开发者可以轻松改变Dubbo的默认行为实现个性化定制。 Dubbo的扩展机制主要有三种 1SPI机制 Dubbo使用了SPIService Provider Interface机制开发者可以通过在class path下提供指定的接口实现类来替换Dubbo框架默认的实现。在Dubbo中SPI机制通过Java的ServiceLoader实现。 2Adaptive机制 Dubbo的Adaptive机制是对SPI机制的一种补充它可以根据不同的场景自动适配最合适的实现类。Adaptive机制通过动态生成的代理类来实现。 3Extension机制 Extension机制是Dubbo的核心扩展机制它允许开发者自定义Dubbo的各种插件包括Protocol、Transport和Serialization等。Extension机制通过SPI和Adaptive注解实现。开发者可以通过实现指定接口和在注解中指定拓展名来实现自定义插件的加载和使用。 四、Dubbo的配置 1、XML配置 Dubbo的XML配置是最早的配置方式在配置过程中需要编写XML文件指定Dubbo相关的标签和属性。其中最基本的配置是服务提供者和服务消费者的相关配置如下 !– 服务提供者注册到注册中心 – dubbo:registry addresszookeeper://127.0.0.1:2181/!– 暴露服务 – dubbo:service interfacecom.xxx.xxxService refxxxServiceImpl timeout3000 /!– 引用服务 – dubbo:reference interfacecom.xxx.xxxService idxxxService timeout3000 /在这段XML配置中我们首先在标签中指定了注册中心的地址信息然后在标签中指定了服务提供者的接口和实现类以及引用服务的接口和实现。timeout属性用于设置超时时间。 除了服务提供者和服务消费者的相关配置外还有其他相关的配置。比如可以使用dubbo:protocol标签指定Dubbo使用的协议类型和端口号同时也可以在dubbo:method标签中为方法单独指定超时时间等参数。 2、注解配置 注解配置是一种比较简便的配置方式可以直接在Java代码中使用注解指定Dubbo相关的配置信息。使用注解配置时需要在配置类中添加EnableDubbo注解开启Dubbo相关功能示例如下 Configuration EnableDubbo(scanBasePackages com.xxx.service.impl) public class DubboConfig { }其中scanBasePackages属性指定了Dubbo扫描的包路径。然后就可以在服务提供者和服务消费者的实现类中使用Dubbo提供的注解进行配置示例如下 Service(timeout 3000) public class XxxServiceImpl implements XxxService {Overridepublic String hello(String name) {return Hello name;} }对于服务消费者则可以使用DubboReference注解引用服务示例如下 Service public class XxxConsumer { DubboReference(timeout 3000) private XxxService xxxService;public String hello(String name) {return xxxService.hello(name); } }在这个例子中我们使用DubboReference注解指定了服务的接口和超时时间然后在XxxConsumer类中通过xxxService调用服务。 3、属性配置 属性配置是一种比较灵活的配置方式它允许我们在配置文件中定义属性然后在代码中读取这些属性并进行相关操作。使用属性配置时我们需要在代码中创建一个DubboProperties对象并将其中的属性值通过ConfigurationProperties注解注入到该对象中。示例如下 Component ConfigurationProperties(prefix dubbo) public class DubboProperties { private String registryAddress;// get/set方法省略 }然后我们可以使用这个DubboProperties对象中定义的属性配置Dubbo相关的参数示例如下 Service(timeout #{dubboProperties.timeout}) public class XxxServiceImpl implements XxxService {Autowired private DubboProperties dubboProperties;Override public String hello(String name) {return Hello name; } }在这个例子中我们使用了#{dubboProperties.timeout}的方式读取DubboProperties对象中的timeout属性来指定服务超时时间。我们还可以在DubboProviders对象中定义其他属性在需要的地方使用${}的方式读取这些属性。 五、Dubbo的高可用与容错 1、服务降级 服务降级指的是当系统出现故障或者异常情况时系统可以通过关闭一些非核心的功能来保证其他核心功能的正常运行。Dubbo提供了服务降级的功能通过这个功能Dubbo可以在某些条件下提供替代方案比如返回空结果、返回默认结果等等。 Dubbo的服务降级是通过Mock来实现的Mock可以在接口定义的时候指定。Dubbo在正常情况下会使用服务提供者提供的服务当服务提供者出现异常或者超时时Dubbo会自动调用Mock中的方法返回预设的值。 2、服务熔断 服务熔断是指当系统中某个服务出现异常或者超时等情况时Dubbo会在一定时间内暂停对该服务的调用防止服务雪崩提高系统的可用性。Dubbo支持配置熔断的时间窗口和请求的最大失败次数当超过这个次数后Dubbo将不再调用该服务直到时间窗口结束。 Dubbo的服务熔断是通过circuit breaker模式来实现的Dubbo会根据服务的负载情况来判断是否需要熔断。 3、服务隔离 服务隔离指的是将不同的服务放在不同的进程或者容器中运行防止某个服务出现故障影响到其他服务的正常运行。Dubbo支持将不同的服务放在不同的进程或者容器中运行实现服务的隔离。 4、重试机制 重试机制指的是在服务调用失败后Dubbo会根据一定的规则进行重试直到服务调用成功或达到最大重试次数。Dubbo可以配置重试次数、重试间隔时间等参数实现重试机制。 Dubbo默认提供了重试机制可以通过在配置文件中设置retries参数来启用。如果服务调用失败则Dubbo会自动重新尝试调用服务直到达到最大重试次数或服务调用成功。重试过程中Dubbo会等待一定的时间间隔以避免对服务的过度压力。 六、 Dubbo的负载均衡策略 1、轮询负载均衡 轮询负载均衡算法是默认的算法它会将服务提供者列表按照顺序轮流选择。如果其中一个服务提供者的性能较差那么使用轮询算法会导致它会被频繁地请求从而降低整体性能。因此轮询算法适用于所有服务提供者性能相同的情况下。 2、随机负载均衡 随机负载均衡算法可以随机选择一个服务提供者来处理请求。与轮询算法相比随机算法并不考虑服务提供者之间的负载或性能因此速度更快。但是在某些情况下服务提供者之间的负载差异太大随机算法可能会导致某些服务提供者接受过多的请求。因此随机算法适用于所有服务提供者性能相同的情况下或服务提供者之间的性能差异较小的情况下。 3、最少活跃调用负载均衡 最少活跃调用Least Active是一种智能负载均衡算法。该算法会选择活跃调用数最少的服务提供者来处理请求也就是当前正忙碌程度最小的服务提供者。这种算法适合那些提供长时间服务的服务者比如像查询某种缓存服务查询开始不占用太多服务器资源但是随着查询次数增加会占用 相当多的服务端资源这时候使用Least Active算法可以选取负载最小的服务提供者避免资源过度占用。 4、一致性哈希负载均衡 一致性哈希负载均衡是一种智能负载均衡算法在分布式场景下可以保证负载均衡和数据一致性。该算法会将所有服务提供者看作一个环每个服务提供者对应一个独特的哈希值。对于一个请求一致性哈希算法通过哈希值将其映射到服务提供者环中的一个位置然后选择服务提供者环上第一个顺时针方向遇到的服务提供者来处理请求。该算法优点在于当新增或删除一个服务提供者时仅需重新映射部分请求到新的服务提供者而不是全部请求从而避免了大规模迁移可以提高系统的稳定性和扩展性。 七、Dubbo的集群容错机制 1、失败自动切换 在调用服务时Dubbo会选择一个可用的服务提供者如果该提供者未响应或发生异常Dubbo会自动切换到下一个可用的服务提供者进行调用这就是失败自动切换机制。 2、失败安全保护 在失败自动切换的基础上Dubbo提供了另一种集群容错机制失败安全保护。它的原理是当出现某个服务提供者不可用时Dubbo会暂时禁用该服务提供者一段时间后再次开启检查其可用性。通过这种方式Dubbo保证了系统的稳定性以及在出现异常情况时调用的可用性。 3、并行调用 Dubbo在集群容错中提供了一种新的机制并行调用。当服务提供者在某个时间段内不能响应请求时Dubbo会开启多个服务提供者实例将请求发送给这些实例进行并行处理快速的获取结果并返回给服务消费者。 4、快速失败 快速失败机制指当某个服务提供者出现异常时Dubbo会快速的抛出异常给服务消费者避免服务调用者长时间等待请求响应结果。同时Dubbo也提供了一个超时时间如果服务提供者在规定时间内未能响应请求则Dubbo会快速的抛出异常给服务消费者避免请求长时间等待没有响应结果。 八、Dubbo的底层通信 1、Dubbo的网络通信 Dubbo的底层通信是建立在Netty的通信框架上的Netty是一个高性能的、异步的、事件驱动的网络应用程序框架。在Dubbo中Netty扮演着很重要的角色其提供的通信能力能够支持Dubbo不同节点之间的通信并且通过高效的I/O操作完成请求响应的过程。Dubbo利用Netty的通信框架实现了从网络层到协议层的完整封装使得Dubbo的通信效率得到很大的提升。 Dubbo的网络通信过程是非常复杂的在服务提供者和服务消费者之间建立连接并进行请求响应的过程中每一步都可能出现各种问题例如网络延迟、服务端宕机、序列化错误等等因此Dubbo在网络通信过程中加入了多种机制来提高网络通信的效率和安全性。其中比较重要的机制包括心跳机制、序列化与反序列化、长连接池等等。 2、序列化和反序列化 Dubbo利用Java自带的ObjectInputStream和ObjectOutputStream类实现序列化和反序列化的过程通过序列化和反序列化使得复杂的对象能够在网络中传输。 Dubbo支持多种序列化协议包括Java原生的序列化协议即Dubbo协议、JSON、Hessian、Kryo等。Dubbo默认采用Java原生的序列化协议虽然其具有很好的兼容性但是其性能较差。因此通常情况下建议使用其他的序列化协议例如Hessian或Kryo以提高序列化的效率。 九、Dubbo的扩展机制 1、自定义SPI扩展 Dubbo采用SPIService Provider Interface的机制用于扩展或替换框架中的某个实现。Dubbo对SPI机制的扩展可以通过Java的SPI机制实现也可以通过Dubbo自己定义的SPI机制实现Dubbo自己定义的SPI机制要完善一些。 Dubbo自定义的SPI机制定义了一个扩展点接口每个扩展点接口对应了一组扩展实现类而这些实现类都必须要使用SPI的配置文件进行配置。 Dubbo的扩展点接口中我们可以定义类似于ExtensionLoader这样的类通过这些类我们可以获取到相关扩展实现类从而进行自定义的扩展。 2、自定义过滤器 Dubbo的过滤器是一种拦截器可以在请求到达消费者时、在提供者执行服务逻辑前后以及在调用方收到响应时对请求和响应进行处理。Dubbo提供了一些内置的过滤器例如安全过滤器、异常过滤器、日志过滤器等。 不过Dubbo也允许我们自定义过滤器来实现自己的特定需求自定义的过滤器需要实现Filter接口然后通过SPI机制进行扩展。 自定义的过滤器可以用于多种场景例如监控、鉴权、统计和日志等。 3、自定义负载均衡策略 Dubbo框架内置了多种负载均衡策略例如随机负载均衡、轮询负载均衡和最少活跃调用负载均衡等。但是这些负载均衡策略并不一定适用于所有的场景因此Dubbo也允许我们自定义负载均衡策略。 自定义负载均衡策略需要实现LoadBalance接口然后通过SPI机制进行扩展。自定义负载均衡策略可以根据不同场景的需求实现不同的算法和逻辑从而更好地满足业务需求。 十、总结 1、Dubbo的优缺点 Dubbo是阿里巴巴公司开发的一款高性能、高可用的分布式服务框架。在分布式架构中Dubbo担任着重要的角色实现了服务的注册、发现、负载均衡、容错等功能为分布式系统提供了更好的可扩展性和可维护性。 同时Dubbo也存在一些优缺点。首先Dubbo具有较强的可定制化性可以根据实际业务需求来选择不同的配置和扩展机制。其次Dubbo的性能表现出色适用于高并发、大规模的分布式系统。但是Dubbo也存在一些问题比如复杂的部署和配置流程限制了其在小型项目中的应用。 2、Dubbo的未来发展趋势 未来Dubbo将会继续发展和改进市场对Dubbo的需求也将继续增加。除了更新迭代Dubbo还将更加注重安全、大数据等领域的拓展和应用。总的来说Dubbo在分布式架构中的地位和应用前景都非常广阔。 本文收录于Java进阶教程系列。 全网最细Java零基础手把手入门教程系列课程包括基础篇、集合篇、Java8新特性、多线程、代码实战持续更新中每周1-2篇适合零基础和进阶提升的同学。 哪吒多年工作总结Java学习路线总结搬砖工逆袭Java架构师。