DUBBO整理

一、应用演变

在这里插入图片描述

二、远程过程调用

RPC与SOA区别:
SOA相对于RPC的优势在于有一个调度中心,可以根据请求的压力合理分配服务器资源,提高利用率。

RPC过程:

  1. Client 与 Service 建立 Socket 连接。
  2. Client 调用 Server的方法
  3. ClientStub 序列化请求信息
  4. ClientStub 发送请求
  5. ServerStub 反序列化请求信息
  6. Server 调用方法
  7. ServerStub 序列化响应信息
  8. ServerStub 发送响应
  9. ClientStub 反序列化响应信息
  10. Client 获得响应信息
    所以影响RPC效率的因素是通讯效率和处理序列化的速度。

三、dubbo能做什么

1. 面向接口的远程方法调用(RPC)
2. 容错和负载均衡

(1)4种负载均衡

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

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

  3. LeastActive LoadBalance
    最少活跃调用数,相同活跃数根据权重随机。
    使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

  4. ConsistentHash LoadBalance
    一致性Hash,相同参数的请求总是发到同一提供者。
    当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
    官网API: http://dubbo.apache.org/zh-cn/docs/source_code_guide/loadbalance.html

(2)集群容错模式:
Failover Cluster

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

Failfast Cluster

  • 快速失败,只发起一次调用,失败立即报错,抛出异常。
  • 代码:catch之后throw
  • 通常用于非幂等性的写操作,比如新增记录。

Failsafe Cluster

  • 失败安全,出现异常时,直接忽略,返回一个空结果。
  • 代码:catch之后log记录,然后return new RpcResult();
  • 通常用于写入审计日志等操作。

Failback Cluster

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

Forking Cluster

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

Broadcast Cluster

  • 广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)
  • 通常用于通知所有提供者更新缓存或日志等本地资源信息。
3. 服务自动注册和发现 & 提供者与消费者

下图为dubbo架构:在这里插入图片描述

4. 服务降级

服务器上有多个服务可用,但服务器压力很大,于是牺牲一个最无关紧要的服务,把资源让给其他重要的服务。
2种方法:

  1. 不调用服务,直接返回 NULL
  2. 调用服务失败,如超时,返回NULL,用来容忍不重要的服务可用性差。

四、dubbo与SpringCloud区别

在这里插入图片描述
结论:

  1. dubbo使用RPC通信,SpringCloud使用REST API通信。RPC性能高,REST更灵活。
  2. dubbo是一个RPC方案,SpringCloud是一个一体式方案。即dubbo + zookeeper + … = Spring全家桶
  3. dubbo更灵活、自由度高也更难控制;Spring帮你准备好了一整套方案,稳定性高。即dubbo是一台组装机,Spring是一台品牌机。

五、dubbo配置方法及优先级

去年官方文档:
在这里插入图片描述
今年官方文档:
在这里插入图片描述

reference method > service method > reference > service > consumer > provider


在这里插入图片描述


Q:为什么要注册中心,不直接用Nginx?
A:当举办活动预计并发量上升,需要横向扩展provider集群时,需要将ip加到nginx的配置中,当活动结束并发量下来后,又要从nginx的配置中去除对应机器的ip,运维成本高,且容易出错。使用注册中心可以实现自动注册(只要管好provider就行了)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值