Dubbo是一个分布式服务架构,致力于提供高性能和透明化的PRC远程服务调用方案,以及SOA(程序不一样单元和功能经过约定的接口联系起来)服务治理方案。git
soa架构:
面向服务的架构,它将应用程序的不一样功能单元(称为服务)经过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操做系统和编程语言。这使得构建在各类这样的系统中的服务能够以一种统一和通用的方式进行交互。
如何实现远程通讯:github
底层传输协议 | 传输速度 | 特色 | 共同点 | 适用场景 | |
socket | UDP或TCP | 最快 | 开发步骤繁琐 | 被多种操做系统/开发语言支持 | socket适用于对传输速度和执行效率要求高的场合。如高并发、大流量的Client - Server通讯。 |
Rest WebService | HTTP | 通常 | 非标准 | (同上) | Rest WebService适用于开发专用的系统或功能,或者移动客户端(手机/平板等)与服务器的通讯。 Rest WebService的数据传输量比传统WebService要小,有利于节约流量。 |
传统WebService | SOAP | 最慢 | 标准,通用 | 标准,通用 | 传统WebService适用于开发传统的web项目或者通用功能(如天气预报、手机号归属地查询等便民服务)。 它是四种远程调用技术中在互联网上应用最为普遍的。 |
当服务增多,须要管理服务,提升机器利用率,资源调度和治理中心(SOA)是关键
Dubbo就是资源调度和治理中心的管理工具
web
Container: 服务运行容器。
注册中心
注册中心负责服务地址的注册与查找,至关于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。使用dubbo-2.3.3以上版本,建议使用zookeeper注册中心。
Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变动推送,适合做为Dubbo服务的注册中心,工业强度较高,可用于生产环境,并推荐使用
Zookeeper的安装:
第一步:安装jdk
第二步:解压缩zookeeper压缩包
第三步:将conf文件夹下zoo_sample.cfg复制一份,更名为zoo.cfg
第四步:修改配置dataDir属性,指定一个真实目录spring
Dubbo基于spring的schema扩展进行加载
单一工程中的spring配置apache
<bean id="xxxService" class="com.xxx.XxxServiceImpl" /> <bean id="xxxAction" class="com.xxx.XxxAction"> <property name="xxxService" ref="xxxService" /> </bean>
远程服务
将local.xml配置拆分红两份,将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml。
而后提供方暴露服务:
<beans xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation= http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd> <!-- 和本地服务同样实现远程服务 --> <bean id="xxxService" class="com.xxx.XxxServiceImpl" /> <!-- 使用dubbo发布服务 --> <!-- 提供方应用信息,用于计算依赖关系 --> <dubbo:application name="hello-world-app" /> <dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183" /> <!-- 用dubbo协议在20880端口暴露服务 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 声明须要暴露的服务接口 --> <dubbo:service interface="com.xxx.XxxService" ref="xxxService" /> <dubbo:service interface="com.xxx.XxxService" ref="xxxService" /> <beans>
消费方引用服务:
<dubbo:application name="hello-world-app"/> <dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"/> <!-- 增长引用远程服务配置 --> <dubbo:reference id="xxxService" interface="com.xxx.XxxService" /> <!-- 和本地服务同样使用远程服务 --> <bean id="xxxAction" class="com.xxx.XxxAction"> <property name="xxxService" ref="xxxService" /> </bean>
maven添加Dubbo依赖:缓存
<!-- dubbo相关 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <!-- 排除依赖 --> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring</artifactId> </exclusion> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> </dependency> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> </dependency>