Http、RESTful、RPC、MQ、Socket 概念与区别

若要转载本文,请务必声明出处:https://www.cnblogs.com/zhongyuanzhao000/p/11700815.html

1. 关于HTTP:

HTTP,即超文本传输协议,是一个属于应用层的面向对象的协议。

HTTP的特点:
  • 基于C/S模式,客户端通过URL向服务端发送请求,其信息交换过程为:建立连接、发送请求信息、发送响应信息、关闭连接。
  • 无连接,指 限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。这样可以节省传输时间。
  • 无状态,指协议对于事务处理没有记忆能力。
HTTP动词(请求方法):

GET 获取一个资源
PUT 修改一个资源
POST 添加一个资源
DELETE 删除一个资源

HTTP状态码:
  • 200 - 请求成功
  • 301 - 重定位,资源被永久转移到其他URL
  • 404 - 请求资源不存在
  • 500 - 内部服务器错误

2. 关于REST:

REST即Representational State Transfer(表现层状态转换),是一种软件架构风格、设计风格,而不是标准。如果满足 REST 的几个条件, 通常就称这个系统是 Restful 的。

这里提的条件包括:

  • C/S结构 (这是Internet服务的一个基本特征)
  • 无状态 (很熟悉吧,呵呵)
  • 可以cache (想起了浏览器?)
  • 分层系统 (想起了无数的架构?)
  • 统一的接口 (如果这是可能的,程序员有福了, 😄)
  • code on demand(可选, 其实是一种扩展性的要求)

很像 HTTP吧,其实REST API 就是基于 HTTP的。

3. 关于RPC:

RPC,即 远程过程调用,一种标准,屏蔽底层通信细节,可以直接调用。
简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可统称为服务)并得到返回的结果。RPC在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。

3.1 REST与RPC的区别:

  1. REST是以名词(即资源)为中心的,RPC是以动词(即方法)为中心的。(REST主要通过HTTP动词 增删改查 资源来实现调用,RPC则是通过相应的比较灵活的方法来实现调用)

    REST通过URI将资源暴露出来,对资源的操作则是通过HTTP动词来体现。REST通过URI暴露资源时,会强调不要在URI中出现动词。如下所示: 左边是错误的设计,而右边是正确的

    GET /rest/api/getDogs            --> GET /rest/api/cats            获取所有猫猫 
    GET /rest/api/addDogs            --> POST /rest/api/cats           添加一个猫猫 
    GET /rest/api/editDogs/:dog_id   --> PUT /rest/api/cats/:cat_id    修改一个猫猫 
    GET /rest/api/deleteDogs/:dog_id --> DELETE /rest/api/cats/:cat_id 删除一个猫猫 
    

    RESTful

    RPC

  2. 调用发生的区域
    服务内部:首要使用RPC,RPC适合内部间,高效,快速通信。 缺点是 两边最好都是Java的系统。
    服务外部:首要使用RESTful,REST适合外部间,简单易用,且跨语言。 缺点是 操作有限(CRUD),且不够高效。

4. 关于MQ:

MQ,即消息队列,是一种 跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种 上下游"逻辑解耦+物理解耦"的消息通信服务。使用MQ后,消息发送上游只需依赖MQ,逻辑上和物理上都不用在依赖其他服务。另外,MQ只用来传递上游任务执行完成的消息,并不用于传递真正的输入输出数据。如下图所示:
MQ上下游

MQ的优点:

1)不需要预留buffer,上游任务执行完,下游任务总会在第一时间被执行
2)上下游逻辑+物理解耦,除了与MQ有物理连接,模块之间都不相互依赖
3)新增一个下游消息关注方,上游不需要修改任何代码

MQ的缺点:

1)系统更复杂,多了一个MQ组件
2)消息传递路径更长,延时会增加
3)消息可靠性和重复性互为矛盾,消息不丢不重难以同时保证
4)上游无法知道下游的执行结果,这一点是很致命的

因此,
什么时候不用MQ? 上游实时关注执行结果时,请使用 调用,而不是MQ。
什么时候使用MQ? 数据驱动的任务依赖、上游不关心下游执行结果、异步返回执行时间长

4.1 MQ与RPC的区别:

主要使用场景的区别,如下:
MQ适用于 消息上游 与 下游 解耦,不关注下游执行结果,异步;
RPC适用于 消息上游 关注下游执行结果,同步;

解释下 同步和异步:
同步是指所有的操作都做完,才返回给用户。 异步是指 将用户请求放入消息队列,并反馈给用户,然后程序再去执行操作。

同步就相当于是 当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。这样的话客户端需要一直等待。用户使用起来会有不友好。

异步就是,当客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。

5. 关于SOCKET:

socket由 网络层的ip地址 和 运输层的 端口号 组成,可以 唯一标示 网络 中的一个进程。(网络层的ip地址可唯一标示主机,运输层的端口号则可以唯一标示 主机的一个进程)。
socket是在应用层 和 运输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。socket是一种”打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个”文件”,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。如下所示:
Socket

socket的优点:
  1. 传输数据为字节级,传输数据可自定义,数据量小
  2. 传输数据时间短,性能高
  3. 适合于客户端和服务器端之间信息实时交互
  4. 可以加密,数据安全性强
socket的缺点:
  1. 需对传输的数据进行解析,转化成应用级的数据
  2. 对开发人员的开发水平要求高
  3. 相对于Http协议传输,增加了开发量

5.1 Socket与Http的区别:

1.Socket 的连接是有状态的,一旦两边连接上了,将一直保持连接,除非人为断开。一般用于游戏,需要持续的网络畅通

2.Http 的连接是无状态的,即在连接完成后不会保持连接状态。

posted @ 2019-10-18 21:17  <予安>  阅读(11864)  评论(0编辑  收藏  举报