Dubbo是基于Java的高性能轻量级的RPC分布式服务框架,现已成为 Apache 基金会孵化项目。
官网:https://cn.dubbo.apache.org/zh-cn/
背景:随着互联网的快速发展,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种
JVM System Properties
,-D参数Externalized Configuration
,外部化配置ServiceConfig
、ReferenceConfig
等编程接口采集的配置dubbo.properties
<dubbo:reference interface = "com.foo.BarService" check = "false" />
多版本号(version)
<dubbo:reference id="xxxService" interface="com.alibaba.xxx.XxxService" url="dubbo://localhost:20890" />
java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890
java -Ddubbo.resolve.file=xxx.properties
com.alibaba.xxx.XxxService=dubbo://localhost:20890
dubbo使用netty。
可以用group分组,服务提供方和消费放都指定同一个group。
默认是同步等待结果阻塞的,同时也支持异步调用。
Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。
现在进入了Apache,由apache维护。
Dubbox是当当的扩展项目。
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
为中心,扩展接口为 ProxyFactory
RegistryFactory
, Registry
, RegistryService
Invoker
为中心,扩展接口为 Cluster
, Directory
, Router
, LoadBalance
Statistics
为中心,扩展接口为 MonitorFactory
, Monitor
, MonitorService
Invocation
, Result
为中心,扩展接口为 Protocol
, Invoker
, Exporter
Request
, Response
为中心,扩展接口为 Exchanger
, ExchangeChannel
, ExchangeClient
, ExchangeServer
Message
为中心,扩展接口为 Channel
, Transporter
, Client
, Server
, Codec
Serialization
, ObjectInput
, ObjectOutput
, ThreadPool
这个问题其实面试中如果问dubbo的话,基本就会带这个问题。有时间的话,大家可以下载源码,读一读
言语是把杀人不见血的刀