Dubbo的学习笔记

Dubbo笔记

初步认为Dubbo是一个分布式调用其余服务的框架,在没有使用dubbo框架的时候,咱们调用其余网站的接口时须要使用http发送一个请求到指定的服务接口上。而dubbo的主要功能就是将其余网站的服务透明化,便可以像调用一个本地方法同样调用远程服务。


经过资料得知Dubbo是基于RPC框架,RPC框架带来的几个问题,关于RPC的具体内容能够参考这篇https://www.jianshu.com/p/b0343bfd216e

1. Call ID映射

  • 咱们须要调用一个方法,在本地环境中方法能够经过指针来指定,而在远程方法调用时,两台机器的进程寻址地址是不一样的。因此在RPC框架中,每一个方法都有一个ID,这个ID在进程中都是惟一肯定的。客户端在调用远程方法时须要带上ID。而后咱们还须要在客户端和服务端分别维护一个 {函数 <--> Call ID} 的对应表。二者的表不必定须要彻底相同,但相同的方法对应的Call ID必须相同。当客户端须要进行远程调用时,它就查一下这个表,找出相应的Call ID,而后把它传给服务端,服务端也经过查表,来肯定客户端须要调用的方法,而后执行相应方法的代码

2. 序列化和反序列化

  • 客户端怎么把参数值传给远程的方法呢?在本地调用中,咱们只须要把参数压到栈里,而后让函数本身去栈里读就行。可是在远程过程调用时,客户端跟服务端是不一样的进程,不能经过内存来传递参数。甚至有时候客户端和服务端使用的都不是同一种语言(好比服务端用C++,客户端用Java或者Python)。这时候就须要客户端把参数先转成一个字节流,传给服务端后,再把字节流转成本身能读取的格式。这个过程叫序列化和反序列化。同理,从服务端返回的值也须要序列化反序列化的过程。

3. 网络传输

  • 远程调用每每用在网络上,客户端和服务端是经过网络链接的。全部的数据都须要经过网络传输,所以就须要有一个网络传输层。网络传输层须要把Call ID和序列化后的参数字节流传给服务端,而后再把序列化后的调用结果传回客户端。只要能完成这二者的,均可以做为传输层使用。所以,它所使用的协议实际上是不限的,能完成传输就行。

Dubbo的流程图

dubbo

经过这张流程图能够清晰看到dubbo是消费者和提供者的关系,程序运行时服务提供者将服务在注册中心注册,消费者在注册中心订阅服务。这样消费者就能够看到有哪些服务是能够调用的,最后有一个监控模块来监控服务的数量。

以上即是我的对dubbo的理解,若有错误,请指出!

相关文章
相关标签/搜索