首页 > 其他分享 >2-高级特性

2-高级特性

时间:2023-03-06 22:13:42浏览次数:46  
标签:dubbo 调用 服务 admin 高级 特性 重试 服务提供者

Dubbo高级特性

dubbo-admin管理平台

image

Monitor就是管理中心,但是官方宣布此组件并不完整正在维护中,所以一般采用dubbo-admin组件来进行服务的监控和管理。

  1. dubbo-admin管理平台,是图形化的服务管理页面。
  2. 可以从注册中心最终获取到所有服务提供者和服务消费者进行配置管理。也就是说要先启动dubbo和zk后才能使用dubbo-admin
  3. 可以做路由配置、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能。
  4. dubbo-admin是一个前后端分离项目,前端采用Vue,后端采用spring boot。

安装

  1. 首先需要安装node,然后在github中搜索dubbo-admin,此项目来自apache。

  2. 在./dubbo-admin-server/src/main/resources/application.properties中修改zk的地址:

admin.registry.address=zookeeper://127.0.0.1:2101
admin.config-center=zookeeper://127.0.0.1:2101
admin.metadata-report.address=zookeeper://127.0.0.1:2101
  1. 在项目根目录中通过Maven进行打包:mvn clean package;然后启动jar包 java -jar ./dubbo-admin-distribution/target/dubbo-admin-0.1.jar

  2. 在dubbo-admin-ui中,通过npm run dev进行前端项目的启动。

  3. 通过npm启动后指定的地址,就可以进入admin的首页,默认的用户名和密码都为root:
    image

使用

  1. 在服务列表中可以通过服务名称进行查询,*表示所有服务:
    image

  2. 可以点击服务进行详细信息的查查询,服务信息表示当前服务和使用此服务的消费者服务;元数据表示当前服务所提供的方法的集合和详细信息。服务提供者就是一个dubbo服务,服务消费者需要在一次请求之后才会展示出来。

    默认情况下,服务的元数据是看不到的,需要在生产服务的配置上添加:<dubbo:metadata-report address="zookeeper://127.0.0.1:2181"来将元数据推送到注册中心。

    其中端口号表示服务在Tomcat之外,dubbo自动占用的一个端口:

    image

    如果想修改这个端口号,可以通过修改服务配置文件的方式:

    <dubbo:protocol port="20880"/>
    

    如果在同一个服务器上启动多个dubbo服务,就需要更改此端口以避免端口冲突。

  3. 可以针对某个远程方法在控制台中直接模拟数据进行调用,以检测接口是否可达,以及数据准确性。

序列化

在进行远程方法调用的时候,难免会出现对象传输的情况。消费者发出请求的参数可能是一个对象,生产者返回的数据也可能是一个对象,那这个对象要经历序列化才能完成传输。Dubbo已经自动完成了序列化的工作,开发过程中要协助便捷的完成序列化工作。

image

因为类需要进行序列化,所以都要实现Serializable接口,并且因为多个服务使用的类都是相同的,所以所有的实体类都要抽离到一个独立的模块中,被多个服务依赖共用。

之前已经抽离了一个模块,用来存储所有的service接口,新的模块用于存储所有实体类,包括POJO、VO、DTO和DAO。一般情况下可以让接口模块依赖实体类模块,然后其他服务直接依赖接口模块,间接依赖实体类模块即可。

如果在进行方法调用时候所传输的对象没有实现Serializable接口,会在控制台报错。

地址缓存

如果注册中心出现异常而无法使用,也不会再短期内导致服务调用异常。因为dubbo服务的消费者会在第一次调用的时候缓存服务列表到本地,在未来进行远程调用的时候不会访问注册中心了。

如果服务提供者出现异常或者地址发生改变,注册中心会通知服务消费者更新服务列表。

超时与重试

image

超时

image

服务消费者在进行远程调用服务提供者时,如果发生了阻塞、等待的情况,服务消费者就会一直等待服务的返回。

image

在大量请求服务消费者的时候,就会出现大量无法释放的线程,从而导致服务的异常。

dubbo为了避免服务宕机的情况,采用超时的方式来自动断开与服务提供者的连接,默认1000(毫秒),具体配置在服务提供者的@Service注解上:

@Service(timeout = 3000)
public class ServiceImpl implements IService{
    //...
}

服务超时也会在控制台上显示超时错误日志。

实际上在服务消费者的@Reference注解上也可以配置timeout参数:

@Reference(timeout = 3000)
private UserService service;

如果@Reference注解和@Service注解都配置了超时时间,则Reference会覆盖Service的配置。

通常超时时间按根据服务提供者业务代码的运行时间做预判,从而配置到服务提供方。

重试

如果出现网络抖动(网速不稳定)的情况下出现了超时的情况,就会导致远程调用失败,但是网络会立即恢复,需要重新让服务消费方发送消息。

重试的配置也是在@Services上配置,通过retries属性配置重试次数,默认2次重试,也就是第一次请求之后再发出两次重试请求,一共三次请求。

多版本

image

当服务提供者出现新的功能的时候,需要让服务调用方进行兼容,但是并不是所有服务消费者都一次性的进行版本的切换,而是部分消费者切换并测试没有问题后慢慢的再将旧版本的份额逐渐减小,这被称为灰度发布。

dubbo中使用version属性来设置同一个接口的版本。

首先在服务提供者的@Service接口上进行version属性配置:

@Service(version = "v2.0")

然后在服务调用方的@Reference注解上同样配置version属性:

@Reference(version = "v2.0")
private UserService service;

负载均衡

image

如果一个服务提供者是集群部署的,那一个服务消费者在多个服务中如何选择一个就是负载均衡。

Random随机策略

给每个服务提供者添加一个权重值,当服务消费者进行调用的时候会通过权重值进行随机的选择。如果想让其中一个服务大一点压力,就可以将服务的权重调高一些。

服务提供者:
权重的设置就是在@Service注解上添加weight属性,值选择为100则表示此类中的方法权重为100。

@Service(weight=100)

服务消费者:
在@Reference注解上,使用loadbalance属性指定负载均衡的方案,随机策略值为random。

@Regerence(loadbalance="random")

服务提供方权重的设置是相同的,服务消费方只需要更改loadbalance属性值。

RoundRobin按权重轮询

进行轮询的时候,权重越高被轮询到的次数越多。第一轮轮询将轮询全部的服务,第二轮将轮询所有服务中权重较高的服务,而忽略权重最低的服务,以此类推。

LeastActive最少活跃调用数

根据每个服务最后一次处理请求的时间进行排序,优先选择最快响应的服务,相同速度响应的服务采用随机的方式。

ConsistentHash一致性Hash

相同参数的请求将发送到同一个服务提供者。

集群容错

容错也就是当服务的调用出现报错之后,如何去做下一步操作。

容错的设置要在服务消费方的@Reference注解的cluster属性上进行设置。

Failover Cluster:失败重试,也就是此前在超时重试一章中讲到的。重试是默认的容错机制,当出现失败的时候会重试其他服务器,默认重试两次,或者通过@Sertice注解的retries属性进行配置。

重试操作通常用于查询操作,因为重复的查询不会造成数据的更改,但是重复的增删改却极有可能导致数据错误。

重试机制的cluster属性值为failover。

Failfast Cluster:快速失败,也就是在失败后不做任何操作,此请求只允许执行一次。通常用于写操作。

Failsafe Cluster:失败安全,也就是在调用导致报错了以后直接忽略报错,返回一个空结果。通常用于日志或者其他价值不高的操作。

Failback Cluster:失败自动恢复,当服务发送失败以后会自动恢复,直到请求正常返回。

Forking Cluster:并行的调用多个服务器,只要一个服务器成功就返回成功结果。这种操作比较消耗性能。

Broadcast Cluster:广播调用所有服务提供者进行逐个调用,任何一个服务报错都将导致报错。

具体关于容错的细节可参见dubbo官方文档。

服务降级

服务降级也就是表示将次要的服务进行停用或者屏蔽掉次要服务的异常。

所有关于服务降级的设置都在服务消费者的@Reference注解上进行设置:

  • @Reference(moke = "force:return null"):停止对此注解注入的服务的调用,所有调用直接返回null值。用来屏蔽不可用的服务。

  • @Reference(moke = "fail:return null"):如果消费方在调用此注解注入的服务的方法的时候,方法内抛出了异常则返回null,并且不会抛出异常到消费方。用来容忍不重要的服务在不稳定时期的调用结果。

标签:dubbo,调用,服务,admin,高级,特性,重试,服务提供者
From: https://www.cnblogs.com/agoodjavaboy/p/17183220.html

相关文章

  • Serializer高级用法之source和SerializerMethodField
    __str__实例化对象效果1:    __str__实例化对象效果2:    Serializer高级用法总结:    序列化中的source用法_1.重定义返回前端字段名:  ......
  • Apinto V0.12 发布:新增流量镜像与 Mock 插件,路由特性更丰富!
    Hello~各位开发者朋友们好呀,Eolink旗下开源网关Apinto本周又更新啦!这次的更新我们给大家带来了2个好用的插件,且目前已经支持静态资源路由了!希望新的功能能让大家的......
  • kepware高级插件IOT Gateway_Rest Client和NodeRed实操
    1,安装Kepware软件,使用Iot高级插件需要有Java环境,下载地址为: https://www.oracle.com/文件名称为:jdk-7u79-windows-i5862,RestClient配置     ......
  • clickhouse高级功能之MaterializeMySQL详解
    clickhouse20.8将新增MaterializeMySQL引擎,可通过binlog日志实时物化mysql数据,极大提升了数仓的查询性能和数据同步的时效性;原有mysql中承担的数据分析工作可交由click......
  • 一张图看懂CodeArts Repo 6大特性,带你玩转代码托管服务
    华为云CodeArtsRepo是华为全栈自研的代码托管服务,基于Git提供分布式代码管理和协同开发能力,包括成员管理、权限控制、代码托管、代码检查、代码审核、代码追溯、持续集成......
  • ctfshow web入门 php特性 96-99
    96-99均采用弱比较的方式获取flag重点了解md5弱类型比较与强类型了解if语句简写了解in_array()缺点web96highlight_file(__FILE__);if(isset(......
  • 03-Redis系列之-高级用法详解
    慢查询生命周期我们配置一个时间,如果查询时间超过了我们设置的时间,我们就认为这是一个慢查询.慢查询发生在第三阶段客户端超时不一定慢查询,但慢查询是客户端超时的一个......
  • 02-Redis系列之-架构和高级API的使用
    通用部分通用命令#1-keys#打印出所有keykeys*#打印出所有以n开头的keykeysn*#打印出所有以nam开头,第四个字母是a到z的范围keysnam[a-z]#四位长度,以n开......
  • Day02.MYSQL高级语法
    MYSQL基础语法回顾MySQL管理数据库创建数据库CREATEDATABASEIFNOTEXISTS数据库名;删除数据库DROPDATABASE数据库名;表的管理查看所有表use数据库名;选......
  • Day03.mysql高级_函数和索引
    day03-mysql高级学习网站:索引高级:https://www.bilibili.com/video/BV1MS4y1T7uJ?from=search&seid=5032261320934971179&spm_id_from=333.337.0.0hashmap:https://www.......