InfoQ 极客传媒 15 周年庆征文|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上暴露服务,配置如下:
端口开放情况
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 专栏》
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/3b906f8dcc385c2bdd6ca3a4e】。文章转载请联系作者。










评论