dubbo高可用
高可用指的是通过设计,减少系统不能提供服务的时间,让服务处于可用状态。
zookeeper宕机与dubbo直连
zookeeper宕机
zookeeper作为dubbo的注册中心,当zookeeper服务宕机后,如果是集群模式可以启用备用节点来解决单点
故障。如何是注册中心全部宕机情况下,dubbo为了保证高可用,可以通过==本地缓存==来进行远程通信,但新
的服务提供者将无法注册服务,新的服务消费方也将无法订阅服务,实现通信。
dubbo的监控中心宕掉不影响dubbo的使用,只是会丢失部分采样数据
任意一台服务提供者宕掉也不会影响dubbo的使用,只用所有的服务提供者全部宕掉,服务消费方将无法使用
并无限次重连直至服务提供者恢复
dubbo直连
dubbo直连指的是服务的消费者绕过注册中心,不在向注册中心订阅服务,获取服务列表。而是直接连接服务
提供者,进行远程过程调用。不推荐。
dubbo直连的实现主要是在服务提供方配置url属性直接进行远程通信,实现远程过程调用。
注解 url代表的是dubbo服务暴露的端口号
@Reference(version = "1.0",check = false,url = "127.0.0.1:20080")
xml配置
<dubbo:reference interface="com.stack.dubbo.service.UserService" id="userService" version="*" url="127.0.0.1:20080">
<dubbo:method name="getUserAddressList"></dubbo:method>
</dubbo:reference>
集群下dubbo负载均衡配置
基于权重的随机负载均衡
基于权重的随机负载均衡(Random LoadBalance):服务消费方调用每一次调用服务提供者是随机的,没有什么顺序,在大量调用中,调用服务提供者的次数,按照权重大小呈现规律。如下图:在大量调用服务提供者中,调用每个服务提供者的次数按照权重概率分布。
基于权重的轮询负载均衡
基于权重的轮询负载均衡(RoundRobin LoadBalance):服务消费方呈现周期性的按照顺序调用服务提供者,如下图服务消费方轮询依次调用服务提供者,在一个周期中按照权重的概率决定服务提供者被调用的次数,然后依次轮询调度服务提供方。
最少活跃数负载均衡
最少活跃数负载均衡(LeastActive LoadBalance):服务消费方每次调用服务提供者总是选择响应总时长最小
的服务提供者(处理的请求次数少或服务效率高)。当响应总时长一样时,随机调度。
一致性Hash负载均衡
一致性Hash负载均衡(ConsistentHash LoadBalance): 服务消费方每次调用服务提供者都按照hash映射,调用指定的服务提供者。
dubbo下负载均衡配置
dubbo本身已经为我们实现了上述四种负载均衡策略,它们都是dubbo,AbstarctLoadBalance 的子类。
dubbo实现负载均衡只需要我们进行简单的配置在服务提供方或者服务消费方。采用了负载均衡策略不能
使用dubbo直连的方式进行远程过程调用。
配置:http://dubbo.apache.org/zh-cn/docs/user/demos/loadbalance.html
整合hystrix,服务熔断与降级处理
服务降级
服务降级指的是,当服务器压力剧增时,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理。从而释放服务器资源保证核心业务的运行。
dubbo进行服务降级方式分为2种:
服务屏蔽:服务消费方不发起远程过程调用,在对该服务调用时直结在消费方返回NULL。(消费方设置)
服务容错:服务消费方正常通过远程过程调用调用方法,当调用服务提供者失败时(超时)返回NULL值。
服务屏蔽和服务容错的区别在于是否发起远程过程调用。服务屏蔽和服务容错可以通过dubbo-admin控制台动态设置。
集群容错
在集群调用失败后,dubbo提供多种容缺,缺省为failover重试。dubbo的集群容错一般通过hystrix进行替代。这里进行简单说明。
整合hystrix
hystrix是spring Cloud的一个集群容错的组件。它的目的是通过控制那些访问远程系统、服务和第三方库的节点,从而对故障和延迟提高容错能力。Hystrix具备拥有回退机制和断路器功能的线程和信号隔离,请求缓存和请求打包,以及监控和配置等功能。这里只是进行简单整合。
依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
注意:在启动类开启hystrix的注解,然后配置容错方法。
代码:http://stack-blog.oss-cn-beijing.aliyuncs.com/code/dubbo/hystrixcode.zip