dubbo

SOA架构
SOA (Service-Oriented Architecture),即⾯向服务的架构。其思想就是根据实际业务,把系统拆分成
合适的、独⽴部署的模块,模块之间相互独⽴(通过Webservice/Dubbo等技术进⾏通信)。因此衍⽣
出了⼀系列相应的技术,如对服务提供、服务调⽤、连接处理、通信协议、序列化⽅式、服务发现、服
务路由、⽇志输出等⾏为进⾏封装的服务框架。
 

 

 

 

 

 

 

 

 

 

 

 

⼀次服务调⽤过程:

 

 

 

 

 

 

完整的RPC架构图
在⼀个典型 RPC 的使⽤场景中,包含了服务发现、负载、容错、⽹络传输、序列化等组件,其
中“RPC 协议”就指明了程序如何进⾏⽹络传输和序列化。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

序列化和反序列化
客户端怎么把参数值传给远程的函数呢?
在本地调⽤中,我们只需要把参数压到栈⾥,然后让函数⾃⼰去栈⾥读就⾏。
但是在远程过程调⽤时,客户端跟服务端是不同的进程,不能通过内存来传递参数。
这时候就需要客户端把参数先转成⼀个字节流,传给服务端后,再把字节流转成⾃⼰能读取的格式。
只有⼆进制数据才能在⽹络中传输,序列化和反序列化的定义是:
将对象转换成⼆进制流的过程叫做序列化
将⼆进制流转换成对象的过程叫做反序列化
这个过程叫序列化和反序列化。同理,从服务端返回的值也需要序列化反序列化的过程。常⻅的序列化⽅式有:
Hessian 是动态类型、⼆进制、紧凑的,并且可跨语⾔移植的⼀种序列化框架。Hessian 协议要⽐
JDK、JSON 更加紧凑,性能上要⽐ JDK、JSON 序列化⾼效很多,⽽且⽣成的字节数也更⼩。
Protobuf 是 Google 公司内部的混合语⾔数据标准,是⼀种轻便、⾼效的结构化数据存储格式,
可以⽤于结构化数据序列化,⽀持 Java、Python、C++、Go 等语⾔。序列化后体积相⽐ JSON、
Hessian ⼩很多;
Thrift是Facebook开源提供的⼀个⾼性能,轻量级RPC服务框架,其产⽣正是为了满⾜当前⼤数据
量、分布式、跨语⾔、跨平台数据通讯的需求。
⽹络传输
⽹络传输:远程调⽤往往⽤在⽹络上,客户端和服务端是通过⽹络连接的。
所有的数据都需要通过⽹络传输,因此就需要有⼀个⽹络传输层。⽹络传输层需要把 Call ID 和序列化
后的参数字节流传给服务端,然后再把序列化后的调⽤结果传回客户端。
只要能完成这两者的,都可以作为传输层使⽤。因此,它所使⽤的协议其实是不限的,能完成传输就
⾏。 ⼤部分 RPC 框架都使⽤ TCP 协议,但其实 UDP 也可以。
TCP 的连接是最常⻅的,简要分析基于 TCP 的连接:通常 TCP 连接可以是按需连接(需要调⽤的时候就
先建⽴连接,调⽤结束后就⽴⻢断掉),也可以是⻓连接(客户端和服务器建⽴起连接之后保持⻓期持
有,不管此时有⽆数据包的发送,可以配合⼼跳检测机制定期检测建⽴的连接是否存活有效),多个远程
过程调⽤共享同⼀个连接。
所以,要实现⼀个 RPC 框架,只需要把以下三点实现了就基本完成了:
Call ID 映射:可以直接使⽤函数字符串,也可以使⽤整数 ID。映射表⼀般就是⼀个哈希表。
序列化反序列化:可以⾃⼰写,也可以使⽤ Protobuf 或者 FlatBuffers 之类的。
⽹络传输库:可以⾃⼰写 Socket,或者⽤ Asio,ZeroMQ,Netty 之类。
 
 

 

 

 
 

 

 

 

 

 

 

 

 

 

 

dubbo和springcloud的区别

 

 

spring cloud子项目包括:

Spring Cloud Config:配置管理开发工具包,可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。

Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。

Spring Cloud Netflix:针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。

Netflix Eureka:云端负载均衡,一个基于 REST 的服务,用于定位服务,以实现云端的负载均衡和中间层服务器的故障转移。

Netflix Hystrix:容错管理工具,旨在通过控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

Netflix Zuul:边缘服务工具,是提供动态路由,监控,弹性,安全等的边缘服务。

Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。

Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。

Spring Cloud Sleuth:日志收集工具包,封装了Dapper,Zipkin和HTrace操作。

Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。

Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。

Spring Cloud Consul:封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。

Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。

Spring Cloud Stream:数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。

Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件。

 

 

二、整体比较

1、dubbo由于是二进制的传输,占用带宽会更少

2、springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大

3、dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决

4、springcloud的接口协议约定比较自由且松散,需要有强有力的行政措施来限制接口无序升级

5、dubbo的注册中心可以选择zk,redis等,springcloud的注册中心用eureka或者Consul

 

 

 

 

 

springboot和dubbo整合 的⼏种⽅式:
XML⽅式
1. 配置dobbo-provider.ml
注解⽅式
1. DubboProviderConfig
 
常⽤配置

 

 

 
不同粒度配置的覆盖关系
-- ⽅法级优先,接⼝级次之,全局配置再次之。
-- 如果级别⼀样,则消费⽅优先,提供⽅次之
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2021-07-25 15:25  悬崖听风098  阅读(203)  评论(0编辑  收藏  举报