返回nexpose的回答

nexposenexpose其它阳光信保

OpenStack中有至少两种通信机制, RESTful API和RPC调用。

RESTful API:

RESTFUL API是一套架构约束条件和原则

REST定义的原则

  1. 所有事物都定义了ID。openstack中每个资源都有唯一的UUID
  2. 所有事物都链接在一起。在openstack中将资源的ID放在URL中。
  3. 使用标准的方法。比如说GET是查询资源,POST是添加资源,PUT是更新资源等等。

使用RESTful API架构,实现的目标

  1. 客户端与服务端的独立性: 在公共接口不变的情况下,客户端和服务端的代码可以独立开发。
  2. 无状态性: 用户的状态保存在客户端,服务端不再保存用户的状态。客户端向服务端发送请求时,必须发送所有的数据,包括用户状态。
  3. 统一的接口: RESTful API的URL格式需要遵守统一的规范。可以降低客户端服务器的耦合度,使得编码更加简单。

缺点

  1. 消息仅限于文本
  2. 客户端与服务端采取同步机制,当发送http请求时客户端需要等待服务器的响应
  3. 客户端与服务器虽然可以独立开发,但也存在耦合。客户端必须要知道服务器的地址才可以正常工作。

    其他

  4. REST是面向资源的,资源通过URL暴露
  5. REST本身可以利用HTTP的一些特征,如HTTP动词、状态码、HTTP报头等

RPC

RPC协议,即远程过程调用(Remote Procedure Call Protocol)

RPC采用AMQP协议实现进程间通信。openstack中采用rabbitmq和qpid。

AMQP:高级消息队列,基于消息的中间件提供的开放的应用层标准协议。能够有效地支持各种通信模型或者报文传送方面的应用。

  • 特点:二进制的应用层通信协议,进城之间对称的异步通信协议,消息格式,一系列标准化的但可拓展的消息能力(订阅者和发布者,两个节点无需知道对方是什么节点,也不用管对方节点怎么去处理发送的消息,拥有过滤器可以修改订阅者的接收内容)
  • 组成:发布者,中间件(消息的存储、交换和路由),订阅者
  • 流程:发布者将消息发送到中间件,中间件将消息存储到消息队列中,最后订阅者从消息队列中获取消息。
  • nova中使用rabbitmq实现RPC调用
  1. 客户端(发布者)无需知道服务器(订阅者)的位置
  2. 客户端与服务器无需同步运行。客户端可以先发RPC调用,然后存储在消息队列中。
  3. 远程调用的随机均衡性,当客户端发起RPC调用时,可以随机选择一个服务器来处理消息
保险 · 2020-02-05
浏览2560

回答者

nexpose
其它阳光信保
擅长领域: 云计算容器云容器

nexpose 最近回答过的问题

回答状态

  • 发布时间:2020-02-05
  • 关注会员:3 人
  • 回答浏览:2560
  • X社区推广