什么是REST
REST是一种架构风格,指的是一组架构约束条件和原则。
满足这些约束条件和原则的应用程序或设计
就是 RESTful。
REST规范把所有内容都视为资源,网络上一切皆资源。
REST并没有创造新的技术,组件或服务,只是使用Web的现有特征和能力。
可以完全通过HTTP协议实现,使用 HTTP 协议处理数据通信。
REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议
提供的GET、POST、PUT和DELETE方法。
什么是RPC
远程方法调用,就是像调用本地方法一样调用远程方法。
1、服务端如何确定客户端要调用的函数;
在远程调用中,客户端和服务端分别维护一个【ID->函数】的对应表, ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,附上这个ID,服务端通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。
2、如何进行序列化和反序列化;
客户端和服务端交互时将参数或结果转化为字节流在网络中传输,那么数据转化为字节流的或者将字节流转换成能读取的固定格式时就需要进行序列化和反序列化,序列化和反序列化的速度也会影响远程调用的效率。
3、如何进行网络传输(选择何种网络协议);
多数RPC框架选择TCP作为传输协议,也有部分选择HTTP。
如gRPC使用HTTP2。不同的协议各有利弊。
TCP更加高效,而HTTP在实际应用中更加的灵活。
Rest和RPC都是微服务的通讯方式
1.1.3 REST与RPC应用场景
REST和RPC都常用于微服务架构中。
Restful用户http 更标准,更通用 调用灵活、方便 开放平台,外部的编程语言多种多样
RPC 框架作为架构微服务化的基础组件, 适用于内部系统调用、提高调用方与服务提供方的研发效率、让服务提供方感觉就像实现一个本地函数一样来实现服务
RPC框架的职责是:让调用方感觉就像调用本地函数一样调用远端函数、让服务提供方感觉就像实现一个本地函数一样来实现服务
RPC大致分类:
1、从通讯协议的层面,大致可以分为:
基于HTTP协议的 (基于文本的SOAP(XML)、Rest(JSON),基于二进制Hessian(Binary))
基于TCP协议的
2、调用过程来看
同步通讯(同步RPC)
异步通讯( MQ、异步RPC)
常见的几种通讯方式
1、远程数据共享
2、消息队列
3、RPC远程过程调用
序列化和反序列化
只有二进制数据才能在网络中传输,序列化和反序列化的定义:
将对象转换成二进制流的过程叫做序列化
将二进制流转换成对象的过程叫做反序列化
3、 RPC架构分为三部分:
(1)服务提供者,运行在服务器端,提供服务接口定义与服务实现类。
(2)服务中心,运行在服务器端,负责将本地服务发布成远程服务,管理远程服务,提供给服务消费者使用。
(3)服务消费者,运行在客户端,通过远程代理对象调用远程服务。
英文原义:Remote Procedure Call Protocol
一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。
请求服务器:
首先,调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。
在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,
然后等待下一个调用信息,最后,客户端调用过程接收答复信息,获得进程结果,然后调用执行继续进行。
RPC信息协议由两个不同结构组成:调用信息和答复信息。
在OSI网络通信模型中,RPC跨越了传输层和应用层。
常见RPC技术和框架
1)应用级的服务框架:Dubbo/Dubbox、ZeroICE、GRpc、Spring Boot/Spring Cloud。
2)远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
3)通信框架:MINA和Netty。
二.RPC架构的作用
RPC框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式(TCP或者UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。
三.RPC的性能优化
1、性能
影响RPC性能的主要在几个方面:
(1)序列化/反序列化的框架;
(2)网络协议,网络模型,线程模型等。
2、安全
RPC安全的主要在于服务接口的鉴权和访问控制支持。
四.服务化架构的演进之路
1、MVC架构:当业务规模很小时,将所有功能都不熟在同一个进程中,通过双机或者负载均衡器实现负债分流;此时,分离前后台逻辑的MVC架构是关键。
2、PRC架构:当垂直应用越来越多,应用之间交互不可避免,将核心和公共业务抽取出来,作为独立的服务,实现前后台逻辑分离。此时,用于提高业务复用及拆分的RPC框架是关键。
3、SOA架构:随着业务发展,服务数量越来越多,服务生命周期管控和运行态的治理成为瓶颈,此时用于提升服务质量的SOA服务治理是关键。
4、微服务架构:通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降。