`
wangmengbk
  • 浏览: 292278 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

分布式框架-Dubbox介绍

SOA 
阅读更多

1. Dubbo是什么?
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架

其核心部分包含:

1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

 2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

2. Dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。      

2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

 

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

 

3 Dubbox  实现原理

 



 节点角色说明:

       Provider: 暴露服务的服务提供方。

       Consumer: 调用远程服务的服务消费方。

       Registry: 服务注册与发现的注册中心。

       Monitor: 统计服务的调用次调和调用时间的监控中心。

       Container: 服务运行容器。

调用关系说明:

0  服务容器负责启动,加载,运行服务提供者。

1. 服务提供者在启动时,向注册中心注册自己提供的服务。

2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Doubbox 特性:

(1) 连通性: 

注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小

监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示 

服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销

服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销 

注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外 

注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者

注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表 

注册中心和监控中心都是可选的,服务消费者可以直连服务提供者

 (2) 健状性:

监控中心宕掉不影响使用,只是丢失部分采样数据

数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务 

注册中心对等集群,任意一台宕掉后,将自动切换到另一台

注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯

服务提供者无状态,任意一台宕掉后,不影响使用 

服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复

 (3) 伸缩性: 

注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心

服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者 

(4) 升级性: 

当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力

 

 4 Dubbox安装部署

  • 前提背景:JDK1.7,maven 已安装
  • 下载解压一个zookeeper,编辑其conf/zoo.cfg后启动zookeeper用作dubbo注册中心:bin/zkServer.sh start 
  • 下载地址:https://github.com/dangdangdotcom/dubbox
  • 下载dubbo.xsd: http://download.csdn.net/download/he000111/8244449
  • Eclipse: 选择 window --> preferences -->XML --> XML  Catalog --> add   在 location:选择dubbox.xsd本地路径;key:  http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  • 在下载的dubbox目录执行mvn install -Dmaven.test.skip=true来尝试编译一下dubbo(并将dubbo的jar安装到本地maven库)
  • 在dubbox根目录执行mvn idea:idea或者mvn eclipse:eclipse,来创建IDE工程文件
  • 将项目导入IDE
  • 用IDE运行/dubbo-demo/dubbo-demo-provider/…/test目录下的DemoProvider启动dubbo服务端,目前他会分别启动dubbo协议(包括用kryo和FST序列化)和REST协议的服务
  • 用IDE运行/dubbo-demo/dubbo-demo-consumer/…/test目录下的DemoConsumer来启动dubbo客户端调用上面的服务端,直接看console的输出即可
  • 用IDE运行/dubbo-demo/dubbo-demo-consumer/…/test目录下的RestClient来启动rest客户端(模拟非dubbo的rest客户端)调用上面的服务端,直接看console的输出即可
  • 可以在浏览器中直接访问http://localhost:8888/services/users/100.xml或者http://localhost:8888/services/users/101.json之类来测试REST服务
  • 了解tomcat和IDE集成的同事,可以直接在IDE中将/dubbo-demo/dubbo-demo-provider/部署到tomcat上,用tomcat的servlet容器来发布REST服务(要同时修改dubbo-demo-provider.xml,请看那个文件中的注释)。(当然也可以在命令行直接mvn package,然后将生成的war部署到外面的tomcat中做测试)
  • 如果想看服务监控效果,或者避免demo抛出找不到监控的异常警告,用IDE运行/dubbo-simple/dubbo-simple-monitor/…/test目录下的SimpleMonitor来启动监控中心即可。                      页面访问:    http://localhost:8080/

 5. Dubbox—负载均衡

在集群负载均衡时,Dubbo提供了多种均衡策略,缺省为random随机调用。 可以自行扩展负载均衡策略,参见:负载均衡扩展 

  • Random LoadBalance 随机,按权重设置随机概率。 在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
  • RoundRobin LoadBalance 轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。
  • LeastActive LoadBalance最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。 使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
  • ConsistentHash LoadBalance 一致性Hash,相同参数的请求总是发到同一提供者。 当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。 缺省只对第一个参数Hash,如果要修改,请配置<dubbo:parameter key="hash.arguments" value="0,1" /> 缺省用160份虚拟节点,如果要修改,请配置<dubbo:parameter key="hash.nodes" value="320" />

 配置如: 

 <dubbo:service interface="..."loadbalance="roundrobin"/>

或 <dubbo:reference interface="..."loadbalance="roundrobin"/>

或: <dubbo:service interface="..."> 

                 <dubbo:methodname="..."loadbalance="roundrobin"/> 

       </dubbo:service> 

或: <dubbo:reference interface="..."> 

                <dubbo:methodname="..."loadbalance="roundrobin"/> 

        </dubbo:reference> 

 

 6 Dubbox实例 & 应用

 

参考dubbox  源码中的 dubbo-demo 模块

对于外部系统使用dubbox:在工程pom.xml 引入jar :

<dependency> <groupId>com.alibaba</groupId> 

<artifactId>dubbo</artifactId> 

<version>2.8.4</version> 

</dependency> 

<dependency>

 <groupId>com.caucho</groupId> 

<artifactId>hessian</artifactId>

 <version>4.0.7</version>

 </dependency>

 

 

 

  • 大小: 22.1 KB
分享到:
评论

相关推荐

    dubbox-dubbox-2.8.4a源码

    《深入解析dubbox-dubbox-2.8.4a源码》 ...通过深入研究dubbox-dubbox-2.8.4a的源码,开发者不仅可以掌握Dubbo的核心原理,还能了解到服务治理的高级特性,从而提升在分布式系统开发中的专业能力。

    分布式服务框架 dubbox

    - 分析 Dubbox-master 源码可以帮助我们深入理解其内部工作原理,如服务暴露、消费、调用过程,以及各种策略的实现细节。 - 关键类包括 `Invoker`、`Exporter`、`Registry` 和 `Protocol` 等,它们构成了 Dubbo 的...

    分布式服务框架 dubbo/dubbox 入门示例

    分布式服务框架 dubbo/dubbox 入门示例 1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少...

    java视频.txt

    01分布式框架-Dubbox 02品牌管理 03规格及模板管理 04安全框架与商家入驻审核 05商品管理1 06商品管理2 07商品管理3 08广告管理与缓存解决方案 9搜索解决方案-Solr-1 10搜索解决方案-Solr-2 11搜索解决方案-Solr-3 ...

    dubbox-dubbox-2.8.4 源码

    《深入剖析Dubbox 2.8.4源码》 Dubbox是基于Apache Dubbo的扩展,它在原生Dubbo的基础上添加了更多的特性和功能...通过深入学习这些源码,开发者可以更好地理解分布式服务框架的运行机制,提升系统设计和优化的能力。

    spring-dubbox:dubbox 生产者

    "spring-dubbox-customer"通常用于模拟消费者,进行服务的调用测试。通过模拟消费者端的调用,可以验证生产者的服务是否正常工作,接口是否正确响应。此外,我们还可以利用Spring的测试框架,编写单元测试和集成...

    dangdang-dubbox:dubbox 源码解析

    Dubbox,作为一款基于Spring的RPC框架,由当当网开源,是Java开发者们在构建分布式系统时常常选用的工具。它不仅集成了Apache的Dubbo,还包含了更多的扩展功能,如RESTful支持、Hessian2协议等。本文将深入探讨...

    品优购电商系统开发

    ├分布式框架-Dubbox&gt; │ ├走进电商&gt; │ │ ├1_01.课程大纲.mp4 │ │ ├2_02.今日目标_01.mp4 │ │ ├3_03.电商行业分析.mp4 │ │ ├4_04.电商行业技术特点.mp4 │ │ └5_05.主要电商模式.mp4 │ ├需求分析与...

    品优购商城项目 技术选型: zookeeper dubbox分布式框架 AngularJS AngularJS-Select2等

    # pinyougou 品优购商城项目 技术选型: zookeeper dubbox分布式框架 AngularJS AngularJS-Select2 Spring Data Solr搜索框架 网页静态化技术Freemarker SpringBoot框架 CORS 跨域解决….zip项目工程资源经过严格...

    dubbox部署说明

    - `dubbo - Alibaba Open Sesame.pdf`可能包含了Dubbox的官方文档,详细介绍框架的特性和使用方法。 - `dubbo相关收集.txt`可能是一份资料集合,可能包含了一些社区的最佳实践和常见问题解答。 总的来说,部署和...

    品优购电商系统

    品优购电商系统开发 第1章 分布式框架-Dubbox 第2章 品牌管理 第3章 规格及模板管理 第4章 安全框架与商家入驻审核 第5章 商品录入【1】 第6章 商品录入【2】 第7章 商品修改与审核 第8章 广告管理与缓存解决方案 第...

    dubbox框架源码和使用实例

    Dubbox 是由淘宝开源的一个基于 Java 的分布式服务框架,它是基于阿里巴巴的 Dubbo 进行了扩展和优化。Dubbox 提供了更多的特性和更好的社区支持,使其在微服务架构中广泛应用。本篇文章将深入探讨 Dubbox 的核心...

    springboot-dubbox-simple:Dubbox整合Spring Boot基于Avro,Thrift协议构建REST服务

    在提供的压缩包文件"springboot-dubbox-simple-master"中,包含了一个完整的Spring Boot + Dubbox整合示例。这个项目已经实现了上述步骤,包括服务提供者和服务消费者,以及基于Avro和Thrift的REST服务。开发者可以...

    java二进制补码源码-DubboxDemo:dubbox的介绍和简单示例

    java二进制补码源码Dubbo是一个来自阿里巴巴的开源分布式服务框架,当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等,并将其命名为Dubbox。 Demo:类似范例: ##Dubbo...

    spring-boot-dubbo

    本教程将详细介绍如何将Spring Boot与Dubbo进行整合,创建一个基于注解的入门实例。 首先,我们需要理解Spring Boot的核心特性。Spring Boot以其“开箱即用”的理念,通过预设配置简化了Spring应用的搭建过程,使得...

    flyray-base分布式基础框架.rar

    flyray-base是一套包括组织机构、角色用户、权限授权、数据权限、内容管理、支付、对账、清结算、客户管理、营销活动、库存管理、搜索模块等分布式框架,使用Spring+SpringMVC+Mybatis+dubbox+redis+rocketmq+elastic...

    dubbox-admin2.8.4

    总结来说,"dubbox-admin2.8.4" 提供了一个集成Dubbo、Zookeeper和Kafka的管理工具,使得开发者可以方便地管理和监控分布式服务。其中,Zookeeper负责服务的注册与发现,Kafka用于优化服务间的通信,而dubbox-admin...

    dubbox-admin的war包

    Dubbox-admin 是 Dubbo 框架中的一个关键组件,它提供了一个可视化的管理界面,方便开发者对服务进行监控、管理和调试。 这个“dubbox-admin的war包”实际上是一个 Web 应用程序的归档文件,通常用于在Java Web ...

    springboot 整合dubbo分布式框架

    springboot 整合dubbo分布式框架 spring.dubbo.application.name=provider spring.dubbo.registry.address=zookeeper://127.0.0.1:2181 spring.dubbo.protocol.name=dubbo spring.dubbo.protocol.port=20880 spring....

Global site tag (gtag.js) - Google Analytics