Dubbo 服务调用原理浅析
来源:互联网 发布:2016网络在逃人员名单 编辑:程序博客网 时间:2024/05/17 05:56
dubbo概念
dubbo原理
dubbo应用场景
Dubbo概念:
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求。Dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。
其核心部分包含:
1》远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2》集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3》自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo原理:
第一步start,就是将服务装载容器中,然后准备注册服务。和Spring中启动过程类似,spring启动时,将bean装载进容器中的时候,首先要解析bean。所以dubbo也是先读配置文件解析服务。
解析服务:
1)、基于dubbo.jar内的Meta-inf/spring.handlers配置,spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler类。
2)、所有的dubbo标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。
源码截图:
在ServiceConfig.export 或者ReferenceConfig.get 初始化时,将Bean对象转会为url格式,将所以Bean属性转成url的参数。
然后将URL传给Protocol扩展点,基于扩展点的Adaptive机制,根据URL的协议头,进行不同协议的服务暴露和引用。
暴露服务:
只暴露服务端口,或者通过注册中心暴露,基于扩展点的Adaptive机制,通过URL的“registry://”协议头识别,调用RegistryProtocol的export方法,将export参数中的提供者URL先注册到注册中心,再重新传给Protocol扩展点进行暴露
引用服务:
直接应用服务端口,或者从注册中心发现引用服务。
基于扩展点的Adaptive机制,通过提供者URL的“dubbo://”协议头识别,就会调用DubboProtocol的refer()方法,得到提供者引用。 然后RegistryProtocol将多个提供者引用,通过Cluster扩展点,伪装成单个提供这引用返回。
提供服务的过程:
上图是服务提供者暴露服务的主过程:
1.serviceconfig 封装ref。然后将ProxyFactory类的getInvoker方法使用ref(真实类)封装成一个AbstractProxyInvoker(代理)实例
2.Invoker转换到Exporter的过程。Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由dubbo自己实现。
Dubbo的实现:Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由dubbo自己实现。
Rmi的实现:
RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法,他通过Spring或Dubbo或JDK来实现服务,通讯细节由JDK底层来实现。
服务消费者消费一个服务的详细过程:
上图是服务消费的主过程:
首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例。接下来把Invoker转为客户端需要的接口。
Dubbo应用场景:
1,rpc的分布式集群支持:负载均衡是对外提供一个公共地址,请求过来时通过轮询、随机的形式来分摊压力,挂一台补一台
2,结合zookeeper解耦:(提供者注册和消费者订阅)客户端和服务端启动的时候都会把自己的机器IP注册到zookeeper上。客户端会把zk上的服务端ip拉到磁盘上,并记录哪些ip提供哪些服务(服务端启动的时候暴露给zk)。
然后调用的时候客户端会根据ip调用服务端的服务,这时候即使zk挂掉也没关系。
3:长连接通讯:nio通信抽象封装
- Dubbo 服务调用原理浅析
- 18. Dubbo原理解析-服务调用
- dubbo组成原理-service服务调用
- dubbo源码浅析(五)-远程服务调用流程
- dubbo源码浅析(五)-远程服务调用流程
- Dubbo 原理浅析
- Dubbo远程调用服务框架原理与示例 - 沐风山
- Dubbo远程调用服务框架原理与示例
- Dubbo远程调用服务框架原理与示例
- dubbo组成原理-http服务消费端如何调用
- Dubbo服务框架原理
- 命令行调用dubbo服务
- Dubbo服务调用问题
- Dubbo解析及原理浅析
- Dubbo解析及原理浅析
- dubbo原理与配置浅析
- Dubbo解析及原理浅析
- 浅析dubbo原理和实现
- Linx find 文件查找
- CentOS升级Python3.x.x后安装pip出现command not found 错误
- Scala学习笔记:数组操作与简单算法示例
- 测试入门之软件质量问题
- Android中常用依赖
- Dubbo 服务调用原理浅析
- quartz集群
- 浅谈散列表(哈希表)
- 卷积神经网络(CNN)的规律总结
- Scottish Parliament/zh
- A计权声压级的计算(matlab)
- 新的征程
- 定点乘法运算之原码一位乘法
- java 装饰者模式