Dubbo远程调用

通过代理对象进行远程方法的调用,从大的方面也可以分为三步,分别是代理调用、容错负载和远程通信。

容错负载是Dubbo的重要组成模块,该模块实现了多种集群特性,还实现了目录服务、负载均衡、路由策略和服务治理配置等特性。

Invoker是服务提供者(Provider)的抽象,Invoker封装了Provider地址及服务接口信息。

Directory代表多个Invoker,可以把它看作List,但与List不同的是,它的值可能是动态变化的,比如注册中心推送变更。

Cluster将Directory中的多个Invoker伪装成一个Invoker,伪装过程包含了容错逻辑,调用失败后,重试另一个。

Router可以从多个Invoker中通过路由规则进行过滤和筛选。

LoadBalance可以从多个Invoker中选出一个使用。


RoundRobinLoadBalance:权重轮询算法,按照公约后的权重设置轮询比例

原理:把来自用户的请求轮流分配给内部中的服务器。例如:从1开始,一直到N(其中,N是内部服务器的总数),然后重新开始循环。

LeastActiveLoadBalance:最少活跃调用数均衡算法

原理:最少活跃调用数,活跃数指调用前后计数差,使慢的机器收到更少。

ConsistentHashLoadBalance:一致性Hash算法

原理:一致性Hash,相同参数的请求总是发到同一个提供者。一致性Hash算法可以解决服务提供者的增加、移除及“挂掉”时的情况,也可以通过构建虚拟节点,尽可能避免分配失衡,具有很好的平衡性。

RandomLoadBalance:随机均衡算法(Dubbo的默认负载均衡策略)

原理:按权重设置随机概率,如果每个提供者的权重都相同,那么根据列表长度直接随机选取一个,如果权重不同,则累加权重值。从0~累加的权重值中选取一个随机数,然后判断该随机数落在哪个提供者上。

FailoverCluster:失败转移

当出现失败时,重试其他服务器,通常用于读操作,但重试会带来更长延迟(默认集群策略)。

FailfastCluster:快速失败

只发起一次调用,失败立即报错,通常用于非幂等性操作。

FailbackCluster:失败自动恢复

对于Invoker调用失败,后台记录失败请求,任务定时重发,通常用于通知。

BroadcastCluster:广播调用

遍历所有Invokers,如果调用其中某个invoker报错,则“catch”住异常,这样就不影响其他Invoker调用。

AvailableCluster:获取可用的调用

遍历所有Invokers并判断Invoker.isAvalible,只要有一个为true就直接调用返回,不管成不成功。

FailsafeCluster:失败安全

出现异常时,直接忽略,通常用于写入审计日志等操作。

ForkingCluster:并行调用

只要一个成功即返回,通常用于实时性要求较高的操作,但需要浪费更多的服务资源。

MergeableCluster:分组聚合

按组合并返回结果,比如某个服务接口有多种实现,可以用group区分,调用者调用多种实现并将得到的结果合并。

Directory:代表多个Invoker,可以看作List,它的值可能是动态变化的,比如注册中心推送变更。

StaticDirectory:静态目录服务,它的所有Invoker通过构造函数传入,并且将所有Invoker返回。

RegistryDirectory:注册目录服务,它的Invoker集合是从注册中心获取的,并且实现了NotifyListener接口的notify(List)方法。

AbstractDirectory:所有目录服务实现的抽象类,它在获取所有的Invoker后,通过Router服务进行路由过滤。

ConditionRouter:基于条件表达式的路由规则,不足之处是在规则复杂且多分支的情况下,规则不容易描述。

ScriptRouter:基于脚本引擎的路由规则,没有运行沙箱,脚本能力强大,可能成为后门。

那么在选择出一个可用服务后,接下来就正式进入服务调用环节了,也就是Result result = invoker.invoke(invocation)。这一行代码会经过一系列的Filter通过配置好的通信协议,远程调用相应的Provider,执行并返回结果,返回结果和异常信息全部封装到Result对象中,最终实现一次完整的调用过程。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容