当前位置:网站首页>凤凰架构2——访问远程服务
凤凰架构2——访问远程服务
2022-07-06 11:32:00 【土拨鼠饲养员】
访问远程服务
远程服务调用
进程间通信 (Inter-Process Communication,IPC) 的办法
- 管道(Pipe)或者具名管道(Named Pipe): 传递少量的字符流或字节流, 普通管道只用于有亲缘关系进程(由一个进程启动的另外一个进程)间的通信,具名管道摆脱了普通管道没有名字的限制,除具有管道所有的功能外,它还允许无亲缘关系进程间的通信
- 信号(Signal):通知目标进程有某种事件发生
- 信号量(Semaphore): 两个进程之间同步协作手段
- 消息队列(Message Queue):可以传送大量信息,但是实时性相对受限
- 共享内存(Shared Memory):允许多个进程访问同一块公共的内存空间
- 套接字接口(Socket): 可用于不同机器之间的进程通信
RPC的三个基本问题
- 如何表示数据:将交互双方所涉及的数据转换为某种事先约定好的中立数据流格式来进行传输,将数据流转换回不同语言中对应的数据类型来进行使用(比如序列化与反序列化)
- 如何传递数据:通过网络,在两个服务的 Endpoint 之间相互操作、交换数据(应用层协议)。
- 如何确定方法:不同语言如何表示同一方法
不同的RPC
没有一个RPC能完美满足上面三点,所以出现了不同的RPC
- 朝着面向对象发展:RMI,这条线有一个别名叫做分布式对象
- 朝着性能发展(序列化效率和信息密度):gRPC (基于 HTTP/2 的,支持多路复用和 Header 压缩)和 Thrift(基于传输层的 TCP 协议来实现,省去了额外应用层协议的开销)
- 朝着简化发展,代表为 JSON-RPC(协议的简单轻便,接口与格式都更为通用)
REST 设计风格
RPC 面向过程调用,REST 面向资源调用
Fielding 认为,一套理想的、完全满足 REST 风格的系统应该满足以下六大原则:
- 服务端与客户端分离(Client-Server):将用户界面所关注的逻辑和数据存储所关注的逻辑分离开来,有助于提高用户界面的跨平台的可移植性
- 无状态(Stateless):客户端发送的请求中,应包括所有的必要的上下文信息,会话信息也由客户端负责保存维护,服务端依据客户端传递的状态来执行业务处理逻辑
- 可缓存(Cacheability):运作良好的缓存机制可以减少客户端、服务器之间的交互
- 分层系统(Layered System):客户端一般不需要知道是否直接连接到了最终的服务器
- 统一接口(Uniform Interface):
- 按需代码(Code-On-Demand):客户端无需事先知道所有来自服务端的信息应该如何处理、如何运行的宽容度
优点和不足
优点
- 降低的服务接口的学习成本:对资源的标准操作都映射到了标准的 HTTP 方法上去
- 资源天然具有集合与层次结构:以资源为中心抽象的接口,由于资源是名词,天然就可以产生集合与层次结构。
GET /users/icyfenix/cart/2 - REST 绑定于 HTTP 协议。
不足与争议
- 面向资源的编程思想只适合做 CRUD,面向过程、面向对象编程才能处理真正复杂的业务逻辑:面向资源的编程思想与另外两种主流编程思想只是抽象问题时所处的立场不同,只有选择问题,没有高下之分
- REST 与 HTTP 完全绑定,不适合应用于要求高性能传输的场景中:面向资源编程与协议无关,但是 REST的确依赖着 HTTP 协议的标准方法、状态码、协议头等各个方面,对于需要直接控制传输,如二进制细节、编码形式、报文格式、连接方式等细节的场景中,REST 确实不合适,这些场景往往存在于服务集群的内部节点之间
- REST 不利于事务支持:如果放弃刚性事务,使用 REST 肯定不会有什么阻碍
- REST 没有传输可靠性支持
- REST 缺乏对资源进行“部分”和“批量”的处理能力
边栏推荐
- Use map function and split function to type multiple elements in one line
- Helm deploy etcd cluster
- First day of rhcsa study
- Cereals Mall - Distributed Advanced p129~p339 (end)
- [depth first search] Ji suanke: Square
- Looting iii[post sequence traversal and backtracking + dynamic planning]
- 主从搭建报错:The slave I/O thread stops because master and slave have equal MySQL serv
- The second day of rhcsa study
- Use of deg2rad and rad2deg functions in MATLAB
- The list of people who passed the fifth phase of personal ability certification assessment was published
猜你喜欢
受益匪浅,安卓面试问题
深入分析,Android面试真题解析火爆全网

CCNP Part 11 BGP (III) (essence)

Computer network: sorting out common network interview questions (I)

A method of removing text blur based on pixel repair

The list of people who passed the fifth phase of personal ability certification assessment was published

C language daily practice - day 22: Zero foundation learning dynamic planning

A popular explanation will help you get started

PMP practice once a day | don't get lost in the exam -7.6

应用使用Druid连接池经常性断链问题分析
随机推荐
Helm deploy etcd cluster
Interface test tool - postman
思维导图+源代码+笔记+项目,字节跳动+京东+360+网易面试题整理
MRO工业品企业采购系统:如何精细化采购协同管理?想要升级的工业品企业必看!
关于静态类型、动态类型、id、instancetype
R语言使用order函数对dataframe数据进行排序、基于单个字段(变量)进行降序排序(DESCENDING)
R language uses the order function to sort the dataframe data, and descending sorting based on a single field (variable)
How word displays modification traces
R language ggplot2 visualization: use ggviolin function of ggpubr package to visualize violin diagram
Characteristic colleges and universities, jointly build Netease Industrial College
中缀表达式转后缀表达式详细思路及代码实现
多线程基础:线程基本概念与线程的创建
五金机电行业供应商智慧管理平台解决方案:优化供应链管理,带动企业业绩增长
IC设计流程中需要使用到的文件
黑馬--Redis篇
[matlab] Simulink the input and output variables of the same module cannot have the same name
It's super detailed in history. It's too late for you to read this information if you want to find a job
主从搭建报错:The slave I/O thread stops because master and slave have equal MySQL serv
R language ggplot2 visualization: use the ggstripchart function of ggpubr package to visualize the grouped dot strip plot, and set the add parameter to add box plots for different levels of dot strip
pychrm社区版调用matplotlib.pyplot.imshow()函数图像不弹出的解决方法