一 分布式调用大致上就分为两类,RPC式的,REST式的,二者的区别主要是就是:html
1. RPC是面向动做的(方法调用)web
2. REST是面向资源的(URL表示资源,HTTP动词表示动做)编程
从变现形式来看,RPC的编程模型较重量级,REST的编程模型更轻量级json
首先解释下两种接口调用:api
Rest:严格意义上说接口很规范,操做对象即为资源,对资源的四种操做(post、get、put、delete),而且参数都放在URL上,服务器
可是不严格的说Http+json、Http+xml,常见的http api均可以称为Rest接口。restful
Rpc: 咱们常说的远程方法调用,就是像调用本地方法同样调用远程方法,通讯协议大多采用二进制方式网络
四 http vs 高性能二进制协议
http相对更规范,更标准,更通用,不管哪一种语言都支持http协议。架构
若是你是对外开放API,例如开放平台,外部的编程语言多种多样,你没法拒绝对每种语言的支持,框架
相应的,若是采用http,无疑在你实现SDK以前,支持了全部语言,
因此,如今开源中间件,基本最早支持的几个协议都包含RESTful。
RPC协议性能要高的多,例如Protobuf、Thrift、Kyro等,
(若是算上序列化)吞吐量大概能达到http的二倍。响应时间也更为出色。
千万不要小看这点性能损耗,公认的,微服务作的比较好的,例如,netflix、阿里,曾经都传出过为了提高性能而合并服务。
若是是交付型的项目,性能更为重要,由于你卖给客户每每靠的就是性能上微弱的优点。
不管是Google、Amazon、netflix(听说极可能转向grpc),仍是阿里,实际上内部都是采用性能更高的RPC方式。而对外开放的才是RESTful。
Rest 调用及测试都很方便,Rpc就显得有点麻烦,可是Rpc的效率是毋庸置疑的,因此建议在多系统之间采用Rpc,对外提供服务,Rest是很适合的
duboo在生产者和消费者两个微服务之间的通讯采用的就是Rpc,无疑在服务之间的调用Rpc更变现的优秀
五 Rpc在微服务中的使用
一、 RPC 框架是架构微服务化的首要基础组件 ,
它能大大下降架构微服务化的成本,提升调用方与服务提供方的研发效率,屏蔽跨进程调用函数(服务)的各种复杂细节
二、RPC 框架的职责是:
让调用方感受就像调用本地函数同样调用远端函数、让服务提供方感受就像实现一个本地函数同样来实现服务
RPC的好处:
RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。
为实现该目标,RPC 框架需提供一种透明调用机制让使用者没必要显式的区分本地调用和远程调用。
服务化的一个好处就是,不限定服务的提供方使用什么技术选型,可以实现大公司跨团队的技术解耦。
若是没有统一的服务框架,RPC框架,
各个团队的服务提供方就须要各自实现一套序列化、反序列化、网络框架、链接池、收发线程、超时处理、状态机等“业务以外”的重复技术劳动,形成总体的低效。
因此,统一RPC框架把上述“业务以外”的技术劳动统一处理,是服务化首要解决的问题。
六 几种协议
Socket使用时能够指定协议Tcp,Udp等;
RIM使用Jrmp协议,Jrmp又是基于TCP/IP;
RPC底层使用Socket接口,定义了一套远程调用方法;
HTTP是创建在TCP上,不是使用Socket接口,须要链接方主动发数据给服务器,服务器没法主动发数据个客户端;
Web Service提供的服务是基于web容器的,底层使用http协议,相似一个远程的服务提供者,
好比天气预报服务,对各地客户端提供天气预报,是一种请求应答的机制,是跨系统跨平台的。
就是经过一个servlet,对外提供服务。
hessian是一套用于创建web service的简单的二进制协议,
用于替代基于XML的web service,
是创建在rpc上的,hessian有一套本身的序列化格式将数据序列化成流,而后经过http协议发送给服务器
在微服务架构中,各个服务之间可能千差万别,rest接口更加灵活,若是使用RPC则会有不少约束