简介
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。是个远程服务调用的分布式框架. 其核心部分包含: 1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。 2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo能做什么?
1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。 3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
配置方式
XML配置、属性配置、API配置、注解配置
各种配置的加载顺序
jvm arg方式有限,xml次之,properties最低
配置的覆盖方式
方法级的在最上边,接口级的次之,全局配置的是最后,而且同级别的情况下,消费者的优先级大于服务提供者。
启动时检查
如果没有成功注册订阅,或者服务消费者启动的时候找不到对应的服务器提供者,就会报错阻止项目的启动。 可以设置是某个服务,也可以设置是全部的服务。
直连服务提供者
- jvm arg方式
- properties方式
- XML方式(推荐)
- 注解方式(推荐,无入侵)
四种负载均衡策略
四种负载均衡策略 – 随机:这是默认的,顾名思义,就是按权重随机访问。 – 轮询:按权重轮询访问 – 最少活跃调用数:这里越慢的服务收到的请求会越少 – 一致性 Hash:这里按照请求的参数来计算hash,相同参数的请求总是发到同一提供者。
服务降级
- mock=force:return+null:即屏蔽服务,不提供服务
- mock=fail:return+null:即容错,失败时返回null
集群容错
- Failover:失败自动切换,当出现失败,重试其它服务器 。通常用于读操作,但重试会带来更长延迟。可通过 retries=“2” 来设置重试次数(不含第一次)。
- Failfast:快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
- Failsafe:失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
- Failback:失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
- Forking:并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks=“2” 来设置最大并行数。
- Broadcast:广播调用所有提供者,逐个调用,任意一台报错则报错 。通常用于通知所有提供者更新缓存或日志等本地资源信息。
服务暴露的总流程
- 首先将服务的实现封装成一个Invoker,Invoker中封装了服务的实现类。
- 将Invoker封装成Exporter,并缓存起来,缓存里使用Invoker的url作为key,然后注册到注册中心。
- 服务端Server启动,监听端口,等待调用。(请求来到时,根据请求信息生成key,到缓存查找Exporter,就找到了Invoker,就可以完成调用。)
服务引入总流程
- 创建client客户端,用来连接请求服务消费者。
- 封装invoker,里面主要包含请求的客户端,服务端地址端口,请求的类以及方法。