dubbo 你该懂的概念

[TOC]

1 为何要使用dubbo

大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡。

(1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。

此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,降低对F5硬件负载均衡器的依赖,也能减少部分成本。

(2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。

这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。

(3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?

为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

2 dubbo实战

关于dubbo项目搭建,实战的例子。网上可以找到很多,这里提供一个我觉得写的比较清晰的,Dubbo与Zookeeper、SpringMVC整合和使用

3 基本概念

节点角色说明

Container: 服务运行容器。
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。

调用关系说明

  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

负载均衡策略,可选值:random(随机),roundrobin(轮循),leastactive(最少活跃调用)

集群容错模式

可以自行扩展集群容错策略,参见:集群扩展

Failover Cluster

  1. 失败自动切换,当出现失败,重试其它服务器。(缺省)
  2. 通常用于读操作,但重试会带来更长延迟。
  3. 可通过retries="2"来设置重试次数(不含第一次)。

Failfast Cluster

  1. 快速失败,只发起一次调用,失败立即报错。
  2. 通常用于非幂等性的写操作,比如新增记录。

Failsafe Cluster

  1. 失败安全,出现异常时,直接忽略。
  2. 通常用于写入审计日志等操作。

Failback Cluster

  1. 失败自动恢复,后台记录失败请求,定时重发。
  2. 通常用于消息通知操作。

Forking Cluster

  1. 并行调用多个服务器,只要一个成功即返回。
  2. 通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
    可通过forks="2"来设置最大并行数。

Broadcast Cluster

  1. 广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)
  2. 通常用于通知所有提供者更新缓存或日志等本地资源信息。

重试次数配置如:(failover集群模式生效)



或者


或者

    

集群模式配置



或者

4 负载均衡

可以自行扩展负载均衡策略,参见:负载均衡扩展

Random LoadBalance

  1. 随机,按权重设置随机概率。
  2. 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

RoundRobin LoadBalance

  1. 轮循,按公约后的权重设置轮循比率。
  2. 存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

LeastActive LoadBalance

  1. 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
  2. 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

ConsistentHash LoadBalance

  1. 一致性Hash,相同参数的请求总是发到同一提供者。
  2. 当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
  3. 算法参见:http://en.wikipedia.org/wiki/Consistent_hashing。
  4. 缺省只对第一个参数Hash,如果要修改,请配置
  5. 缺省用160份虚拟节点,如果要修改,请配置

配置方式:






    



    

关于一致性hash,五分钟理解一致性哈希算法(consistent hashing)

更多关于dubbo的信息,查看dubbo官方网站

你可能感兴趣的:(dubbo 你该懂的概念)