Dubbo和Zookeeper的一点认识

来源:互联网 发布:复权价格 知乎 编辑:程序博客网 时间:2024/06/04 18:08

Dubbo:

详情请见
官网链接

特点:

  • 一个分布式服务架构;
  • 高性能和透明化的RPC远程服务调用方案;
  • SOA服务治理方案
  • 支持容错机制和负载均衡机制

优缺点:

  • 优点:
    1.解决远程方法调用,无API侵入危险;
    2.软负载均衡及容错机制,可以替代F5硬件负载均衡,减少成本和减少单点;
    3.服务的自动注册和配置管理
    不需要写死服务提供者地址,注册中心基于接口名自动查询提供者ip。 也可以使用类似zookeeper等分布式协调服务作为服务注册中心,可以将绝大部分项目配置移入zookeeper集群。
    4.统计服务调用的次数和调用时间,可以明确查看每个服务的调用次数,可以适当修改某个服务的调用算法,优化服务调用;
  • 缺点:只支持java

调用流程

主要角色:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次数和调用时间的监控中心。

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

容错机制

集群调用失败时,dubbo提供多种容错机制默认为failover重试
不同的集群容错策略有不同的容错机制
配置如下:

<dubbo:service cluster="failsafe" />或者<dubbo:reference cluster="failsafe" />

1. Failover Cluster(默认)
失败自动切换,当出现失败,重试其它服务器。(缺省)
通常用于操作,但重试会带来更长延迟。
可通过retries=”2”来设置重试次数(不含第一次)。
配置如下:当你的集群设置为failover时可以参考如下设置

<dubbo:service retries="2" />

2. Failfast Cluster
快速失败,只发起一次调用,失败立即报错。
通常用于非幂等性的写操作,比如新增记录
3. Failsafe Cluster
失败安全,出现异常时,直接忽略。
通常用于写入审计日志等操作。
4. Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。
通常用于消息通知操作。
5. Forking Cluster
并行调用多个服务器,只要一个成功即返回。
通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
可通过forks=”2”来设置最大并行数。
6. Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)
通常用于通知所有提供者更新缓存或日志等本地资源信息。

负载均衡

当有多个服务提供方时,可以选择集群,那如何分配调用哪台服务器去处理请求,就涉及到了负载均衡问题,dubbo默认为随机权重调用
主要有以下几种均衡策略:

1. Random LoadBalance(默认)
随机,按权重设置随机概率
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
2. RoundRobin LoadBalance
轮循,按公约后的权重设置轮循比率。
存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
3. LeastActive LoadBalance
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
4. ConsistentHash LoadBalance
一致性Hash,相同参数的请求总是发到同一提供者。
当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
算法参见:http://en.wikipedia.org/wiki/Consistent_hashing。
缺省只对第一个参数Hash,如果要修改,请配置
缺省用160份虚拟节点,如果要修改,请配置

配置

<dubbo:service interface="..." loadbalance="roundrobin" />或者<dubbo:reference interface="..." loadbalance="roundrobin" />

Zookeeper

主要作为Dubbo的服务注册中心,是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务

这里博主没有深入,只是公司项目中使用到,以后了解后,再总结
详见其它博主:
点击查看