dubbo微服务框架

随着分布式项目的发展,dubbo微服务框架日益盛行。
1、dubbo是什么? 能做什么?
dubbo是阿里巴巴开源的基于java的高性能RPC分布式服务框架,现已成为apache基金会孵化项目。致力于提供高性能和透明化的RPC远程服务调用方案以及soa服务治理方案。

核心内容包括三个部分:远程通信、集群容错、自动发现
1、远程通讯:提供对多种基于长连接的NIO框架的抽象封装,包括多种线程模型,序列化,以及 请求响应模式的信息交换方式,透明化的远程方法调用,就像调用本地方法一样调用远程的方法。
2、集群容错:提供多协议支持,软负载均衡。失败容错,地址路由动态配置。
3、自动发现:基于注册中心的目录服务,服务自动注册与发现,不需要再写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

2.dubbo的工作流程
dubbo工作流程
dubbo的四个角色 1、registry 注册中心 2、服务调用者/消费者 3、服务提供者/生产者 4、监控中心

1、初始化 (紫色虚线为初始化需要完成的操作): container 作为dubbo的容器用来装载服务提供者,服务启动初始化服务提供者并将其服务提供者列表注册到注册中心,消费者启动的时候会将自己所需要的服务列表拉取到本地缓存起来,调用的时候需要根据列表对其服务提供者进行调用。
2、通知:当服务提供者某一个节点挂掉了,注册中心根据服务心跳机制进行服务列表的更新,然后通知其相应的订阅者,订阅者会更新最新的服务列表到本地,挂掉的节点就不存在服务列表中,就不会进行invoke调用
3、监控:调用信息和调用次数 每次调用的时长都会上报到监控中心

dubbo集群
日常使用 dubbo provider 会做集群多节点,以提高系统的稳定
消费者调用provider服务时dubbo为我们设置了很多负载均衡的策略

Random 随机策略(默认策略)
@Reference(loadbalance=“random”)
随机,按权重设置随机概率。
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

RoundRobin 轮询策略
@Reference(loadbalance=“roundrobin”)
轮询,按公约后的权重设置轮询比率。dubbo-admin控制台可对某个服务某台机器设置对应的权重。
存在慢的提供者类即请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

LeastActive 最小访问量
@Reference(loadbalance=“leastactive”)
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

ConsistentHash 一致性hash算法
@Reference(loadbalance=“consistenthash”)
一致性Hash,相同参数的请求总是发到同一提供者。
当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其他提供者,不会引起剧烈变动。

dubbo 服务降级

当服务提供者 节点服务出错时,调用者为了不影响当前请求可以做服务降级处理
Dubbo中提供了一个mock的配置,可以通过 mock来实现当服务提供方出现网络异常或者挂掉以后,客户端不抛出异常,而是通过 Mock数据返回自定义的数据。

服务降级和容错是在一起的做

Dubbo 提供了多种容错方案,缺省为 failover 重试。

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

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

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

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

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

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

在实际应用中查询语句容错策略建议使用默认 failover ,而增删改建议使用 failfast 或者使用 failover (retries=”0”) 策略,防止出现数据重复、添加等等其它问题!建议在设计接口时候把查询接口方法单独做一个接口提供查询。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值