Posted: January 20, 2000
Status:
Completed
Tags :
Categories :
title: Dubbo categories: Java interview tags: interview keywords: interview status: Completed edit: 2022-01-20 description: Dubbo
Dubbo是基于Java的高性能轻量级的RPC分布式服务框架,现已成为 Apache 基金会孵化项目。
官网:http://dubbo.apache.org/en-us/
背景:
随着互联网的快速发展,Web应用程序的规模不断扩大,最后我们发现传统的垂直体系结构(整体式)已无法解决。分布式服务体系结构和流计算体系结构势在必行,迫切需要一个治理系统来确保体系结构的有序发展。
基于接口的远程调用
容错和负载均衡
自动服务注册和发现



连通性、健壮性、伸缩性、以及向未来架构的升级性。
jdk1.6+
一般来说选中Zookeeper更稳定更合适。
除了Zookeeper还有Redis注册中心、Multicast注册中心、Simple注册中心。


优先级从高到低:
…
ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏
// 如果点对点直连,可以用reference.setUrl()指定目标地址,设置url后将绕过注册中心,
// 其中,协议对应provider.setProtocol()的值,端口对应provider.setPort()的值,
// 路径对应service.setPath()的值,如果未设置path,缺省path为接口名
reference.setUrl("dubbo://10.20.130.230:20880/com.xxx.XxxService");
…
4种
<dubbo:reference interface = "com.foo.BarService" check = "false" />
随机负载平衡(默认)
RoundRobin负载平衡
最小活动负载平衡
一致的哈希负载平衡
多版本号(version)
<dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />
-D
java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890
.properties
java -Ddubbo.resolve.file=xxx.properties
com.alibaba.xxx.XxxService=dubbo://localhost:20890

dubbo使用netty。
可以用group分组,服务提供方和消费放都指定同一个group。
默认是同步等待结果阻塞的,同时也支持异步调用。
Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。
现在进入了Apache,由apache维护。
Dubbox是当当的扩展项目。
支持REST风格远程调用(HTTP + JSON/XML)
支持基于Kryo和FST的Java高效序列化实现
cpu个数 + 1
采用单一长链接和NIO异步通讯,适用于小数量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。

zookeeper临时节点,会话保持原理。
2.0.5 版本开始,dubbo支持通过x命令来进行服务治理?telnet
telnet localhost 20880
进入命令行。然后执行 ls相关命令:
ls: 显示服务列表ls -l: 显示服务详细信息列表ls XxxService: 显示服务的方法列表ls -l XxxService: 显示服务的方法详细信息列表
各层说明:
ServiceConfig, ReferenceConfig 为中心,可以直接初始化配置类,也可以通过 spring 解析配置生成配置类ServiceProxy 为中心,扩展接口为 ProxyFactoryRegistryFactory, Registry, RegistryServiceInvoker 为中心,扩展接口为 Cluster, Directory, Router, LoadBalanceStatistics 为中心,扩展接口为 MonitorFactory, Monitor, MonitorServiceInvocation, Result 为中心,扩展接口为 Protocol, Invoker, ExporterRequest, Response 为中心,扩展接口为 Exchanger, ExchangeChannel, ExchangeClient, ExchangeServerMessage 为中心,扩展接口为 Channel, Transporter, Client, Server, CodecSerialization, ObjectInput, ObjectOutput, ThreadPool这个问题其实面试中如果问dubbo的话,基本就会带这个问题。有时间的话,大家可以下载源码,读一读,如果大家有兴趣的话,我会出后续文章。
参考:http://dubbo.apache.org/en-us/
Be the first one to comment on this page!