dubbo是一个分布式架构的服务框架,一般结合maven的模块式开发使用。
传统的单架构项目,不方便维护和升级;
通过maven的模块式开发,就可以把一个单架构的工程,拆封成一个一个的小模块,包括(jar和war);jar包可以被war包直接应用。war包可以分布式部署,但是这样不同的war之间的交互就成为了问题。
我们之前的做法是,两个war之间进行交互时,一般采用webservice或httpclient。但是在这种分布式架构中,多个war之间的交互会特别频繁,如果用webservice或httpclient架构师很多时候自己都搞不清楚他们之间的依赖关系了。而dubbo解决了这个问题,有了dubbo架构以后,多个war之间不在直接进行交互,而是统一和dubbo的注册中心zookeeper进行交互。无论是发布服务还是调用服务,都通过dubbo实现,并且提供了web页面,来监控和管理各个接口直接的调用。
使用时首先搭建dubbo的注册中心zookeeper,然后下载dubbo的服务治理工程dubbo_admin.war,解压修改他的配置文件dubbo.properties,设置用户名、密码和注册中心zookeeper的ip、端口。部署到Tomcat的webapp中,启动Tomcat,浏览器用ip+端口访问,就可以看到dubbo_admin的web页面了。接着在我们要发布或者调用服务的项目中,导入dubbo提供的相关jar包,加载配置文件,把要发布的服务注册到zookeeper里边。或者从zookeeper里边调用服务就可以了。dubbo_admin的web页面中,可以监控和管理所有的服务提供者和调用者。
在dubbo架构中,service接口和实体对象是各个工程共享的,service实现类是发布服务的工程独有的。只需要发布服务的工程把他的接口注册到zookeeper中,其他工程就可以从zookeeper中进行调用了。
用dubbo的好处是:把项目拆分成各个独立的小工程,通过接口调用方式,互相交互数据,可以单独进行部署和升级,这样就减少了他们直接的耦合性和代码的复用性。还可以针对不同模块采用不同的部署策略,比如订单模块并发比较高,所以可以把订单模块这个war包,单独部署多套,都注册到同一个zookeeper中。当客户端调用时,zookeeper会帮忙进行负载处理。
Zookeeper主要功能是为分布式系统提供一致性协调(Coordination)服务,主要有两大功能:统一配置管理和集群负载均衡,
统一配置管理:分布式系统都有好多机器,这些机器上边的配置是一致的,正常情况下需要修改好一个以后,然后scp到其他服务器,每次修改,就要把所有的配置都修改一遍,Zookeeper提供了这样的一种服务:一种集中管理配置的方法,我们在这个集中的地方修改了配置,所有对这个配置感兴趣的都可以获得变更。这样就省去手动拷贝配置了,还保证了可靠和一致性。
集群负载均衡:在分布式的集群中,经常会由于各种原因,比如硬件故障,软件故障,网络问题,有些节点会进进出出。有新的节点加入进来,也有老的节点退出集群。这个时候,集群中有些机器(比如Master节点)需要感知到这种变化,然后根据这种变化做出对应的决策。Zookeeper会对通过选举机制,选举一个主节点作为管理者。选举一般都是奇数台,否则会选举失败。并且集群中,有半数以上宕机,则会认为整个集群挂掉。
我们项目中用到Zookeeper的地方主要有:solr集群、redis集群和dubbo注册中心。