03分布式之dubbo高级特性


1.dubbo-admin管理平台

  • dubbo-admin管理平台,是图形化的服务管理界面
  • 从注册中心获取到所有的提供者/消费者进行配置管理
  • 路由规则、动态配置、服务降级、访问控制、权重调整、负载均衡等管理功能
  • dubbo-admin是一个前后端分离的项目。前端使用vue,后端使用springboot
  • 安装dubbo-admin其实就是部署该项目
    下载链接

安装:

  1. 进入dubbo-admin-server中的application.properties中修改zookeeper地址
  2. 进入项目根目录打开cmd运行指令mvn clean package
    (容易踩得坑:安装一半ctrl+c退出后,再次执行mvn clean package命令时如果遇到哪个压缩包报错毫不犹豫删除。)
  3. 打包成功后进入distribution的target文件夹下找到打包好的jar包执行。(java -jar)
  4. 进入ui使用npm run dev执行
  5. 访问

2.常用高级配置

2.1序列化

两个机器传输数据,传输java对象时必须对该类实现Serializable,从而使对象通过管道进行流传输。

2.2地址缓存

dubbo服务消费者在第一次调用时,会将服务提供方地址缓存到本地,以后再调用不会访问注册中心。

2.3超时与重试

  • 服务消费者在调用服务提供者的时候发生了阻塞、等待的情形,这个时候,服务消费者会一直等待下去。
  • 在某个峰值时刻,大量的请求都在同时请求服务消费者,会造成线程的大量堆积,势必会造成雪崩。
  • dubbo利用超时机制来解决这个问题,设置一个超时时间,在这个时间段内,无法完成服务访问,则自动断开连接。

timeout:超时时间单位毫秒

retries:重启次数

image-20210828190253623

image-20210828204126133

如果Reference和Service都配置都生效。

建议配置在Service上面

  • 如果仅仅有超时还不行,如果出现网络抖动这一次请求就会失败。所以需要通过retries属性来设置重发次数(默认两次)

2.4 多版本

利用version属性
reference(version=”1.0”)
Service(version=”1.0”)
从而调用同一个服务的不同版本。

2.5负载均衡

2.5.1负载均衡的策略:(4种)

image-20210828212905350

  • Random: 按权重随机,默认值。按权重设置随机概率。
    通过给同一个服务的权重设置不同的值:
    Service(weight=100)
    控制器当中注入服务的注解Reference中添加属性loadbalance,属性值有:
  1. ConsistentHashLoadBalance:consistentcash:一致性的Hash,相同参数值的请求总是发给统一提供者
  2. LeastActiveLoadBalance:leastactive:按最少活跃调用数,相同活跃数的随机。
  3. RandomLoadBalance:random:按权重随机
  4. RoundRobinLoadBalance:roundrobin:按权重轮询

    2.6集群容错

    防止某个服务宕机会按照策略方式访问别的方式访问别的服务
    控制器当中注入服务的注解Reference中添加属性cluster
  • Failover Cluster(默认):
    失败自动切换,当出现失败,重试其它服务器 [1]。通常用于读操作,但重试会带来更长延迟。可通过 retries=”2” 来设置重试次数(不含第一次)。

  • Failfast Cluster:
    快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。哪一条失败,立刻停。

  • Failsafe Cluster:
    失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。(不重要的操作)

  • Failback Cluster:
    失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。(强制调用关系)

  • Forking Cluster:
    并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=”2” 来设置最大并行数。(广撒网)

  • Broadcast Cluster:
    广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。(逐个调用)

注:我理解的集群容错应当是在负载均衡基础上的,负载均衡首先选择了某个服务不得行,之后集群容错发挥作用。

2.7服务降级

服务降级方式:
在资源紧缺的场景中,如果某些服务不常用,我们可以对其降级。
在Reference注解中添加mock属性,其值可选:

  1. force:return null 不再远程调用该服务直接返回null值。用来屏蔽不重要服务不可用时对调用方的影响。
  2. fail:return null 失败后返回null不会报错。用来容忍不重要服务不稳定时对调用方的影响。

文章作者: 哈雅布撒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 哈雅布撒 !
  目录