珠海网站设计报价,临安网站seo,网站建设初步规划方案,做电商网站用什么软件开发1 REST
REST 不是一种协议#xff0c;它是一种架构。大部分REST的实现中使用了RPC的机制#xff0c;大致由三部分组成#xff1a;
method#xff1a;动词#xff08;GET、POST、PUT、DELETE之类的#xff09;Host#xff1a;URI#xff08;统一资源标识#xff09;它是一种架构。大部分REST的实现中使用了RPC的机制大致由三部分组成
method动词GET、POST、PUT、DELETE之类的HostURI统一资源标识服务器ip端口Path名词路径服务器里面的某个东西路径的结尾是资源的形态如html、text、image、pdf等
即对 Host 中的某个 Path对应的资源做method操作。
2 RPC
RPC 是一种技术思想而非一种规范或协议通常的调用过程为
1客户端把函数序列化
2远端服务收到后再把函数反序列化完成函数调用。
就是像调用本地方法一样调用远程方法通信协议大多采用二进制方式长链接效率更高。
2.1 组件
RPC架构里包含如下4个组件:
客户端(Client)服务调用方客户端存根(Client Stub)存放服务端地址信息将客户端的请求参数打包成网络消息再通过网络发送给服务方服务端存根(Server Stub)接受客户端发送过来的消息并解包再调用本地服务服务端(Server)真正的服务提供者。
2.2 实现过程
RPC具体实现步骤如下
1服务调用方client(客户端)以本地调用方式调用服务
2client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体比如在Java里就是序列化的过程
3client stub找到服务地址并将消息通过网络发送到服务端
4server stub收到消息后进行解码,比如在Java里就是反序列化的过程
5server stub根据解码结果调用本地的服务
6本地服务执行处理逻辑
7本地服务将结果返回给server stub
8server stub将返回结果打包成消息Java里的序列化
9server stub将打包后的消息通过网络并发送至消费方
10client stub接收到消息并进行解码, Java里的反序列化
11服务调用方client得到最终结果。
RPC框架的目标就是把2-10步封装起来把调用、编码/解码的过程封装起来让用户像调用本地服务一样的调用远程服务。
3 REST和 RPC的区别
3.1 REST
如需对服务资源进行操作需要先确认服务端的当前状态修改之后将最终用户所期待的状态发送给服务端服务端按照客户的期待进行修改。
修改代码在客户端所以REST风格客户端逻辑相比客户端更复杂。自由度更大一些但因此造成失误的可能性也大一些。
传输层基于HTTP相比于TCP多了一层协议。但基于HTTP传输可以穿越防火墙适合组织内向组织外提供服务,此外REST的接口的安全性相比RPC更高。
3.2 RPC
如需对服务里面的资源进行修改首先需要了解服务端中各个接口的功能和调用方式然后把相关参数传给服务端提供的接口让服务端自己去执行修改。
修改代码在服务端所以RPC服务端逻辑更复杂些服务端会有很大的工作量但分工明确不容易造成失误。
可以基于TCP或HTTP如果基于TCP将少一层协议。
3.3 使用场景
REST调用及测试都很方便RPC就显得有点繁琐但是RPC的效率是毋庸置疑的所以建议在多系统之间的内部调用采用RPC。对外提供的服务Rest更加合适。 对比项RESTRPC范式面向资源的范式它强调对 URI 所代表的资源进行操作。面向方法的范式强调远程调用函数客户端和服务器之间传递的数据是通过序列化方法的参数和返回值来实现的通信协议HTTP一般使用TCP数据格式REST 使用 JSON、XML 等文本格式传输数据这些格式易于阅读和解析RPC 通常使用二进制格式传输数据如 Protobuf 和 MessagePack 等编程模型REST 是基于 HTTP 协议的只要能够发送 HTTP 请求和解析 HTTP 响应的语言都可以使用 RESTRPC 支持多种编程语言和平台如 Java、C、Python 性能低高灵活度高低使用场景 对外提供服务低频调用 内网服务调用IO 密集调用 3.4 案例
如果想对服务端数据库里面的一个数进行加1、减1 这两种操作。两种不同的实现方式如下
REST服务端只需要一个接口作用是更改数据库里面的数不管是加了还是减了然后客户端有两个函数分别进行加操作和减操作但客户端操作完都提交给同一个服务端函数然后更改数据库。RPC中服务端应该留两个接口函数分别对应加1和减1操作当客户端需要进行修改时先要弄明白哪个做加1操作、哪个做减1操作然后入参调用让服务端进行加1减1操作后更改数据库。
3.5 优缺点
3.5.1 REST优缺点
优点耦合性低兼容性好提高开发效率不用关心接口实现细节相对更规范更标准更通用跨语言支持
缺点性能不如 RPC 高。
3.5.2 RPC优缺点
优点
调用简单清晰透明不用像 rest 一样复杂就像调用本地方法一样简单。高效低延迟性能高自定义协议让传输报文提及更小性能消耗低高效的序列化协议可以支持高效的二进制传输自带负载均衡
缺点
耦合性强例如开发人员为每个微服务定义了各自的 service 抽象接口并通过持续集成发布到私有仓库中调用方应用对微服务提供的抽象接口存在强依赖关系因此不论开发、测试、集成环境都需要严格的管理版本依赖才不会出现服务方与调用方的不一致导致应用无法编译成功等一系列问题以及这也会直接影响本地开发的环境要求往往一个依赖很多服务的上层应用每天都要更新很多代码并 install 之后才能进行后续的开发。若没有严格的版本管理制度或开发一些自动化工具这样的依赖关系会成为开发团队的一大噩梦。而 REST 接口相比 RPC 更为轻量化服务提供方和调用方的依赖只是依靠一纸契约不存在代码级别的强依赖当然 REST 接口也有痛点因为接口定义过轻很容易导致定义文档与实际实现不一致导致服务集成时的问题但是该问题很好解决只需要通过每个服务整合swagger让每个服务的代码与文档一体化就能解决。所以在分布式环境下REST 方式的服务依赖要比 RPC 方式的依赖更为灵活。无法跨语言平台敏感Java 写的 RPC 微服务无法给 Python 调用。需要再实现一层 REST 来对外提供服务