openstack rpc机制

简介: 一、概述:  在openstack项目中,api的调用规则:    跨项目:如nova调用keystone, glance,cinder等,使用rest api(通过相应的python-XXXclient 库)    项目内跨服务调用,使用RPC调用,通过服务提供的rpcapi.

一、概述:

  在openstack项目中,api的调用规则:

    跨项目:如nova调用keystone, glance,cinder等,使用rest api(通过相应的python-XXXclient 库)

    项目内跨服务调用,使用RPC调用,通过服务提供的rpcapi.py文件,比如cinder内部,cinder-api与cinder-volume,cinder-scheduler服务之间使用RPC接口,即RabbitMQ消息;

  cinder系统结构图:

    cinder-api是cinder 服务的endpoint, 提供了rest接口,负责处理client的请求,并将rest请求解封,并重新封装成RPC请求至cinder-scheduler组件;

    除dashboard之外,所有的服务均有XXX-api作为XXX服务的endpoint,提供rest 接口,负责处理XXXclient 的请求:

1 [root@TS-M2-Cloud172 ~(keystone_admin)]# openstack-service list |grep api
2 openstack-ceilometer-api
3 openstack-cinder-api
4 openstack-glance-api
5 openstack-nova-api

二、openstack RPC通信

 openstack组件内部的RPC(Remote Producer Call)机制的实现是基于AMQP协议作为通讯模型,从而组件内部的松耦合性。AMQP是用于异步消息通讯的消息中间件协议;AMQP模型有四个重要的角色:

  • Exchange: 根据Routing key转发消息到对应的Message Queue中;
  • Routing key: 用于Exchange判断那些消息需要发送对应的Message Queue
  • Publisher: 消息发送者,将消息发送的Exchange并指明Routing Key,以便Message Queue可以正确的收到消息;
  • Consumer:消息接受者,从Message Queue获取消息;   

 消息发布者 Publisher 将 Message 发送给 Exchange 并且说明 Routing Key。Exchange 负责根据 Message 的 Routing Key 进行路由,将 Message 正确地转发给相应的 Message Queue。监听在 Message Queue 上的 Consumer 将会从 Queue 中读取消息。

  Routing Key 是 Exchange 转发信息的依据,因此每个消息都有一个 Routing Key 表明可以接受消息的目的地址,而每个 Message Queue 都可以通过将自己想要接收的 Routing Key 告诉 Exchange 进行 binding,这样 Exchange 就可以将消息正确地转发给相应的 Message Queue。

  

  OpenStack层封装call和cast接口用于远程调用RPC的server上的方法,这些方法都是构造RPC的server的endpoints内的方法。远程调用时,需要提供一个字典对象来指明调用的上下文,调用方法的名字和传递给调用方法的参数(用字典表示)。如:

    cctxt =self.client.prepare(vesion=’2.0’)

    cctxt.cast(context,‘build_instances’, **kw)

        通过cast方式的远程调用,请求发送后就直接返回了;通过call方式远程调用,需要等响应从服务器返回。

相关文章
|
API 数据库 安全
Openstack Nova 源码分析 — RPC 远程调用过程
目录 目录 Nova Project Services Project 的程序入口 setuppy Nova中RPC远程过程调用 nova-compute RPC API的实现 novacomputemanager 模块 最后 Nova Project Services nova-api:捕获novaclient发送过来的HTTP请求,并且将它转换为AMQP消息,通过Queue来与别的services通信。
1883 0
|
消息中间件 监控
轻松搞定RabbitMQ5:主题机制与RPC调用
轻松搞定RabbitMQ(六)——主题 翻译地址:http://www.rabbitmq.com/tutorials/tutorial-five-java.html 在上一篇博文中,我们进一步改良了日志系统。
|
API 开发框架 UED
Openstack_通用技术_RPC 远程异步调用
目录 目录 RPC 一个通过 HTTP Request 调用操作函数的 RPC 实现样例 环境 接收 HTTP Request RPC 调用具体的操作函数 测试 RPC RPC: 同一个项目内的不同服务进程之间的交互方式。
1582 0
|
6月前
|
设计模式 负载均衡 网络协议
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
239 0
|
3月前
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC