访问远程服务——RPC-REST

远程服务调用 Remote Procedure Call RPC

位于互不重合的内存地址空间中的两个程序,在语言层面上,以同步的方式使用带宽有限的信道来传输程序控制信息

 

最初目的:为了让计算机能够跟调用本地方法一样去调用远程方法

 

解决的三个基本问题:

  • 表示数据:序列化与反序列化(将交互双方所涉及的数据转换为某种事先约定好的中立数据流格式来进行传输,将数据流转换回不同语言中对应的数据类型来进行使用)

  • 传递数据:通过网络,在两个服务的 Endpoint 之间相互操作、交换数据。处理异常、超时、安全、认证、授权、事务

  • 确定方法:“如何表示同一个方法”,“如何找到对应的方法” 分布式全局唯一ID 雪花算法

朝着更高层次、与插件化方向发展的趋势,提供负载均衡、服务注册、可观察性等方面的支持。

 

RPC协议:RMI(Sun/Oracle)、Thrift(Facebook/Apache)、Dubbo(阿里巴巴/Apache)、gRPC(Google)

语言私有、跨越多门语言、运行在应用层 HTTP 协议之上、运行于传输层 TCP/UDP 协议之上

 

IPC进程间通信 Inter-Process Communication:

  • 管道(Pipe)或者具名管道(Named Pipe):两个进程间的桥梁,可通过管道在进程间传递少量的字符流或字节流。普通管道只用于有亲缘关系进程(由一个进程启动的另外一个进程)间的通信,具名管道允许无亲缘关系进程间的通信。

  • 信号(Signal):信号用于通知目标进程有某种事件发生

  • 信号量(Semaphore):信号量用于两个进程之间同步协作手段

  • 消息队列(Message Queue):用于进程间数据量较多的通信。

  • 共享内存(Shared Memory):允许多个进程访问同一块公共的内存空间,效率最高。常常与其它通信机制,譬如信号量结合使用,来达到进程间同步及互斥的协调操作。

  • 套接字接口(Socket):用于不同机器之间的进程通信。当仅限于本机进程间通信时,套接字接口是被优化过的,不会经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等操作。

 

 

REST 表现层状态转换 Representational State Transfer

面向资源的编程思想,REST是风格不是协议

REST是对HTT(Hypertext Transfer)的进一步抽象,如接口与实现类

"超文本 "指的是能够进行分支判断和差异响应的文本, "超媒体 "指的是能够进行分支判断和差异响应的图形、电影和声音(也包括文本)的复合体。

  • 表征(表现层):信息与用户交互式的表现形式

  • 状态:在特定语境中才能产生的上下文信息

  • 转移:服务器通过某种方式,把“用户当前阅读的文章”转变成“下一篇文章”,这就被称为“表征状态转移”。

  • 统一接口:GET、HEAD、POST、PUT、DELETE、TRACE、OPTIONS

  • 自描述消息:资源的表征可能存在多种不同形态,在消息中应当有明确的信息来告知客户端该消息的类型以及应如何处理这条消息。如“Content-Type : application/json; charset=utf-8”

 

RESTful 系统六大原则

服务端与客户端分离(Client-Server)

无状态(Stateless)

服务器不去负责维护状态,每一次从客户端发送的请求中,应包括所有的必要的上下文信息,会话信息也由客户端负责保存维护,服务端依据客户端传递的状态来执行业务处理逻辑,驱动整个应用的状态变迁。

可缓存(Cacheability)

分层系统(Layered System)

中间服务器可以通过负载均衡和共享缓存的机制提高系统的可扩展性,这样也便于缓存、伸缩和安全策略的部署。

内容分发网络(Content Distribution Network,CDN)

统一接口(Uniform Interface)

按需代码Code-On-Demand

 

REST 提出以资源为主体进行服务设计的风格的好处

  1. 降低的服务接口的学习成本

  2. 资源天然具有集合与层次结构

  3. REST 绑定于 HTTP 协议

 

REST缺点:

  1. REST 与 HTTP 完全绑定,不适合应用于要求高性能传输的场景中

  2. REST 没有传输可靠性支持

    服务应具有幂等性:即服务被重复执行多次的效果与执行一次是相等的。HTTP 协议要求 GET、PUT 和 DELETE 应具有幂等性

  3. REST 缺乏对资源进行“部分”和“批量”的处理能力

posted @   roibin  阅读(141)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示