dubbo高级教程

dubbo高级应用

集群容错
容错模式

1.Failover Cluster:失败自动切换,服务调用失败后,会切换到集群中其他机器进行重试,
默认重试次数为2,retries=2,可以修改次数
重试次数增加会带来更长的响应延时
适用读操作,事物型操作会带来数据重复
2.Failfast Cluster:快速失败,服务调用失败,立即报错
只发起一次调用,适用:幂等,例如新增数据
当服务调用失败,可能这个请求已经在服务器端处理成功
因为网络延迟导致响应失败
3.Failsafe Cluster:失败安全,出现异常时,直接忽略异常
4.Failback cluster: 失败后自动回复,服务调用出现异常时,后台记录这条失败的请求.定时重发
适用于消息通知操作,保证这个请求一定发送成功
5.Forking Cluster:并行调用集群中多个服务,只要其中一个成功就返回,forks=2设置最大并行数
6.Broadcast Cluster:广播调用所有的服务提供者,任意一个服务报错则表示服务调用失败
适用于,通知所有服务提供者更新缓存或本地资源信息

配置方式
@Service(retries = 3)
public class IHelloServiceImpl implements IHelloService {

    @Value("${dubbo.application.name}")
    private String serverName;

    @Override
    public String sayHello(String name) {
        return "hello," + name + ", serverName:" + serverName;
    }
}

实际应用中,
查询语句容错建议使用默认failover cluster
增删改建议使用:
Failfast cluster或者Failover Cluster(retries=“0”)

负载均衡

访问量较大情况下,
通过水平扩容的方式增加多个节点来平衡请求流量
软件负载均衡目前比较主流是nginx
提供4种策略,默认策略 random
1.Random:随机算法,针对性能较好的服务器设置较大的权重值
权重值越大,随机的概率也会越大
2.RoundRobin:轮询,按照公约后的权重设置轮询比例
3.LeastActive:最少活跃调用数,处理较慢节点将会收到更少请求
4.ConsistentHash:一致性hash,相同参数的请求总发送到同一个服务提供者

配置方式
@Service(retries = 3,cluster = "failover",loadbalance = "roundrobin")
服务降级

服务器访问压力较大时,对不重要的服务进行降级
分类:
是否可自动化分:自动降级,人工降级
功能分:读服务降级,写服务降级
人工降级具有前置性,在电商大促之前,关闭某些非核心服务
自动降级:系统出现某些异常时,自动触发兜底流畅
1.故障降级:调用远程服务挂了,设置兜底数据响应给客户端
2.服务降级:对核心业务进行限流
当请求流量达到阈值时,后续请求被拦截,这些请求进入排队系统
dubbo提供Mock配置实现服务降级
当服务提供方出现网络异常,无法访问时,客户端不抛出异常
通过降级配置返回兜底数据
spring-cloud-dubbo-consumer创建MockHelloService类
需要实现自动降级接口即可

@RestController
@RequestMapping("/consumer")
public class IHelloServiceImpl {

    @Reference(
            mock = "com.zyl.consumer.service.MockIHelloService",
            cluster = "failover"
    )
    private IHelloService helloService;

    @GetMapping("/say")
    public String say() {
        return helloService.sayHello("zyl");
    }
}
主机绑定规则

dubbo服务对外发布的ip地址,默认情况下,dubbo按照以下顺序查找并绑定主机ip地址
1.查找环境变量中DUBBO_IP_TO_BIND属性配置的ip地址
2.查找dubbo.protocol.host属性配置的ip地址,默认是空,如果没有配置或者ip地址不合法,
继续向下查找
3.通过LocalHost.getHostAddress()获取本机ip地址,如果获取失败,继续向下查找
4.如果配置了注册中心的地址,使用socket通信连接到注册中心的地址后,使用for循环通过
socket.getLocalAddress().getHostAddress()扫描各个网卡获取ip地址
注意:获取的ip地址并不是写入注册中心的地址,
默认情况下,写入注册中心的ip地址,优先选择环境变量中DUBBO_IP_TO_REGISTRY属性配置的ip地址,在这个属性没有配置的情况下,才会选择前面获取的ip地址写入注册中心
建议通过dubbo.protocol.host设置主机地址
建议制定一个dubbo端口号,避免和其他dubbo服务的端口产生冲突

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值