Dubbo
-
dubbo是什么?
Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。 -
dubbo的基本原理
- 服务启动的时候,provider和consumer根据配置信息,连接到注册中心register,分别向注册中心注册和订阅服务;
- register 根据服务订阅关系,返回 provider 信息到 consumer,同时 consumer 会把 provider 信息缓存到本地。如果信息有变更,consumer 会收到来自 register 的推送;
- consumer 生成代理对象,同时根据负载均衡策略,选择一台provider,同时定时向 monitor 记录接口的调用次数和时间信息;
- 拿到代理对象之后,consumer 通过代理对象发起接口调用;
- provider 收到请求后对数据进行反序列化,然后通过代理调用具体的接口实现。
-
dubbo注册中心类型
推荐使用 Zookeeper 作为注册中心,还有 Redis、Multicast、Simple 注册中心,但不推荐。 -
Dubbo 和 Spring Cloud 有什么区别?
- 最大的区别:
Spring Cloud抛弃了Dubbo 的RPC通信,采用的是基于HTTP的REST方式。严格来说,这两种方式各有优劣。虽然在一定程度上来说,后者牺牲了服务调用的性能,但也避免了上面提到的原生RPC带来的问题。而且REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖,这在强调快速演化的微服务环境下,显得更为合适。 - 2.总结:
Dubbo和Spring Cloud并不是完全的竞争关系,两者所解决的问题域不一样:Dubbo的定位始终是一款RPC框架,而Spring Cloud的目的是微服务架构下的一站式解决方案。非要比较的话,Dubbo可以类比到Netflix OSS技术栈,而Spring Cloud集成了Netflix OSS作为分布式服务治理解决方案,但除此之外Spring Cloud还提供了包括config、stream、security、sleuth等分布式服务解决方案。当前由于RPC协议、注册中心元数据不匹配等问题,在面临微服务基础框架选型时Dubbo与Spring Cloud只能二选一,这也是两者总拿来做对比的原因。Dubbo之后会积极寻求适配到Spring Cloud生态,比如作为SpringCloud的二进制通讯方案来发挥Dubbo的性能优势,或者Dubbo通过模块化以及对http的支持适配到Spring Cloud
- 最大的区别:
-
dubbo都支持什么协议,推荐用哪种?
-
dubbo://(推荐)
-
rmi://
-
hessian://
-
http://
-
webservice://
-
thrift://
-
memcached://
-
redis://
-
rest://
-
-
Dubbo内置了哪几种服务容器?
- Spring Container
- Jetty Container
- Log4j Container
-
在 Provider 上可以配置的 Consumer 端的属性有哪些?
- timeout:方法调用超时
- retries:失败重试次数,默认重试 2 次
- loadbalance:负载均衡算法,默认随机
- actives 消费者端,最大并发调用限制
-
Dubbo默认使用的是什么通信框架,还有别的选择吗?
Dubbo 默认使用 Netty 框架,也是推荐的选择,另外内容还集成有Mina、Grizzly。 -
Dubbo支持分布式事务吗?
目前暂时不支持,可与通过 tcc-transaction 框架实现 -
dubbo的优缺点
- 优点:
- 远程方法调用透明化
dubbo可以像调用本地方法一样调用远程方法,只需简单配置,无任何API侵入。 - 容错机制和软负载均衡
dubbo能够在内网替代nginx lvs等硬件负载均衡器。 - 服务注册中心自动注册 & 配置管理
dubbo不需要服务提供者地址写死,注册中心会基于接口名自动查询提供者ip。
而且如果是使用的类似zookeeper等分布式协调服务作为服务注册中心,就可以将绝大部分项目配置都移入zookeeper集群。 - 服务接口监控及治理
Dubbo-admin与Dubbo-monitor提供了完善的服务接口管理与监控功能,能够针对不同应用的不同接口,还可以进行多版本,多协议,多注册中心管理。
- 远程方法调用透明化
- 缺点:
- dubbo是专一的,它只支持java,这就是最大的缺点。