Ceilometer 21、openstack组件之间通信以及组件内服务通信方式分析

1 openstack组件之间通信以及组件内各服务通信方式


1.1 openstack各组件之间的通信方式


据我所了解的几个组件,各个组件之间大部分是通过调用其他组件的rest api方式进行通信,
而rest api的框架大部分是通过: wsgi + pecan 的形式搭建起来的,本质上是http的形式,
调用各个rest api的本质是封装为一个http的url请求,从这一点上说,基于rest api的各组件
之间的通信方式是http。
这种方式的特点是,调用rest api可以获取到该api的返回结果(当然也有rest api不需要返回结果的,例如:
删除某个资源)
当然也有例外,ceilometer和其他组件之间的基于事件创建型的通信方式是走消息队列(例如nova创建虚机,
cinder创建云硬盘都是发送消息到消息队列,ceilometer监听到消息队列来获取这些消息)。
这种通信方式的特点是:
消息的发送方并不需要受到消息的接受方执行结果的返回值。

总结:
1) openstack各组件之间大部分的通信方式是基于rest api,本质是通过http进行通信。
2) 也有其他组件之间的通信方式是消息队列。

2 同一组件中各个服务之间的通信方式


大部分的组件,为了实现各个服务之间的解耦,采取了消息队列实现服务进行解耦
例如ceilometer-compute服务和ceilometer-notification服务也是通过消息队列(后端对应rabbitmq)的形式实现,
例如aodh-evaluator服务和aodh-notifier服务也是通过消息队列(后端对应rabbitmq)的形式实现。
当然,除此之外,也有另外一个消息队列的一个变种形式。
这种形式就是rpc(远程过程调用)。
当某个组件的某个服务通过rabbitmq的rpc的call方法执行另一个服务的某个方法并获取执行的结果。

总结:
1) openstacj各组件内部服务的通信方式大部分都是基于消息队列(后端对应rabbitmq实现)。
2) 这种消息队列又分为两种使用方式:
2.1) 组件的一个服务不需要知道另一个服务的执行结果,只是单向的传送信息,这种使用的rabbitmq单纯发送消息的功能
2.2) 组件的一个服务需要获取另一个服务的执行结果,是双向的过程,这种使用的是rabbitmq的rpc的call方法可以获取另一个服务执行方法后的返回结果

你可能感兴趣的:(ceilometer)