Wild-eyed thinking aloud: Python System Management Infrastructure
Peter Hansen
peter at engcorp.com
Sat Aug 4 14:38:00 EDT 2001
William Annis wrote:
>
> Now I regularly have to rewrite or at least try to
> fix the tools that worked with 15 machines but now fall down: a mass
> of shell scripts, C and perl glommed together with duct tape, caffeine
> and cheap, grad-student labor.
[...]
> Recently I have found myself designing a database-driven
> system to keep track of our machines, what they do, where they sit,
> etc., and I keep thinking "William, you should write an
> *infrastructure* for all this system junk you do."
[...]
> Of course there are free various tools that do these sorts of things
> out there, but they don't exactly play well together, if at all. I
> have ideas on how communication should work, and though I have avoided
> the XML kool-aid up to now, I'm willing to concede XML-RPC might be
> useful here.
XML is not kool-aid, it's an elixir: "good for what ails ye'" :-)
You are describing a system in which, I believe, XML is well
suited to play a role. Its primary advantage is as a standard for
inter-application communication, which is a problem at the heart
of your situation.
Since the interfaces between components in a complex system have
far more effect on its characteristics than do the individual
components, start by addressing the design of the interfaces.
This also allows you to partition the problem, which will be
a necessary step in implementing something under your own
constraints (cost, relatively unclear requirements,
and not disrupting current operations).
I would start by making the decision to standardize on XML
as a representation for *all* your various data sources and
sinks, whether that means storing the data in raw XML, or
just providing converters to change to or from XML so you
can continue to work with your existing formats until the
process is "complete" (whatever that means). This will
initially feel like it will be more cumbersome than, say,
simple text files, but once you are able to dispose of
a dozen custom parsing routines, all bug-ridden whether you
know it or not, you will start to see benefits.
Once this step is accomplished, you could focus on specific
components or subsystems, one at a time. Take the worst
problems and rewrite them as desired. Use Python and its
XML support to smooth over existing rough areas. Use it
to glue in (cheap) tools which can serve your purpose in
other areas, Python-based or not. Migrate to using a web
interface for all your front-end needs, whether accepting
data input from you or users, or generating reports.
Over time you will find you gradually eliminate the last
traces of entire technologies in your system. You will
eventually rewrite or replace the last Perl script.
You will no longer have shell scripts that aren't in
Python. You will notice that your support costs have
dropped dramatically as you cut out the overhead of
these additional technologies.
You will then realize that for the first time you
actually have enough capacity to think about
_adding_ functionality for the first time in years.
You will start to clean up your backlog of "minor"
support requests, and also see that your todo list
has items dropping off it weekly as you realize
you needed to do them only as a side effect of the
incredible complexity of your previous situation.
Life will be good and you'll remember you have
kids and need to eat regularly to survive.
This exercise in Utopythian thinking brought to
you by the letters X, M and L. :-)
I guess my point is that I believe you could start
to solve many of your problems by the application
of a few basic principles:
1. Partition the problem: in this case the problem
is the whole system, and only by partitioning with
a standard interlanguage (XML) can you break
the problem down enough to begin effectively
attacking individual pieces of it. Until you
do this, the problem remains too large to handle.
2. Reduce overhead: in this case you probably are
bogged down by having many times more technologies
in use than you could get by with. After
partitioning, begin reducing the number of
redundant technologies. You can also do this
by adding new technologies selectively, where
they replace several older technologies or
have reduced support costs. Using the web
as your sole interface (except for text editors
for some internal work) is an example.
(I'll never understand why aggressive
technology management is considered a Level 5
practice in the CMM: it should be the first!)
3. Short iterations: from XP, in this case since
you have an almost intractable problem and
limited resources, you should continually set
and achieve very small goals and constantly
adapt your game plan. The traditional approach
of building another monolithic or all-encompassing
infrastructure is so often doomed to fail that
we should concede It Doesn't Work and try some
other techniques tuned for our persistent lack
of a clear idea of what we are really trying
to accomplish.
I'm rambling. I'll leave now. :)
> --
> William Annis - System Administrator - Biomedical Computing Group
> annis at biostat.wisc.edu PGP ID:1024/FBF64031
> Mi parolas Esperanton - La Internacian Lingvon www.esperanto.org
Do vi ankorau komprenas la avantaghojn de interlingvoj,
kiel XML, chu ne? Ne necesas, ke mi konvinku vin. :)
--
----------------------
Peter Hansen, P.Eng.
peter at engcorp.com
More information about the Python-list
mailing list