Dubbo服务介绍

一、RPC远程调用协议

在认识Dubbo框架之前,首先了解一下Dubbo使用的协议:

协议就是多方共同遵守的一种规范、一种约束。Http超文本传输协议、RPC远程调用协议都是我们平时开发中比较常见的,有了这些协议的存在,计算机就可以使用相互理解的格式来读写数据,达到交换数据的目的。而这里要说的RPC协议的作用就是使计算机之间相互的调用更加方便、更加快捷,它将底层的数据传输和网络访问这些复杂内容给屏蔽了,我们就不需要再关注它底层具体的实现而是直接使用就行了。Dubbo就是基于RPC远程调用协议来实现的。

二、RPC框架Dubbo简介

Dubbo官网(中文):http://dubbo.apache.org/zh-cn/

Dubbo是国内互联网大厂阿里巴巴集团开发的一款RPC框架,(目前已经被收入到了Apache基金会的孵化器项目)。Dubbo基于RPC协议来实现,他的主要功能就是在分布式应用开发中的计算机系统之间进行方法调用。

2.1Dubbo几个重要组件

1. Dubbo架构图

在这里插入图片描述

2. 节点角色说明

在这里插入图片描述

3.调用关系说明
在这里插入图片描述

2.2 国内外其他类似Dubbo的RPC框架

  1. 新浪:Motan
    https://github.com/weibocom/motan

  2. 当当:Dubbox
    https://github.com/dangdangdotcom/dubbox

  3. 谷歌:grpc
    前两个是基于java语言和spring进行集成的,谷歌的grpc是跨语言的。大家有兴趣可以在网上了解一下。

2.3 Dubbo的功能介绍

  1. 远程调用

实现透明的远程方法调用,在分布式应用系统中,调用其他服务器上的服务(功能)就像调用本地方法一样,不需要关注怎么实现,只需要配置一下即可使用

  1. 服务注册和服务发现

通过注册中心实现服务的动态管理(增减服务方),调用服务的消费方不需要写死服务调用地址。

  1. 软件的负载均衡和容错机制,不需要使用硬件,降低成本。

2.4 Duboo服务的实现原理

在这里插入图片描述
  现在有一个调用端(消费者)和服务端(服务提供者)分别在两个不同的服务器上,消费者需要访问使用提供者的一个功能,首先Dubbo框架会在调用端生成一个服务端的代理对象。整个功能调用的过程就是消费者——》代理对象——》提供者

三、Dubbo框架支持的协议

Dubbo是基于RPC协议实现的,RPC协议是一个大的协议,另外还有很多协议来支持RPC。

dubbo协议:这是Dubbo框架自己定义的协议,用来支持RPC远程调用。

hessian协议:实现轻量级RPC框架Hessian。

rmi协议:sun公司制定的远程调用协议。

http协议:超文本传输协议。

webservice协议:

thrift协议

memcached协议

redis协议

Dubbo官网推荐使用dubbo协议,制定使用的协议可以在spring的配置文件中使用以下标签:

<dubbo:protocol name="dubbo" port="20880" />

dubbo协议使用的是单一长链接和异步通讯,适合小数据量大并发的服务调用以及服务消费者机器远多于服务提供者机器的情况(互联网特征),不适合大数据量的服务,比如传文件,视频等(主要原因是使用的单一长链接限制)。

	异步:多个线程同时进行(效率高)
	同步:排队形式,多个线程一个一个的处理(效率低)
  • 单一长链接
    在这里插入图片描述

为什么dubbo协议要使用单一长链接?
  长链接一经打开就不关闭,提高了网络链接的效率(因为网络链接比较耗时,TCP协议经过三次握手才能建立链接)。因为长链接不关闭的特征,网络连接在用户频繁进行数据交互的时候不需要频繁的建立链接、关闭链接

另外单一长链接为什么适合小数据量呢?
  这是因为如果数据太大了就会让链接通道堵塞住,那样效率自然也就慢下来了,试想现在有根水管,本来输送水效果挺好,你非要往里面塞块砖头,那不很easy就造成通道堵塞了嘛!通道堵了后面要送的东西就只能排队等待了。

这就是dubbo使用单一长链接的原因。

  • 短连接
    在这里插入图片描述

用户想要访问一个应用,先建立一个短连接,用完之后短连接就关闭了,服务端维护该链接的资源也就释放了,对呀服务端来说他维护的资源也就少一些了。如果再有请求过来,又需要再建立一条链接。用户必须要等到链接建立之后才能发送请求。时间或长或短不一定,对于用户来说,他发送一个请求可能因为链接没有建立需要的时间比较长。

总结:

1.长链接是为了提高传输的效率,让我们能够以更快的速度响应出结果。服务器与服务器之间一般使用的是长链接,单一持久的发生服务调用。

2.短连接对于服务器来说占用的资源比较少,一般web项目使用的短连接的方式。用完就释放了。

四、Duboo配置文件常用标签

Dubbo官网配置文件标签介绍:http://dubbo.apache.org/zh-cn/docs/user/references/xml/dubbo-service.html

  1. 公用标签
    在服务提供者和服务消费者配置文件中都会使用到的配置标签
<dubbo:application/> 和<dubbo:registry/>
  1. 服务提供者专用
  • 配置访问服务提供者的协议信息
<dubbo:protocol name="dubbo" port="20880"/>`
  • 配置暴露的服务
<dubbo:service interface="服务接口名" ref="服务实现对象bean">
  1. 服务消费者
<dubbo:reference id="服务接口名" ref="服务实现对象bean">

具体的配置文件详解网站上有很多。推荐一篇:https://www.cnblogs.com/chanshuyi/p/5144288.html

五、注册中心

对于服务提供者来说,他需要发布服务,而且由于应用系统的复杂性,服务的数量和类型也不断膨胀;对于服务消费者来说,它最关心的是如何获取到他需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。而使用注册中心对服务进行统一管理能够有效的优化服务提供和消费的流程。Dubbo提供的注册中心有以下几种:

Multicast注册中心:组播方式
Redis注册中心:使用Redis作为注册中心
Simple注册中心:就是一个dubbo服务。作为注册中心。提供查找服务的功能。
Zookeeper注册中心:使用Zookeeper作为注册中心。

以上四种注册中心主要使用的是zookeeper注册中心。

在这里插入图片描述解释一下上图:

1.首先注册中心启动运行,然后运行服务提供者,再运行服务消费者

2…服务提供者会将自己的所在IP、端口、服务的名字登记到注册中心,注册中心形成一个服务注册列表,上面记载了所有的服务的信息。

3.消费者在启动之后,先想注册中心发起订阅,告诉注册中心需要使用dubbo服务,注册中心根据消费者的信息把可用的服务者信息提供给消费者。消费者利用负载均衡从多个服务中选择一个性能较优的使用。
  
  Zookeeper还有一个心跳机制,默认是每隔2S向Dubbo服务发起请求,检验dubbo服务是否存活可用,如果服务不可用(比如服务提供者宕机了),zookeeper就会将该服务从注册列表中删除,然后再向消费者推送服务变更信息,这样一来,消费者拿到的永远都是存活可用的服务了。
  
  其实以上内容在Dubbo官网中有很多的介绍,关于注册中心zookeeper的安装和使用后面陆续更新。

原文地址:https://www.cnblogs.com/wgty/p/12810505.html