他是一个微服务框架, 阿里接手维护,目前是apache 下的一个开源框架,
dubbo 的核心概念就是服务,一个服务代表一组rpc 方法的集合,
服务面向用户编程,服务发现机制的基本单位。
dubbo 的开发流程是,用户定义rpc 服务,通过约定配置方式将rpc 声明未Dubbo 服务,
2. 开发这些服务的api,就是实现他们,
3. 对服务提供者来说是提供rpc 服务的具体实现
4,对消费者来说是使用约定好参数调用服务
服务发现
服务发现是指,消费端自动发现服务地址列表的能力,借助于自动化服务发现,微服务之间可以再无需感知的对端部署位置与ip 地址的情况下通信
实现服务发现的方式有多种,dubbo 提供了一种client -based 的服务发现机制,通常还需要部署额外的迪桑发注册中心组件来协调服务发现的过程如,consul ,zookeeper,
服务发现的一个核心组件是注册中心,provider 注册地址到注册中心,consumer 从注册中心读取和订阅provider 地址列表,因此移动服务发现,需要增加注册中心配置
# application.properties
dubbo
registry
address: zookeeper://127.0.0.1:2181
协议
dubbo3 提供了triple 协议,这是dubbo 框架的原生协议,他还支持第三方协议,grpc,thrift,Rest,
rpc 协议的选择,协议是rpc 的核心 ,他规范了数据再网络中的传输方式和传输内容,出非必须的请求,响应数据外,通常还会包含额外的控制数据,如单次请求牛的序列化方式,超时时间,压缩方式和鉴权信息。
协议的内容包含三部分:
1, 数据交换格式:定义rpc 的请求和响应对象在网络传输中的字节流内容,也叫做序列化方式
2,协议结构: 定义包含字段列表和各个字段语义及字段的排列方式
3,协议通过第一规则,格式,语义来约定数据如何在网络间传输,一次成功额rpc需要通信的两端都能按照协议约定进行网络字节流的读写和对象转换。
总结:
rpc 是远程过程调用,其调用协议通常包含传输协议和序列化协议,
传输协议包含: grpc, thrift ,rest ,dubbo 的triple ,
序列化协议包含;基于文本编码的xml ,, json , 也有二进制编码的protobuf 、 和hession 等
作者:知乎用户
链接:https://www.zhihu.com/question/41609070/answer/191965937
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
为什么要使用自定义 tcp 协议的 rpc 做后端进程通信?
要解决这个问题就应该搞清楚 http 使用的 tcp 协议,和我们自定义的 tcp 协议在报文上的区别。
首先要否认一点 http 协议相较于自定义tcp报文协议,增加的开销在于连接的建立与断开。http协议是支持连接池复用的,也就是建立一定数量的连接不断开,并不会频繁的创建和销毁连接。二一要说的是http也可以使用protobuf这种二进制编码协议对内容进行编码,因此二者最大的区别还是在传输协议上。
通用定义的http1.1协议的tcp报文包含太多废信息,一个POST协议的格式大致如下
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
Hello World
即使编码协议也就是body是使用二进制编码协议,报文元数据也就是header头的键值对却用了文本编码,非常占字节数。如上图所使用的报文中有效字节数仅仅占约 30%,也就是70%的时间用于传输元数据废编码。当然实际情况下报文内容可能会比这个长,但是报头所占的比例也是非常可观的。
那么假如我们使用自定义tcp协议的报文如下
报头占用的字节数也就只有16个byte,极大地精简了传输内容。
这也就是为什么后端进程间通常会采用自定义tcp协议的rpc来进行通信的原因
简单来说成熟的rpc库相对http容器,更多的是封装了“服务发现”,"负载均衡",“熔断降级”一类面向服务的高级特性。可以这么理解,rpc框架是面向服务的更高级的封装。如果把一个http servlet容器上封装一层服务发现和函数代理调用,那它就已经可以做一个rpc框架了。
所以为什么要用rpc调用?
因为良好的rpc调用是面向服务的封装,针对服务的可用性和效率等都做了优化。单纯使用http调用则缺少了这些特性
(此处为引用知乎用户)
tcp 和 udp 都是依靠socket 的网络通讯基本的操作单元
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接,UDP连接同理
dubbo 三大组件
以上三个中心并不是运行 Dubbo 的必要条件,用户完全可以根据自身业务情况决定只启用其中一个或多个,以达到简化部署的目的。通常情况下,所有用户都会以独立的注册中心 开始 Dubbo 服务开发,而配置中心、元数据中心则会在微服务演进的过程中逐步的按需被引入进来。