dubbo(二)dubbo的高级应用

负载均衡

dubbo提供了5种负载均衡策略,默认的是随机,源码包是在 dubbo-cluster 下
1、加权随机
	例如三个节点,有三个不同的权重,对应三个区间,随机产生的随机数落在其中的一个区间即某个节点上,权重大的可能性较大
2、轮询
	轮流分配给N个节点,实际场景中有的机器性能不一样,所以可以进行加权,调控每台服务器的负载
3、一致性hash负载
	根据参数hash取模,默认是根据第一个参数
	{hash(parameter)%3} = 0,1,2
	{hash(parameter)%6} = 0,1,2,3,4,5
4、最小活跃度
	处理器性能高的权重越高,性能低的权重越低
	根据处理吞吐量->发起请求,计数器+1,处理完,计数器-1,然后比较计数器大小
5、最端响应时间
		最短响应负载均衡算法
		筛选成功响应时间最短的调用程序的数量,计算这些调用程序的权重和数量。根据响应时间长短来分配目标服务的权重

集群容错

客户端请求报错了怎么办,重试还是重新发起请求,多次请求时要考虑幂等问题
1、Failover(默认)
	失败自动重试
	cluster='failover' retires=2
2、failfast cluster
	快速失败
3、failsafe cluster
	失败安全,出现异常,吞掉异常
4、failback cluster
	失败自动恢复,记录失败请求,定时重发
5、forking cluster
	并行调用多个服务节点,只要其中一个成功返回,直接返回结果
6、broadcast cluster
	广播调用,一个请求调用所有的服务提供者,只要有一个节点报错,那么就认为这个请求失败

dubbo泛化

dubbo的一般调用方式是通过api调用,因为RPC设计的初衷就是面向接口编程
某些特定情况下可以不使用api的也能调用dubbo服务,如跨语言调用,PHP调用java,不可能一一定义接口。
简而言之就是消费者不需要定义接口,也能正常调用dubbo服务
泛化的方式,配置consumer.xml时加一个 generic="true"/
<dubbo:reference id="permissionService" interface="com.alibaba.dubbo.demo.DemoService" generic="true"/>

具体的细节可查看这篇文章:Dubbo基本特性之泛化调用

服务降级

解决高并发的三把利器:降级、限流、缓存
降级:服务器压力剧增,可以限制某些低级别服务,保证重要服务的正常进行
Dubbo的服务降级采用的是mock机制
调用被降级的服务时会返回null或者简单的提示
<dubbo:reference id="xxService" check="false" interface="com.xx.XxService" timeout="3000" mock="return null" />
<dubbo:reference id="xxService2" check="false" interface="com.xx.XxService2" timeout="3000" mock="return 1234" />

常见配置

1、启动检查 check=true/false

2、主机绑定问题
	--> 查找环境变量中是否存在启动参数 [DUBBO_IP_TO_BIND] =服务注册的ip
	--> 读取配置文件, dubbo.protocols.dubbo.host= 服务注册的ip
	--> InetAddress.getLocalHost().getHostAddress() 获得本机ip地址
	--> 通过Socket去连接注册中心,从而获取本机IP
	--> 会轮询本机的网卡,直到找到合适的IP地址
	--> 上面获取到的ip地址是bindip,如果需要作为服务注册中心的ip, DUBBO_IP_TO_REGISTRY -
	dDUBBO_IP_TO_REGISTRY=ip

	3、配置的优先级
		方法层面的配置>接口层面的配置>全局层面的配置
		级别一样,客户端配置>服务端配置

多序列化的支持

不同的协议用的序列化方法
gRPC->用的protobuf做序列化,支持json/xml
dubbo 用的hession
webserice /xml
fst/kryo

添加jar包支持

<dependency>
<groupId>com.esotericsoftware</groupId>
<artifactId>kryo</artifactId>
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>de.javakaffee</groupId>
<artifactId>kryo-serializers</artifactId>
<version>0.45</version>
</dependency>

添加序列化支持

dubbo.protocol.serialization=kryo

性能调优的参数

在这里插入图片描述

dubbo缓存文件

配置服务地址的缓存,避免注册中心挂了之后对于服务通信的影响
配置在消费端

dubbo.registries.shanghai.zone=shanghai
dubbo.registries.shanghai.weight=100
dubbo.registries.shanghai.file=${user.home}/dubbo_shanghai.cache
dubbo.registries.hunan.address=nacos://192.168.216.128:8848
dubbo.registries.hunan.weight=10
dubbo.registries.hunan.preferred=true
dubbo.registries.hunan.file=${user.home}/dubbo_hunan.cache

生成的是empty协议的服务,注册中心挂掉之后仍能保持服务调用

Dubbo admin的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值