All,

I want to introduce myself to the Apache CloudStack community.  I've have
had a long love/hate relationship with CloudStack over the years, but
recently I've decided to fully dedicate myself to working on this platform
(again).

Just a little about me, well okay, this might be a little long.  I've been
a Linux user for a good amount of time.  I've ran Linux as my primary OS
for over 15 years.  Both personally and professionally, my desktops/laptops
have always ran Linux.  As soon as I discovered Linux I also fell in love
with virtualization.  I've ran the gamut in terms of virtualization
technologies.  Type 1, Type 2, containers, etc.  I have a particular
fondness for Xen though.  I've been a Xen user since the 2.x days.

Couple years after I got into Linux I discovered programming.  After so
many failed "./configure && make" I figured I'd should probably learn C/C++
to figure out why the heck nothing ever "make'd" right.  I worked for
awhile running a lab for developers that were writing stuff in Java.  Again
I learned Java to figure out why the heck their stuff kept failing to build
and run.  After I learned Java I took the professional route of leaving the
sysadmin stuff and started programming distributed systems.

As means to an end I developed a system that would take code builds, deploy
them to Xen thin provisioned VMs.  So a developer could go to a portal,
click some stuff and get a clean VM that optionally had a code build on
it.  We would then running automated integration tests against it.  This
was around 2006.  About a year or 2 later I discovered EC2 and was like
"holy crap, that's exactly what I want."  Then I found eucalpytus and
realized there was a whole industry around this stuff.  IaaS is basically
the trifecta for me.  I get to combine my love of Linux, virtualization,
and programming distributed system.   Basically since then I've been
absolutely obsessed with IaaS.

Around 2010 I got a job at Go Daddy specifically to build their public
Cloud product.  Before I even got there they had already decided to go with
vmops/cloud.com.  I'm pretty sure they were already cloud.com when I
started.  At Go Daddy with a core team of about 5 guys (1 UI guys, 2 java
guys, 2 sysengs) we built three generations of clouds.  The first
generation of cloud was basically CloudStack 2.2++.  It was CloudStack 2.2
with a new UI, billing system, storage subsystem, and a tons of operational
tools.  That was the initial public launch of our Cloud.

The second generation was "CloudStack like."  Basically we had a lot of
problems with CloudStack at the time.  First, it was just a complete pain
to operationalize.  Trying to hand off CloudStack to our ops and support
teams was practically impossible.  Basically our level 1 and 2 support
would be very efficient at escalating all issues to level 3 (my team).
Typically the sysadmins would see something is stuck, they'd look at a log
(that made no sense to them at all), see a 100 line stack trace and then
they'd just toss the issue to the developers.  Also, their was no
visibility to the general health of CloudStack.  If you asked ops, "How's
production doing right now?"  Their answer would be, "Well I can ping the
UI and the java processes are still running."  In developer terms that is
kinda like saying, "Well it compiles so it must work fine."

Secondly, we had a hard time extending the platform.  We always seemed to
be a little ahead of the curve in how we wanted to implement the cloud.
How we wanted to run storage and networking didn't match at all what
CloudStack was at that time.  So we embarked on improving it.  It was just
way too difficult.  Basically we felt like 70% of our dev time was just
fighting the framework.  So we made the choice to abandon the platform.  We
started rewriting the the entire platform.  We did this piece meal over
time.  We'd redo a subsystem, put that in production, and then move onto
the next subsystem.  This ended up being very tricky because we had mixture
of CloudStack and our own stuff.  We also always tried to do no downtime
deployments.  So we would almost never lock people out of the UI and most
deployments were during business hours.  We basically finished most of this
work around summer last year.  I gave a talk at OSCON 2012 [1] regarding
what we built.  A couple months later, solely based on business direction,
we decided to stop selling the public cloud (it really wasn't shutdown
until about May this year.  I'm proud to say it ran for almost 8 months
with live customers, some quite large, with no incident and no dedicated
ops team).

After we shutdown the public cloud, we turned our effort to building a
private cloud to run Go Daddy on top of it.  This marked the third
generation of the cloud.  At this point the IaaS system was 100% our code.
The problem was it inherited the CloudStack DB schema and with it a lot of
cruft in dealing with being compatible with CloudStack.  So we started a
clean up of the code, which ended up being a huge refactor.  Our goal was
to be able to support all of Go Daddy running on it.  That meant we needed
a very flexible and extensible platform to support a very heterogeneous
environment.  (We had a very scalable L3 network design that I've yet to
see any IaaS system be able to support too.)  Additionally it needed to
plug into all other systems in Go Daddy for monitor, tracking, and network
management (IPAM, etc).  This was by far my favorite cloud to build.
Really, really complex.  The goal was to build a system that could deploy
over 1 million VMs in less than a day.  (I think we did it too,
unfortunately I quit before I could fully prove it.  We got the system to
the point of deploying 1000 real VMs in 1 minute.  I just never had the
time to fully run the 1m test).

So I've done a lot with cloud provisioning systems.  I was given an
incredible opportunity at Go Daddy that most people don't get.  I was
allowed to build an IaaS system from scratch and given millions and
millions in hardware to build and test it out and run real production work
loads on it.  I very much liked my cloud I built.  Unfortunately, despite
my best efforts, it was all proprietary.  I've decided to abandon all the
proprietary stuff I've done and try to do my best to help out the open
source IaaS landscape.  After looking at all the stacks out there, I
honestly believe CloudStack is the best one.  I reached out to Citrix and
they have been so gracious as to employee me full time to work on
CloudStack.

So expect to hear a lot from me.  I'm initially very interested at
improving the core architecture of CloudStack.  Just a couple random
things.  1) I'm here to code.  Talking is great, collaboration and
information sharing is important, but I'm not here just to talk.  I'm here
to actually get stuff done.  2)  I've only ran production clouds.  None of
this dev/test/poc "optimize for innovation" crap.  I want a system I can
run in production.  So stability, upgrades, making sysadmins happy, is very
important to me.  3)  I'm very pragmatic and practical about how I
implement stuff.  I always have the 2 year vision, but I'm very interested
in what I can deliver in the next 3-6 months.  I enjoy delivering solutions
far more than coding. 4) I'm really bad at typing emails and make tons of
typos and forget important words like "not" or "no" all the time.

I really look forward to gaining the trust and respect of this community
and, more importantly, improving CloudStack.  I'm based out of Phoenix, AZ
area, if anybody happens to be in this fabulous part of the country hit me
up and we'll get together.

Darren Shepherd

[1] You can see my crappy slides for my OSCON talk at
http://www.oscon.com/oscon2012/public/schedule/detail/24035 .  They were
really bad, basically I created them the night before.  Did I mention I'm
good at procrastination too.  Also that has the only known picture of me on
the internet.

Reply via email to