[openstack-dev] [heat] [scheduler] Bringing things together for Icehouse (now featuring software orchestration)
Mike Spreitzer
mspreitz at us.ibm.com
Wed Sep 25 05:03:21 UTC 2013
Let me elaborate a little on my thoughts about software orchestration, and
respond to the recent mails from Zane and Debo. I have expanded my
picture at
https://docs.google.com/drawings/d/1Y_yyIpql5_cdC8116XrBHzn6GfP_g0NHTTG_W4o0R9U
and added a companion picture at
https://docs.google.com/drawings/d/1TCfNwzH_NBnx3bNz-GQQ1bRVgBpJdstpu0lH_TONw6g
that shows an alternative.
One of the things I see going on is discussion about better techniques for
software orchestration than are supported in plain CFN. Plain CFN allows
any script you want in userdata, and prescription of certain additional
setup elsewhere in cfn metadata. But it is all mixed together and very
concrete. I think many contributors would like to see something with more
abstraction boundaries, not only within one template but also the ability
to have modular sources.
I work closely with some colleagues who have a particular software
orchestration technology they call Weaver. It takes as input for one
deployment not a single monolithic template but rather a collection of
modules. Like higher level constructs in programming languages, these
have some independence and can be re-used in various combinations and
ways. Weaver has a compiler that weaves together the given modules to
form a monolithic model. In fact, the input is a modular Ruby program,
and the Weaver compiler is essentially running that Ruby program; this
program produces the monolithic model as a side effect. Ruby is a pretty
good language in which to embed a domain-specific language, and my
colleagues have done this. The modular Weaver input mostly looks
declarative, but you can use Ruby to reduce the verboseness of, e.g.,
repetitive stuff --- as well as plain old modularity with abstraction. We
think the modular Weaver input is much more compact and better for human
reading and writing than plain old CFN. This might not be obvious when
you are doing the "hello world" example, but when you get to realistic
examples it becomes clear.
The Weaver input discusses infrastructure issues, in the rich way Debo and
I have been advocating, as well as software. For this reason I describe
it as an integrated model (integrating software and infrastructure
issues). I hope for HOT to evolve to be similarly expressive to the
monolithic integrated model produced by the Weaver compiler.
In Weaver, as well as in some of the other software orchestration
technologies being discussed, there is a need for some preparatory work
before the infrastructure (e.g., VMs) is created. This preparatory stage
begins the implementation of the software orchestration abstractions. Here
is the translation from something more abstract into flat userdata and
other cfn metadata. For Weaver, this stage also involves some
stack-specific setup in a distinct coordination service. When the VMs
finally run their userdata, the Weaver-generated scripts there use that
pre-configured part of the coordination service to interact properly with
each other.
I think that, to a first-order approximation, the software orchestration
preparatory stage commutes with holistic infrastructure scheduling. They
address independent issues, and can be done in either order. That is why
I have added a companion picture; the two pictures show the two orders.
My claim of commutativity is limited, as I and colleagues have
demonstrated only one of the two orderings; the other is just a matter of
recent thought. There could be gotchas lurking in there.
Between the two orderings, I have a preference for the one I first
mentioned and have experience with actually running. It has the virtue of
keeping related things closer together: the software orchestration
compiler is next to the software orchestration preparatory stage, and the
holistic infrastructure scheduling is next to the infrastructure
orchestration.
In response to Debo's remark about flexibility: I am happy to see an
architecture that allows either ordering if it turns out that they are
both viable and the community really wants that flexibility. I am not so
sure we can totally give up on architecting where things go, but this
level of flexibility I can understand and get behind (provided it works).
Just as a LP solver is a general utility whose uses do not require
architecting, I can imagine a higher level utility that solves abstract
placement problems. Actually, this is not a matter of imagination. My
group has been evolving such a thing for years. It is now based, as Debo
recommends, on a very flexible and general optimization algorithm. But
the plumbing between it and the rest of the system is significant; I would
not expect many users to take on that magnitude of task.
I do not really want to get into dogmatic fights over what gets labelled
"heat". I will leave the questions about which piece goes where in the
OpenStack programs and projects to those more informed and anointed. What
I am trying to accomplish is an agreement about how various bits of
functionality will relate.
Zane wrote:
> To take the first example, wouldn't your holistic scheduler effectively
have
> to reserve a compute instance and some directly attached block storage
prior
> to actually creating them? Have you considered Climate rather than Heat
as
> an integration point?
I had not considered Climate. Based on recent ML traffic, I see that
Climate is about scheduling into the future, whereas I am only trying to
talk about scheduling for the present. OTOH, perhaps you are concerned
about concurrency issues. I am too. Doing a better job on that is a big
part of the revision my group is working on now. I think it can be done.
I plan to post a pointer to some details soon.
Perhaps the concern is about competition between two managers trying to
manage the same resources. I think that is (a) something that can not be
completely avoided and (b) impossible to do well. My preference is to
focus on one manager, and make sure it tolerates surprises in a way that
is not terrible. Even without competing managers, bugs and other
unexpected failures will cause nasty surprises.
In response to my remark about infrastructure orchestration being
downstream from holistic infrastructure scheduling, Zane wrote:
> I agree that it's necessarily 'downstream' (in the sense of happening
> afterwards). I'd hesitate to use the word 'logically', since I think by
it's
> very nature a holistic scheduler introduces dependencies between
services
> that were intended to be _logically_ independent.
I am not sure I understand the objection here. All I am saying is that a
holistic infrastructure scheduler is one of the things that needs the
services of something that does infrastructure orchestration, and I see no
need to introduce a new such thing. Surely it is not bad for various
things to use the existing mechanism. I see plans for Trove to also do
this, and for the revised autoscaling service to also do this.
Zane later wrote:
> As proposed, the software configs contain directives like 'hosted_on:
> server_name'. (I don't know that I'm a huge fan of this design, but I
don't
> think the exact details are relevant in this context.) There's no
> non-trivial processing in the preparatory stage of software
orchestration
> that would require it to be performed before scheduling could occur.
I hope I have addressed that with my remarks above about software
orchestration.
Zane also wrote:
> Let's make sure we distinguish between doing holistic scheduling, which
> requires a priori knowledge of the resources to be created, and
automatic
> scheduling, which requires psychic knowledge of the user's mind. (Did
the
> user want to optimise for performance or availability? How would you
infer
> that from the template?)
One reason I favor holistic infrastructure scheduling is that I want its
input to be richer than today's CFN templates. Like Debo, I think the
input can contain the kind of information that would otherwise require
mind-reading. My group has been working examples involving multiple
levels of anti-co-location statements, network reachability and proximity
statements, disk exclusivity statements, and statements about the presence
of licensed products.
Zane ended with:
> .. There's nothing that happens while preparing the
> software configurations that's necessary for the former nor sufficient
for
> the latter.
If I understand correctly, I agree, as mentioned in my above remarks about
how software orchestration preparation commutes with holistic
infrastructure scheduling.
Regards,
Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20130925/2b0a665a/attachment.html>
More information about the OpenStack-dev
mailing list