[openstack-dev] [nova] [placement] conducting, ovo and the placement api
Chris Dent
cdent+os at anticdent.org
Sat Jun 4 12:52:50 UTC 2016
(Warning, there might be crazy ideas ahead, mostly sending this out
to engender some discussion and if these ideas are indeed crazy use
their debunking as ways to strengthen and clarifying existing plans.)
There was a conversation earlier this week in which, if I understood
things correctly, one of the possible outcomes was that it might make
sense for the new placement service (which will perform the function
currently provided by the scheduler in Nova) to only get used over its
REST API, as this will ease its extraction to a standalone service.
Until now the various proposed patches related to resource providers,
generic resource pools, inventories and allocations have been calling
methods on versioned objects to do persistence direct to the database.
If we're going to move to an HTTP-only API I wonder if that gives us
some opportunities to minimize complexity in the longer term
architecture:
* If we have many placement API servers talking to the same logical
datastore
* And if we don't need a conductor
* And we have schematized representations in the API
Then might it be possible that we don't need oslo versioned objects nor
RPC and we can separate persistence from data structure?
If desired we could still use OVO to version the structure of, for
example, inventory information, but rather than telling an Inventory (or
InventoryList) to save itself, the API would save the information. The
complexity seems to enter picture when we try to make this stuff
remotable and self-persistable. If there's no conductor we don't need
really need that, do we? Or do we? If so, why?
Then:
* The way to scale is to add more placement API servers and more
nodes in the galera (or whatever) cluster. The API servers just
talk to the persistence layer themselves. There are no tasks to
"conduct".
* If API needs to be versioned then it can version the external
representations that it uses.
What I'm concerned about is mainly two things:
* Nova-side versioned objects that are making http calls in
themselves. For example, an Inventory object that knows how to
save itself to the placement API over HTTP. Argh. No. Magical
self-persisting objects are already messy enough. Adding a second
medium over which persistence can happen is dire. Let's do
something else please.
* A possible outcome here is that we're going to have objects in Nova
and objects in Placement that people will expect to co-evolve.
That's a tedious dependency. Using versioned objects on both side
would allow us to co-evolve and make it relatively easy in some
ways, but that's bad in some ways. I think we're better off making it
hard to change the on-the-wire representation and keep the
expectations of the placement API strict and as static as possible.
Since we don't have to represent fungible things like
an-extremely-verbose-description-of-a-computer-and-all-extra-bits,
only Inventory of some type, Allocation of some of that Inventory,
and a thing which has some inventory we should try to get away
with it, for the sake of simplicity[1].
I'm talking from a position of ignorance here, so I may be talking
completely BS, but I wanted to get this stuff out there so it was in
the shared mental mix.
[1] What I'm suggesting here is that strictness of representation is
a useful constraint for the development of the system.
--
Chris Dent (╯°□°)╯︵┻━┻ http://anticdent.org/
freenode: cdent tw: @anticdent
More information about the OpenStack-dev
mailing list