他是一个微服务框架, 阿里接手维护,目前是apache 下的一个开源框架,

dubbo 的核心概念就是服务,一个服务代表一组rpc 方法的集合,

服务面向用户编程,服务发现机制的基本单位。

dubbo 的开发流程是,用户定义rpc 服务,通过约定配置方式将rpc 声明未Dubbo 服务,

2. 开发这些服务的api,就是实现他们,

3. 对服务提供者来说是提供rpc 服务的具体实现

4,对消费者来说是使用约定好参数调用服务

服务发现

服务发现是指,消费端自动发现服务地址列表的能力,借助于自动化服务发现,微服务之间可以再无需感知的对端部署位置与ip 地址的情况下通信

实现服务发现的方式有多种,dubbo 提供了一种client -based 的服务发现机制,通常还需要部署额外的迪桑发注册中心组件来协调服务发现的过程如,consul ,zookeeper,

服务发现的一个核心组件是注册中心,provider 注册地址到注册中心,consumer 从注册中心读取和订阅provider 地址列表,因此移动服务发现,需要增加注册中心配置

# application.properties
dubboregistryaddress: 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<html><body>Hello World</body>
</html>

即使编码协议也就是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 服务开发,而配置中心、元数据中心则会在微服务演进的过程中逐步的按需被引入进来。

  • 注册中心。协调 Consumer 与 Provider 之间的地址注册与发现
  • 配置中心。
    • 存储 Dubbo 启动阶段的全局配置,保证配置的跨环境共享与全局一致性
    • 负责服务治理规则(路由规则、动态配置等)的存储与推送。
  • 元数据中心。
    • 接收 Provider 上报的服务接口元数据,为 Admin 等控制台提供运维能力(如服务测试、接口文档等)
    • 作为服务发现机制的补充,提供额外的接口/方法级别配置信息的同步能力,相当于注册中心的额外扩展

Dubbo 是什么?相关推荐

  1. SpringBoot (七) :SpringBoot 整合dubbo

    Dubbo是什么 Dubbo是alibaba的一款开源软件,它是基于java的RPC调用框架. Dubbo主要提供了三种功能: 提供了基于接口的远程调用接口 容错性和负载均衡 服务自动注册及发现 安装 ...

  2. Dubbo 18 问

    dubbo是什么 dubbo是一个分布式框架,远程服务调用的分布式框架,其核心部分包含: 集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集 ...

  3. 如何参与贡献Dubbo社区

    如何参与贡献Dubbo社区 文字版首发于dubbo.io官网:http://dubbo.apache.org/zh-cn/blog/how-to-involve-dubbo-community.htm ...

  4. Spring 集成dubbo 找不到dubbo.xsd 文件的问题的想法概述

    想法概述: 网上的很多关于找不到dubbo.xsd 都是指向的原因是: 阿里的这个域名(http://code.alibabatech.com/schema/dubbo/dubbo.xsd)已经停用了 ...

  5. dubbo入门--Hello World

    Dubbo入门--Hello World 转载自:http://blog.csdn.net/hanmov/article/details/66973957?locationNum=2&fps= ...

  6. Dubbo的使用及原理浅析.

    前面几个博文中关于SSM 框架已经搭建完成, 这里来讲下项目中使用到的Dubbo以及自己了解到的关于Dubbo的一些知识. Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天 ...

  7. 2016.1.20 dubbo启动之后机器ip有问题

    环境 100.0.4.222  zookerper  2182 100.0.4.221  dubbo        20871 1.问题    dubbo  对应的机器ip 是202.106.199. ...

  8. http和dubbo的区别_(转载)Dubbo 接口是什么? 与http 接口有什么区别

    面试的时候会被问到 除了http  https 请求外 有接触了解到其他的接口么? 一,什么是Dubbo 接口 Dubbo 接口是阿里巴巴开源的致力于提供高性能和透明化的RPC远程服务调用方案,以及S ...

  9. kafka实现异步发送_Kafka 异步消息也会阻塞?记一次 Dubbo 频繁超时排查过程

    线上某服务 A 调用服务 B 接口完成一次交易,一次晚上的生产变更之后,系统监控发现服务 B 接口频繁超时,后续甚至返回线程池耗尽错误 Thread pool is EXHAUSTED.因为服务 B ...

  10. cstring只获取到第一个数_一文讲透 Dubbo 负载均衡之最小活跃数算法

    (给ImportNew加星标,提高Java技能) 作者:why技术(本文来自作者投稿) 本文是对于Dubbo负载均衡策略之一的最小活跃数算法的详细分析.文中所示源码,没有特别标注的地方均为2.6.0版 ...

最新文章

  1. request中的内容存储_宜信开源|调用链系列(3):解读UAVStack中的调用链技术...
  2. 《C Primer Plus(第6版)中文版》一第1章 初识C语言1.1 C语言的起源
  3. w7 全网架构-rsync-备份
  4. vue mock模拟后台接口数据
  5. DEFINE_PER_CPU
  6. 拼音输入法功能大比拼
  7. 虚拟云服务器有哪些,虚拟云主机和服务器有什么区别
  8. DataGrid 导出到 Excel 的帮助类
  9. 一、初识函数定义与调用
  10. B2B2C-2 品牌管理-2-品牌列表的实现
  11. Ruby 之父:编程要给程序员带来乐趣
  12. java 自循环_java自学之:循环问题
  13. ADO.NET数据库编程
  14. 计算机电路电子技术试题答案,数字电子技术基础试题及答案
  15. 21种常见产品的电磁兼容检测项目与检测标准
  16. 使用js正则表达式验证
  17. 营业执照遗失该如何处理
  18. 阿里原来这么容易就能进去…
  19. 簇(cluster)
  20. 好记性不如烂笔头(2)

热门文章

  1. [快刀青衣]文章列表
  2. HCIA------OSI、TCP和IP
  3. 2018ap计算机考试时间,ap2018年考试时间是什么时候
  4. 【windows下】带绘图功能的截图软件
  5. 脱离鼠标的编辑神器--vi/vim
  6. python最强表白神器_「含蓄优雅表白神器」程序员式用python代码画爱心(附详细教程)...
  7. 青瓦长忆旧事雨,朱伞深巷无故人。。。
  8. 计算机共享cmd,cmd共享打印机打印
  9. 超声波的四个特性_四大特性让超声波成为液位测量的常见液位计
  10. SpringMVC使用 POJO 对象绑定请求参数值