dubbo+zookeeper与提供者provider、消费者consumer通信原理讲解
一、系统基本构造
讲解前,先说一下整个系统框架的基本构造:
zookeeper
作为注册中心,使用单独服务器,占用2181
端口;dubbo-admin
作为监控中心,与zookeeper
使用相同服务器,tomcat
部署占用8080
端口;provider
作为服务提供者,使用单独服务器,tomcat
部署占用8080
端口,使用dubbo
协议开放20880
端口;consumer
作为服务消费者,使用单独服务器,tomcat
部署占用8080
端口;
疑惑:
provider
服务器端口是8080,为什么telnet
测试以及解决方案中开放的端口却是20880
?- 要说
dubbo
协议开放了20880
端口,那8080
端口应该也开放啊? zookeeper
、provider
、consumer
之间端口开放和屏蔽情况到底是怎么回事?
二、通信原理
带着这些问题,博主进行了相关验证,最终得出如下结论,先看图,再解释:
- 用
dubbo
协议在20880
端口暴露服务
在提供者的dubbo
配置文件中,一般都配置了<dubbo:protocol name="dubbo" port="20880"/>
,表明用dubbo
协议在20880
端口暴露服务,当然如果你不配置,dubbo
默认使用20880
端口暴露服务,所有消费者都是通过20880
端口进行服务调用,对于消费者而言,提供者服务器8080
端口是透明的,也就是说提供者服务器端口号可以任意改变,服务也不会有任何影响,消费者无需关心。
从监控中心可以看到如图:
除了在指定端口上暴露服务之外,还可以在指定ip
上暴露服务,配置如下:
<dubbo:protocol name="dubbo" host="10.1.22.2" port="20880" />
- 端口开放情况
zookeeper
作为注册中心,provider
提供服务、consumer
订阅服务、dubbo-admin
管理监控服务,所以zookeeper
注册中心的2181
端口需要向provider
、consumer
、dubbo-admin
开放;
一般情况下,dubbo-admin
监控中心与zookeeper
注册中心部署在相同的服务器上,zookeeper
可以不考虑端口开放给dubbo-admin
的情况;
consumer
订阅服务,即拿到了provider
在20880
端口暴露的服务,当consumer
请求服务时,直接从consumer
跳到provider
,而不是consumer
到zookeeper
再到provider
,所以provider
的20880
无需开放给zookeeper
;
同理,provider
响应服务时,也是直接从provider
到consumer
,而不是provider
到zookeeper
再到consumer
,所以consumer
的8080
无需开放给zookeeper
;
zookeeper
注册中心是完全被动的。
三、总结
-
zookeeper
的2181
端口开放给provider
、consumer
、dubbo-admin
; -
provider
的20880
开放给所有consumer
,但8080
服务器端口可以完全屏蔽; -
consumer
的8080
开放给所有provider
; -
dubbo-admin
的8080
开放给管理员用户,便于通过浏览器监控注册中心服务的情况; -
注册中心只负责
服务注册
和目录发布
,安全授权
,实际的服务访问仍然是两个组件之间的点对点连接完成,这种方式下整个架构下获取更高的性能,同时服务管理平台也不容易成为大并发服务访问下的单点瓶颈。
四、拓展阅读
- 《Dubbo 专栏》
- 点赞
- 收藏
- 关注作者
评论(0)