当前位置:网站首页>凤凰架构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 缺乏对资源进行“部分”和“批量”的处理能力
边栏推荐
- Detailed idea and code implementation of infix expression to suffix expression
- Characteristic colleges and universities, jointly build Netease Industrial College
- R language ggplot2 visual time series histogram: visual time series histogram through two-color gradient color matching color theme
- RT-Thread 组件 FinSH 使用时遇到的问题
- Fast power template for inverse element, the role of inverse element and example [the 20th summer competition of Shanghai University Programming League] permutation counting
- [translation] a GPU approach to particle physics
- [depth first search] Ji suanke: find numbers
- USB host driver - UVC swap
- C # - realize serialization with Marshall class
- Problems encountered in using RT thread component fish
猜你喜欢
Abstract classes and abstract methods
渲大师携手向日葵,远控赋能云渲染及GPU算力服务
三面蚂蚁金服成功拿到offer,Android开发社招面试经验
An error occurs when installing MySQL: could not create or access the registry key needed for the
关于静态类型、动态类型、id、instancetype
史上超级详细,想找工作的你还不看这份资料就晚了
反射及在运用过程中出现的IllegalAccessException异常
深入分析,Android面试真题解析火爆全网
Graffiti intelligence is listed on the dual main board in Hong Kong: market value of 11.2 billion Hong Kong, with an annual revenue of 300 million US dollars
冒烟测试怎么做
随机推荐
Swagger2 reports an error illegal DefaultValue null for parameter type integer
Pytorch common loss function
应用使用Druid连接池经常性断链问题分析
php+redis实现超时取消订单功能
C # - realize serialization with Marshall class
Yutai micro rushes to the scientific innovation board: Huawei and Xiaomi fund are shareholders to raise 1.3 billion
Xingnuochi technology's IPO was terminated: it was planned to raise 350million yuan, with an annual revenue of 367million yuan
A full set of teaching materials, real questions of Android interview of 7 major manufacturers including Alibaba Kwai pinduoduo
Leetcode topic [array] - 119 Yang Hui triangle II
AIRIOT物联网平台赋能集装箱行业构建【焊接工位信息监控系统】
Digital "new" operation and maintenance of energy industry
Qlabel marquee text display
Reptiles have a good time. Are you full? These three bottom lines must not be touched!
AUTOCAD——中心线绘制、CAD默认线宽是多少?可以修改吗?
Is not a drawable (color or path): the vector graph downloaded externally cannot be called when it is put into mipmap, and the calling error program crashes
冒烟测试怎么做
LeetCode-1279. 红绿灯路口
Simple understanding of MySQL database
R语言ggplot2可视化:使用ggpubr包的ggviolin函数可视化小提琴图
It's super detailed in history. It's too late for you to read this information if you want to find a job