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>
相关推荐
《深入解析dubbox-dubbox-2.8.4a源码》 ...通过深入研究dubbox-dubbox-2.8.4a的源码,开发者不仅可以掌握Dubbo的核心原理,还能了解到服务治理的高级特性,从而提升在分布式系统开发中的专业能力。
- 分析 Dubbox-master 源码可以帮助我们深入理解其内部工作原理,如服务暴露、消费、调用过程,以及各种策略的实现细节。 - 关键类包括 `Invoker`、`Exporter`、`Registry` 和 `Protocol` 等,它们构成了 Dubbo 的...
分布式服务框架 dubbo/dubbox 入门示例 1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少...
01分布式框架-Dubbox 02品牌管理 03规格及模板管理 04安全框架与商家入驻审核 05商品管理1 06商品管理2 07商品管理3 08广告管理与缓存解决方案 9搜索解决方案-Solr-1 10搜索解决方案-Solr-2 11搜索解决方案-Solr-3 ...
《深入剖析Dubbox 2.8.4源码》 Dubbox是基于Apache Dubbo的扩展,它在原生Dubbo的基础上添加了更多的特性和功能...通过深入学习这些源码,开发者可以更好地理解分布式服务框架的运行机制,提升系统设计和优化的能力。
"spring-dubbox-customer"通常用于模拟消费者,进行服务的调用测试。通过模拟消费者端的调用,可以验证生产者的服务是否正常工作,接口是否正确响应。此外,我们还可以利用Spring的测试框架,编写单元测试和集成...
Dubbox,作为一款基于Spring的RPC框架,由当当网开源,是Java开发者们在构建分布式系统时常常选用的工具。它不仅集成了Apache的Dubbo,还包含了更多的扩展功能,如RESTful支持、Hessian2协议等。本文将深入探讨...
├分布式框架-Dubbox> │ ├走进电商> │ │ ├1_01.课程大纲.mp4 │ │ ├2_02.今日目标_01.mp4 │ │ ├3_03.电商行业分析.mp4 │ │ ├4_04.电商行业技术特点.mp4 │ │ └5_05.主要电商模式.mp4 │ ├需求分析与...
# pinyougou 品优购商城项目 技术选型: zookeeper dubbox分布式框架 AngularJS AngularJS-Select2 Spring Data Solr搜索框架 网页静态化技术Freemarker SpringBoot框架 CORS 跨域解决….zip项目工程资源经过严格...
- `dubbo - Alibaba Open Sesame.pdf`可能包含了Dubbox的官方文档,详细介绍框架的特性和使用方法。 - `dubbo相关收集.txt`可能是一份资料集合,可能包含了一些社区的最佳实践和常见问题解答。 总的来说,部署和...
品优购电商系统开发 第1章 分布式框架-Dubbox 第2章 品牌管理 第3章 规格及模板管理 第4章 安全框架与商家入驻审核 第5章 商品录入【1】 第6章 商品录入【2】 第7章 商品修改与审核 第8章 广告管理与缓存解决方案 第...
Dubbox 是由淘宝开源的一个基于 Java 的分布式服务框架,它是基于阿里巴巴的 Dubbo 进行了扩展和优化。Dubbox 提供了更多的特性和更好的社区支持,使其在微服务架构中广泛应用。本篇文章将深入探讨 Dubbox 的核心...
在提供的压缩包文件"springboot-dubbox-simple-master"中,包含了一个完整的Spring Boot + Dubbox整合示例。这个项目已经实现了上述步骤,包括服务提供者和服务消费者,以及基于Avro和Thrift的REST服务。开发者可以...
java二进制补码源码Dubbo是一个来自阿里巴巴的开源分布式服务框架,当当根据自身的需求,为Dubbo实现了一些新的功能,包括REST风格远程调用、Kryo/FST序列化等等,并将其命名为Dubbox。 Demo:类似范例: ##Dubbo...
本教程将详细介绍如何将Spring Boot与Dubbo进行整合,创建一个基于注解的入门实例。 首先,我们需要理解Spring Boot的核心特性。Spring Boot以其“开箱即用”的理念,通过预设配置简化了Spring应用的搭建过程,使得...
flyray-base是一套包括组织机构、角色用户、权限授权、数据权限、内容管理、支付、对账、清结算、客户管理、营销活动、库存管理、搜索模块等分布式框架,使用Spring+SpringMVC+Mybatis+dubbox+redis+rocketmq+elastic...
总结来说,"dubbox-admin2.8.4" 提供了一个集成Dubbo、Zookeeper和Kafka的管理工具,使得开发者可以方便地管理和监控分布式服务。其中,Zookeeper负责服务的注册与发现,Kafka用于优化服务间的通信,而dubbox-admin...
Dubbox-admin 是 Dubbo 框架中的一个关键组件,它提供了一个可视化的管理界面,方便开发者对服务进行监控、管理和调试。 这个“dubbox-admin的war包”实际上是一个 Web 应用程序的归档文件,通常用于在Java Web ...
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....