Dubbo 的底层原理
前语
平常咱们在构建分布式体系的时分,一般都是基于 Dubbo 技能栈或许是SpringCloud 技能栈来做。前期其实最早比较盛行的是Dubbo,我记得咱们当时有个部分的老迈便是用的是Dubbo 来构建的一个体系,到后面才出来的 SpringCloud,因为它是基于 Spring 生态建立起来的,供给了一整套微服务组件,功用完全,大受中小型公司开发者的喜爱。
但是现在仍是有不少公司没有换成 SpringCloud 来做微服务的东西,仍是基于 Dubbo,面试的时分不管是 SpringCloud 也好,Dubbo 也罢,基本上都会说到这两个结构的底层原理。你想测验一下高档的职位,基本上跑不脱这个问题。
OK,今儿咱们就大约聊聊 Dubbo 的底层架构原理吧。
服务注册中心
分布式体系里边这个是必备的,服务供给者跟服务顾客都在启动的时分都会注册到服务注册中心来。服务注册中心会记录。
动态署理层 Proxy
通常这些结构大多数采用的思维都是经过对你的办法,接口生成一个署理目标,然后在这个署理目标里边去写它的功用。
所以这儿咱们需求每个服务都需求供给接口出来,在发起服务调用执勤,会创立一个动态署理目标,在咱们的顾客中只有一个接口,咱们可以认为动态署理类相当于为这个接口动态的创立一个实体类出来,然后用动态带来目标进行接口调用。
Cluster 集群层
咱们准备好了要去调用了长途服务的接口,那么现在问题是咱们的服务供给者会布置多台机器,那么咱们究竟去调用哪台机器呢?怎样挑选?
此刻动态署理目标回去找一个叫 Cluster 这层的东西,这层就负责具体要调用哪一台机器。
那么 Cluster 层就必须得拿到有哪些机器对不对,否则怎样选呢。那么这个进程就叫做动态感知。
Cluster 里边有许多组件,比方 Directory、Router 还有LoadBalance ,此刻就会运用负载均衡组件 LoadBlance 挑选一台机器。到这儿,机器就选好了。
protocol 协议层
这层首要便是挑选一种协议来组织咱们的恳求。
Dubbo支持的协议许多,包含:dubbo、rmi、hessian、http、webservice、thrift、memcached、redis等。默认运用dubbo 协议。
Exchange 信息交换层
这层最首要的意图便是把咱们的恳求数据包装成 Request 或许 Response 。
Transport 网络通信层
现在咱们挑选好了机器,也把恳求按照协议进行组织好了,而且封装好了恳求。那么这个恳求怎样发送到服务供给者的哪台机器呢?
此刻咱们就需求挑选一个网络通信的结构。由他来负责把你的恳求经过网络发送曩昔。比方比较常见的 netty、mina 等。
在发送曩昔之前,还得对恳求进行序列化。序列化有多种方式可以挑选,比方Json、Protobuf、Protostuff、Hessian、Kryo等、Java序列化等等。
服务顾客接受到恳求后的处理
那么服务供给者怎样才干收到这个恳求呢?此刻服务供给者里边也得需求一个网络通信结构,他去监听你敞开的某个端口,比方就启动一个 netty 去监听顾客发送过来的恳求。
接受到恳求过后,然后进行反序列化,然后,前面咱们发过来的是 经过 Exchange 层包装的 Request 恳求,那么这儿也需求 这层来对 恳求进行解析。解析的时分,也需求依据一种协议来进行解析。
实际上 解析完成恳求以后,还会创立一个动态署理目标,再去调用咱们的服务供给者接口,最后回来数据。
整个调用流程图
希望你在面试的时分,可以给面试官画出来这个图。
参考资料
或许面试的时分还会有更多的细节,那么依据上面大体的几层,一层一层的了解各自的细节。这样子或许会更有把握一些。