Dubbo介绍

1.Dubbo支持的注册中心Dubbo提供的注册中心有如下几种类型可供选择:Multicast注册中心Zookeeper注册中心Redis注册中心Simple注册中心ZooKeeper是一个开源的分布式服务框架,它是Apache Hadoop...

1.Dubbo支持的注册中心

Dubbo提供的注册中心有如下几种类型可供选择:

Multicast注册中心

Zookeeper注册中心

Redis注册中心

Simple注册中心

ZooKeeper是一个开源的分布式服务框架,它是Apache Hadoop项目的一个子项目,主要用来解决分布式应用场景中存在的一些问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置管理等,它支持Standalone模式和分布式模式,在分布式模式下,能够为分布式应用提供高性能和可靠地协调服务,而且使用ZooKeeper可以大大简化分布式协调服务的实现,为开发分布式应用极大地降低了成本。

ZooKeeper总体架构

zook.jpg

ZooKeeper集群由一组Server节点组成,这一组Server节点中存在一个角色为Leader的节点,其他节点都为Follower。当客户端Client连接到ZooKeeper集群,并且执行写请求时,这些请求会被发送到Leader节点上,然后Leader节点上数据变更会同步到集群中其他的Follower节点。

2.Dubbo支持的远程通信协议

远程通信需要指定通信双方所约定的协议,在保证通信双方理解协议语义的基础上,还要保证高效、稳定的消息传输。Dubbo继承了当前主流的网络通信框架,主要包括如下几个:

Mina

Netty

Grizzly

3.Dubbo支持的远程调用协议

Dubbo支持多种协议,如下所示:

Dubbo协议

Hessian协议

HTTP协议

RMI协议

WebService协议

Thrift协议

Memcached协议

Redis协议

在通信过程中,不同的服务等级一般对应着不同的服务质量,那么选择合适的协议便是一件非常重要的事情。你可以根据你应用的创建来选择。例如,使用RMI协议,一般会受到防火墙的限制,所以对于外部与内部进行通信的场景,就不要使用RMI协议,而是基于HTTP协议或者Hessian协议。

4.dubbo集群容错和负载均衡

集群容错 

在集群调用失败时,Dubbo提供了多种容错方案,缺省为failover重试。

Failover Cluster 

失败自动切换,当出现失败,重试其它服务器。(缺省) 

通常用于读操作,但重试会带来更长延迟。 

可通过retries=“2”来设置重试次数(不含第一次)。

Failfast Cluster 

快速失败,只发起一次调用,失败立即报错。 

通常用于非幂等性的写操作,比如新增记录。

Failsafe Cluster 

失败安全,出现异常时,直接忽略。 

通常用于写入审计日志等操作。

Failback Cluster 

失败自动恢复,后台记录失败请求,定时重发。 

通常用于消息通知操作。

Forking Cluster 

并行调用多个服务器,只要一个成功即返回。 

通常用于实时性要求较高的读操作,但需要浪费更多服务资源。 

可通过forks=“2”来设置最大并行数。

Broadcast Cluster 

广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持) 

通常用于通知所有提供者更新缓存或日志等本地资源信息。

负载均衡 

- Random LoadBalance随机,按权重设置随机概率。 

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

RoundRobin LoadBalance 轮循,按公约后的权重设置轮循比率。 

存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

LeastActive LoadBalance 最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。 

使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

ConsistentHash LoadBalance 一致性Hash,相同参数的请求总是发到同一提供者。 

当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

5.dubbo源代码结构

Dubbo以包结构来组织各个模块,各个模块及其关系,如图所示:

dubbo源代码结构.jpg

dubbo-common 公共逻辑模块,包括Util类和通用模型。

dubbo-remoting 远程通讯模块,相当于Dubbo协议的实现,如果RPC用RMI协议则不需要使用此包。

dubbo-rpc 远程调用模块,抽象各种协议,以及动态代理,只包含一对一的调用,不关心集群的管理。

dubbo-cluster 集群模块,将多个服务提供方伪装为一个提供方,包括:负载均衡、容错、路由等,集群的地址列表可以是静态配置的,也可以是由注册中心下发。

dubbo-registry 注册中心模块,基于注册中心下发地址的集群方式,以及对各种注册中心的抽象。

dubbo-monitor 监控模块,统计服务调用次数,调用时间的,调用链跟踪的服务。

dubbo-config 配置模块,是Dubbo对外的API,用户通过Config使用Dubbo,隐藏Dubbo所有细节。

dubbo-container 容器模块,是一个Standalone的容器,以简单的Main加载Spring启动,因为服务通常不需要Tomcat/JBoss等Web容器的特性,没必要用Web容器去加载服务。


  • 发表于 2018-08-17 16:36
  • 阅读 ( 585 )
  • 分类:前端

1 条评论

请先 登录 后评论
不写代码的码农
IT达人

212 篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除