1.什么是Dubbo?
Dubbo是一款高性能分布式服务框架,由阿里巴巴开发并开源发布。它支持多种协议,如dubbo、HTTP、Hessian、Thrift等,可以很好地解决分布式服务中的服务治理问题,提供了服务注册、发现、负载均衡、容错等功能,可以帮助开发者搭建高性能、高可靠、高可用的分布式服务系统。Dubbo已成为当前国内使用最广泛的分布式服务框架之一。
2.Dubbo的架构
节点角色说明:
•Provider: 暴露服务的服务提供方•Container: 服务运行容器•Consumer: 调用远程服务的服务消费方•Registry: 服务注册与发现的注册中心•Monitor: 统计服务的调用次数和调用时间的监控中心
3.Dubbo快速入门
在入门之前先要介绍一下另一个好东西zookeeper
Dubbo官方推荐使用Zookeeper作为注册中心
它和dubbo是什么关系呢?
答:
Dubbo和Zookeeper是两个不同的系统,但它们通常一起使用以实现分布式服务的注册、发现和治理。
在Dubbo中,服务提供者向Zookeeper注册自己的服务地址,服务消费者通过Zookeeper发现可用的服务提供者地址,然后调用服务。如果服务提供者宕机或者注册中心中的服务列表变化,Zookeeper会通知消费者进行更新。
因此,Zookeeper在Dubbo中被用作服务注册和发现中间件,同时也被用于Dubbo的路由、负载均衡和容错机制的实现。Dubbo和Zookeeper的结合,可以让开发人员更方便地搭建分布式服务系统。
实现步骤
1. 创建 服 务提供者 Provider 模块2. 创建服务消费者 Consumer 模块3. 在服务提供者模块编写 UserServiceImpl 提供服务4. 在服务消费者中的 UserController 远程调用 UserServiceImpl 提供的服 务5.分别启动两个服务,测试
4.Dubbo的高级特性
(1)dubbo-admin管理平台
1. d ubbo- a dmin 管理平台,是图形化的服务管理页面2. 从注册中心中获取到所有的提供者 / 消费者进行配置管理3. 路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能4. d ubbo- a dmin 是一个前后端分离的项目。前端使用 vue ,后端使用 springboot5.安装 dubbo-admin 其实就是部署该项目
(2)常用高级配置
先提问
两个机器传输数据,如何传输java对象?答:
在两台机器之间传输Java对象,有多种实现方式,下面列举三种比较常用的方式:
1. 基于Java序列化机制传输对象。Java中的所有对象都实现了Serializable接口,可以通过序列化的方式将对象转换成二进制流进行传输。接收方再将接收到的二进制流反序列化为对象。Java提供了一系列的序列化、反序列化API,比如ObjectOutputStream、ObjectInputStream、ByteArrayOutputStream、ByteArrayInputStream等,可以实现对象的序列化和反序列化操作。但是这种方式的缺点是Java序列化的压缩率不高,数据传输效率不高,且不同Java版本之间的序列化兼容性会有问题。
2. 基于JSON格式传输对象。Java中的对象可以通过JSON格式进行序列化和反序列化,可以使用一些第三方库如Jackson、GSON、FastJSON等实现Java对象和JSON之间的转换。这样的传输方式一般适合数据简单的场景,但是对象结构过于复杂的情况下,JSON格式可能不够灵活、不易读懂。
3. 基于二进制协议传输对象。如使用Google开发的Protocol Buffer(protobuf)等工具。protobuf是一种高效、灵活的数据传输格式,可以序列化和反序列化一个包含结构化数据的对象,可用于通信协议、数据存储等场景。由于protobuf采用二进制格式,所以传输效率非常高。但是使用protobuf需要定义类型并编写.proto文件,对开发人员的技能要求较高。
总体来说,选择何种方式主要取决于对象的复杂程度、数据传输的效率要求、数据压缩率的要求、开发成本等多种因素。
大多是采用java 的序列化方式。
实现序列化接口 implements Serializable
(3)地址缓存
还是先提问
注册中心不工作了,还可以访问服务嘛?
答:
在 Dubbo 中,所有的服务提供者和消费者都需要通过注册中心发现彼此,建立连接,进行通信。因此,如果注册中心不工作了,服务提供者和消费者之间无法建立连接,无法进行通信。
在这种情况下,如果服务提供者和消费者之间已经建立了连接,那么可以继续进行通信,但如果有新的服务提供者或者消费者加入,就无法实现自动发现和注册。
为了解决这个问题,Dubbo 提供了一种叫做本地缓存的机制。当注册中心不可用时,本地缓存会自动生效,保证已经建立连接的服务提供者和消费者之间可以继续通信。但是,这种方式只对已经建立连接的服务提供者和消费者有效,对于新的服务提供者和消费者,需要手动去更新本地缓存,才能实现通信。因此,当注册中心不工作时,最好及时修复,避免影响整个系统的稳定性和可靠性。
所以是可以,因为dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后在调用则不会访问注册中心。当服务提供者地址发生变化时,注册中心会通知服务消费者。
(4)解决雪崩问题
还是先提问,什么是雪崩问题?
答:
雪崩问题(Avalanche Effect)是指当系统中的某个组件或服务出现故障或崩溃时,导致连锁反应,使整个系统不可用的现象。
在分布式系统中,一个服务的故障可能会影响到其它服务,甚至整个系统。如果这些故障是相互关联的,它们可能会迅速扩大,像雪崩一样,最终导致整个系统崩溃。这种现象被称为雪崩效应。
雪崩问题通常发生在高并发、大规模的分布式系统中,主要是由于不同服务之间的依赖性不当,或者是由于数据访问压力过大,导致某个服务或组件出现故障。
为了避免雪崩问题的发生,可以采取以下措施:
1. 实现高可用性:通过多个实例或节点提供相同的服务,从而在一个实例或节点出现故障时,其他实例或节点可以继续提供服务。
2. 实现负载均衡:通过负载均衡策略将请求分配到不同的服务实例或节点中,避免单个实例或节点承受过大的访问压力。
3. 设置限流策略:通过限制并发访问量或请求频率,控制数据访问的压力,避免某个服务出现过载情况。
4. 实现容错机制: 在系统中设置 fallback 机制,当某个服务不可用时,能够快速切换到备用服务,减少对整个系统的影响。
这里为了防止雪崩问题的出现,dubbo可以采用超时机制来解决这个问题。设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接
使用timeout属性配置超时时间,默认值1000,单位毫秒
(5)负载均衡
什么是负载均衡?
答:
Dubbo 提供了多种负载均衡算法,用于将服务请求分发到多个服务提供者实例上,以实现服务调用的负载均衡和容错处理。
在 Dubbo 中,负载均衡是指根据一定的规则和算法,在多个服务提供者实例之间分发服务请求。Dubbo 提供了多种负载均衡算法,例如:随机负载均衡、轮询负载均衡、最少活跃调用数负载均衡、一致性哈希负载均衡等。
通过选择合适的负载均衡算法,可以优化服务请求的分发策略,从而提高系统的性能和容错性。同时,Dubbo 还提供了配置自定义的负载均衡算法的功能,让用户可以根据自己的需求进行配置和扩展。
(6)集群容错
Dubbo 是一个分布式服务框架,为了保证服务的可用性和稳定性,Dubbo 提供了一些容错机制来应对服务失败和异常情况。
在 Dubbo 集群中,容错机制主要包括以下几种:
1. Failover Cluster,该集群容错机制是默认的容错机制,它会在出现异常或失败时自动重试其他服务提供者。
2. Failfast Cluster,该集群容错机制会尽快失败,不会重试其它服务提供者。
3. Failsafe Cluster,该集群容错机制会忽略异常或失败,始终正常返回。
4. Failback Cluster,该集群容错机制会在出现异常或失败时记录失败的请求,并在服务恢复后重传。
5. Forking Cluster,该集群容错机制会并行调用多个服务提供者,只有第一个返回结果的服务提供者的结果会被返回。
6. Broadcast Cluster,该集群容错机制会将请求广播给所有的服务提供者,只要有一个服务提供者正常返回结果,就立即返回。
通过选择合适的集群容错机制,在 Dubbo 集群中可以更好地解决服务失败和异常情况,提高系统的可用性和稳定性。
结语
dubbo快速入门完毕,下班
┏(^0^)┛