dubbo介绍

2019-09-28  本文已影响0人  源来是你啊

一.介绍

官网

分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

2019-06-14_145924.png

当服务越来越多时,服务 URL 配置管理变得非常困难,F5 硬件负载均衡器的单点压力也越来越大。 此时需要一个服务注册中心,动态地注册和发现服务,使服务的位置透明。并通过在消费方获取服务提供方地址列表,实现软负载均衡和 Failover,降低对 F5 硬件负载均衡器的依赖,也能减少部分成本。

当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。 这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。

dubbo架构图

dubbo-service-governance.jpg

二.使用

maven

<!--  引入dubbo相关  -->
<dependency>
 <groupId>io.dubbo.springboot</groupId>
 <artifactId>spring-boot-starter-dubbo</artifactId>
 <version>${dubbo.version}</version>
</dependency></pre>

provider

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
​
 <dubbo:application name="poetrycloud-sso" owner="poetrycloud-sso"/>
 <dubbo:registry address="zookeeper://127.0.0.1:2181" check="false" subscribe="false"/>
 <dubbo:protocol name="dubbo" port="20880" />
 <!-- 提供接口 -->
 <dubbo:service interface="com.poetrycloud.service.UserService" ref="userService"/>
 <bean id="userService" class="com.poetrycloud.service.impl.UserServiceImpl"></bean>
</beans>

consumer

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
​
 <dubbo:application name="poetrycloud-sso-web"/>
 <dubbo:annotation package="com.poetrycloud.service" />
 <dubbo:registry check="false" address="zookeeper://127.0.0.1:2181"/>
 <dubbo:reference interface="com.poetrycloud.service.UserService" id="userService"/>
</beans>

功能

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

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

v 服务自动注册与发现,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者

使用协议

Dubbo协议

采用NIO复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用),在大文件传输时,单一连接会成为瓶颈。Dubbo协议缺省每服务每提供者每消费者使用单一长连接,如果数据量较大,可以使用多个连接。示例:

<!--表示该服务使用JVM共享长连接(缺省)-->
<dubbo:service connections=”0”>或<dubbo:reference connections=”0”>
<!--表示该服务使用独立长连接-->
<dubbo:service connections=”1”>或<dubbo:reference connections=”1”>
<!--表示该服务使用独立两条长连接-->
<dubbo:service connections=”2”>或<dubbo:reference connections=”2”>
  1. 参数及返回值需实现Serializable接口

  2. 参数及返回值不能自定义实现List, Map, Number, Date, Calendar等接口,只能用JDK自带的实现,因为hessian会做特殊处理,自定义实现类中的属性值都会丢失。

  3. 只传成员属性值和值的类型,不传方法或静态变量。

  4. 接口增加方法,对客户端无影响,如果该方法不是客户端需要的,客户端不需要重新部署;输入参数和结果集中增加属性,对客户端无影响,如果客户端并不需要新属性,不用重新部署;输入参数和结果集属性名变化,对客户端序列化无影响,但是如果客户端不重新部署,不管输入还是输出,属性名变化的属性值是获取不到的。

Rmi协议

可与原生RMI互操作,基于TCP协议,偶尔会连接失败,需重建Stub。

如果服务接口继承了java.rmi.Remote接口,可以和原生RMI互操作,即:提供者用Dubbo的RMI协议暴露服务,消费者直接用标准RMI接口调用,或者提供方用标准RMI暴露服务,消费方用Dubbo的RMI协议调用。

如果服务接口没有继承java.rmi.Remote接口,缺省Dubbo将自动生成一个com.xxx.XxxService-Remote的接口,并继承java.rmi.Remote接口,并以此接口暴露服务,但如果设置了<dubbo:protocol name="rmi" codec="spring" />,将不生成$Remote接口,而使用Spring的RmiInvocationHandler接口暴露服务,和Spring兼容。

  1. 参数及返回值需实现Serializable接口

  2. dubbo配置中的超时时间对rmi无效,需使用java启动参数设置:-Dsun.rmi.transport.tcp.responseTimeout=3000,参见下面的RMI配置。

Hessian协议

可与原生Hessian互操作,基于HTTP协议,需hessian.jar支持,http短连接的开销大。

  1. 参数及返回值需实现Serializable接口.

  2. 参数及返回值不能自定义实现List, Map, Number, Date, Calendar等接口,只能用JDK自带的实现,因为hessian会做特殊处理,自定义实现类中的属性值都会丢失。

HTTP协议

基于http表单的远程调用协议。

  1. 参数及返回值需符合Bean规范

使用协议示例:

注意,如果使用servlet派发请求:协议的端口<dubbo:protocol port="8080" />必须与servlet容器的端口相同,协议的上下文路径<dubbo:protocol contextpath="foo" />必须与servlet应用的上下文路径相同。

Webservice协议

基于CXF的frontend-simple和transports-http实现,可以和原生WebService服务互操作,即:提供者用Dubbo的WebService协议暴露服务,消费者直接用标准WebService接口调用,或者提供方用标准WebService暴露服务,消费方用Dubbo的WebService协议调用。

  1. 参数及返回值需实现Serializable接口

  2. 参数尽量使用基本类型和POJO。

简易监控中心

Simple监控中心,用来监控与统计框架运行情况,挂掉不会影响到Consumer和Provider之间的调用,所以用于生产环境不会有风险。

管理控制台

依托于web容器(可以直接放到tomcat里),开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能,可以查看提供者和消费者的一些信息,并可以对此进行操作。

配置:

需要查看修改/ROOT/WEB-INF/dubbo.properties文件,配置注册中心和登陆用户密码。

dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

集群使用

特性
容错模式

Failover Cluster

Failfast Cluster

Failsafe Cluster

Failback Cluster

Forking Cluster

Broadcast Cluster

集群模式配置:

<dubbo:service cluster="failsafe" />或者<dubbo:reference cluster="failsafe" />

负载均衡

Random LoadBalance

RoundRobin LoadBalance

LeastActive LoadBalance

ConsistentHash LoadBalance

负载均衡配置:

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

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

可以在方法上配置

<dubbo:method name="..." loadbalance="roundrobin"/>
</dubbo:service>

详细介绍

dubbo源码解析

上一篇下一篇

猜你喜欢

热点阅读