Intelligent RPC routing for multiple conductors

Registered by Roman Prykhodchenko

Prerequisites
--------------------

1. Given Ironic set up with one or more API services and multiple conductor services running.
2. Different conductors might run different vendor drivers.
3. The environment is heterogeneous.
4. Some of the conductors exclusively locked several nodes.

Problems
---------------

1. As some operations on nodes are interruptible, a user might want to send request to interrupt an operation on a locked node. In that case the request must be dispatched to the same conductor that acquired a lock on the node in order to be able to perform the operation.

2. In a heterogenous environment different nodes might require different drivers to perform power management and image deployment. However, it’s not possible to guarantee that all conductor nodes run drivers for every node vendor. In order to perform deployment of any node it’s necessary to detect which of the conductors runs a required driver and dispatch an RPC call to it.

Solutions
-------------

1. The problem [1] is solvable by tracking the information about locks (which is already done) and forwarding RPC calls to specific conductor.

2. There are several ways to solve the problem [2]:

2.1 Ironic polls all conductors about their drivers periodically and stores that to the DB. The solution is not practical because Ironic has to know about all the conductors.

2.2 Each conductor sends its heartbeat to the API server. The heartbeat contains some meta information about the conductor which is stored to the DB. This solution is more practical because Ironic does not have to know about conductors in order to get the information. However, using heartbeats might cause certain problems.

2.3 In order to get rid of heartbeats it's possible to create different routing topics for different drivers.
Conductors then can subscribe to certain topics depending on what drivers they run. This is the preferred solution for now.

Blueprint information

Status:
Complete
Approver:
aeva black
Priority:
Medium
Drafter:
Roman Prykhodchenko
Direction:
Approved
Assignee:
Roman Prykhodchenko
Definition:
Superseded
Series goal:
Proposed for icehouse
Implementation:
Unknown
Milestone target:
None
Completed by
aeva black

Related branches

Sprints

Whiteboard

When an instance is provisioned on a node, we should also "assign" that node to a single conductor. This will be the basis for routing instance-specific actions, while that instance remains provisioned; such actions could include: routing TFTP requests, running a shellinaboxd daemon for remote serial console, or polling hardware sensor data to monitor fan speed and CPU temperature.

-Devananda, 2012-11-20

Instead of statically assigning an instance to a conductor, we've been discussing using a consistent hash algorithm.
https://blueprints.launchpad.net/ironic/+spec/instance-mapping-by-consistent-hash

-D, 2012-11-21

------------------

I believe this blueprint is entirely superceded by the consistent hash work, specifically review https://review.openstack.org/#/c/58895/

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.

Subscribers

No subscribers.