通过Dubbo开发的程序,在做防火墙安全策略的时候需要知道各部分使用了哪些端口,本文简单概括了Dubbo各模块之间的端口通信情况。
1、dubbo生产者、消费者与注册中心zookeeper之间的通信过程
先说一下整个系统框架的基本构造:
zookeeper作为注册中心,使用单独服务器,占用2181端口;
dubbo-admin作为监控中心,与zookeeper使用相同服务器,tomcat部署占用8080端口;
provider作为提供者,使用单独服务器,tomcat部署占用8080端口,使用dubbo协议开放20880端口;
consumer作为消费者,使用单独服务器,tomcat部署占用8080端口。
如图所示:
2、端口开放情况
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注册中心是完全被动的。
3、总结一下
zookeeper的2181开放给provider、consumer、dubbo-admin;
provider的20880开放给所有consumer,但8080服务器端口可以完全屏蔽;
consumer的8080开放给所有provider;
dubbo-admin的8080开放给管理员用户,便于通过浏览器监控注册中心服务的情况。
总结:注册中心只负责服务注册和目录发布,安全授权,实际的服务访问仍然是两个组件之间的点对点连接完成,这种方式下整个架构下获取更高的性能,同时服务管理平台也不容易成为大并发服务访问下的单点瓶颈。