1、Dubbo 分布式框架。 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可。必须依赖JDK 1.6+。
2、Dubbo配置文件是如何加载到Spring中的?
Spring容器在启动的时候,会读取到Spring默认的一些schema以及Dubbo自定义的schema,每个schema都会对应一个自己的NamespaceHandler,NamespaceHandler里面通过BeanDefinitionParser来解析配置信息并转化为需要加载的 bean 对象!
3、 Dubbo三种配置方式
Spring XML 方式,注解方式,API方式。
4、启动时检查 check
Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"
。设置为false,服务回复后会自动连上。
5、重试次数配置 retries
Dubbo 服务在尝试调用一次之后,如出现非业务异常(服务突然不可用、超时等),Dubbo 默认会进行额外的最多2次重试。可自行设置。
6、Dubbo 整体架构分层
接口服务层(Service):该层与业务逻辑相关,根据provider和consumer的业务设计对应的接口和实现
配置层(Config):对外配置接口,以ServiceConfig和ReferenceConfig为中心服务
代理层(Proxy):服务接口透明代理,生成服务的客户端Stub 和服务端的Skeleton,以ServiceProxy 为中心,扩展接口为ProxyFactory
服务注册层(Registry):封装服务地址的注册和发现,以服务URL为中心,扩展接口为RegistryFactory、Registry、RegistryService
路由层(Cluster):封装多个提供者的路由和负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBlancce
监控层(Monitor):RPC调用次数和调用时间监控,以Statistics 为中心,扩展接口为MonitorFactory、Monitor和 MonitorService
远程调用层(Protocal):封装RPC调用,以Invocation和Result为中心,扩展接口为Protocal、Invoker和Exporter
信息交换层(Exchange):封装请求响应模式,同步转异步。以 Request和Response为中心,扩展接口为Exchanger、
ExchangeChannel、ExchangeClient和ExchangeServer
网络传输层(Transport):抽象mina和 netty 为统一接口,以 Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec
数据序列化层(Serialize):可复用的一些工具,扩展接口为Serialization、ObjectInput、ObjectOutput和ThreadPool。
7、Dubbo 默认使用Netty 通信框架。
8、Dubbo 一般使用Zookeeper 服务注册中心。
9、Dubbo 推荐使用dubbo协议。
10、Dubbo 默认推荐使用Hessian序列化。
11、Dubbo 核心组件
- Provider:服务的提供方
- Consumer:调用远程服务的服务消费方
- Registry:服务注册和发现的注册中心
- Monitor:统计服务调用次数和调用时间的监控中心
- Container:服务运行容器
12、 Dubbo 核心功能
Remoting:网络通信框架。
Cluster:服务框架,RPC远程过程调用,包括多协议支持,负载均衡,失败容错等。
Registry:服务注册,基于注册中心目录服务,使服务消费方能动态的查找服务提供方。
13、集群容错模式
Failover Cluster 失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2"
来设置重试次数(不含第一次)。可作用于整体服务提供者,服务消费者,或单独调用方法。为Dubbo默认方式。
Failfast Cluster 快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
Failsafe Cluster 失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
Failback Cluster 失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
Forking Cluster 并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作&