Skip to Content

AppZero

Carl Hu's blog

Deploy is the new run

Here at AppZero, I've helped many of our customers deploy their applications to numerous compute clouds. All of this deployment has gotten me thinking about the changing state of today's application lifecycle.

The essence of my thinking is that I see deployment as the evolution of run in an engineer's development cycle.

The reusable components available to a software engineer has included, from smaller to larger: subroutines (e.g., threadsafe hash table), class, and library (Btree library, O/R mapping). Recent years have seen the advent of more coarse-grained units of reusability, such as database servers (e.g., mysql), web servers (apache), and language stacks (python, php, ruby/rails).

I argue that these coarse-grained reuse components are analogous to subroutines and libraries. Both abstract functionality behind crisp interfaces. Both significantly improve the reliability and agility of application construction. As an example, the widespread availability of apache and mysql has revolutionized the agility of web application development.

Even more, in the last two years, units of reuse that are even more coarse-grained have become available to application developers and architects. A good example is the LAMPP stack (Linux, Apache, Mysql, Php, Perl) where an architect can treat these component sets as a single reusable block of functionality that an application can take for granted.

The trend continues with the advent of elastic machine provisioning. Now application architects can treat Amazon AWS AMI machine images such as Ubuntu + LAMPP + Ruby + Rails + Hardware as a component that, once created, is completely repeatable (like a sort subroutine), down to performance and bandwidth characteristics.

Here's where it gets interesting.

In the world of smaller reuse components, deployment was simple. If I included a sophisticated implementation of a threadsafe dictionary in my code and wished to run and test it, I simply compiled and ran the resulting binary.

To gain greater benefits, I increase the granularity of the reuse-components I use to build my application. I move from reusing just a threadsafe dictionary or a btree library to a set of database servers, set of cache servers, application servers, web servers, and a set of machine instances running optimized machine images.  

Now, to test the application, I wish I could just run it, but because of complexity, I use the word deploy to convey that I've lost the agility I used to have when I simply ran the application.

But now, we are at the cusp of a revolution: we can now make deploy as simple, as agile, as run. With elastic machine provisioning as a key enabler, deploy is moving back from the IT groups domain to the engineering group. In this environment, agile deploy expands the developer power from write, run, test locally, hand off to IT to develop, stage, certify, deploy.

I think this development is hugely exciting. The efficiency gains made possible by these events will be similar to what we experienced with the advent of the microcomputer --- developers no longer need to depend on others to deploy applications. A dramatic shift in innovation will result.

Here at AppZero,  our VAA technology virtualizes away many of the differences between the developer's desk and the deployment server. We are excited to be part of an ecosystem that will realize this potential, making deploy as easy as run.

In Practice: From your machine, to EC2, and back in 1 minute

Agile development and deployment workflow

This series describes a development and deployment process optimized for the needs of software-as-a-service in terms of cost structure, agility, staging and test requirements.  The resulting system will tolerate the failure of a local hard drive and crashes of a machine - physical or virtual.  Offering good performance / low cost via Amazon's EBS and EC2 services, the system will provide the ability to rollback changes both on the deployed and development system (independently or together) using Subversion.

You can enjoy instantaneous feedback when you are developing code without affecting existing users of your website by using a two machine development and deployment lifecycle.  Deployment can be a 5 second experience (as opposed to 5 minutes) using AppZero technology.

I have tried a number of lifecycle workflows for the development and deployment of Drupal websites. In this series, I will describe a two machine approach involving a local development and test machine and a deployment machine. Deployment of files will use the Subversion Version Control System; the local machine is Windows to make tools like Photoshop convenient to use; the deployment machine is a Windows machine from EC2; and we will use Apache, Drupal, and MySql.

The one-machine approach, topologically simplest, involves developing directly on the deployed machine on the Internet. I've found this approach, while seemingly simple, to have two serious deficiencies:

  • developing a new feature for a site can often involve accidentally breaking existing functionality or look-and-feel. This topology makes it difficult to evolve a site without showing the public every intermediate change.
  • tools like Photoshop  are not convenient to use on a remote basis and ftp'ing files back and forth is a cumbersome process. Even text editing on a remote machine incurs painful latencies.

For these two reasons, I advocate at least a two machine approach. This allows you to develop on your local machine, disconnected from the Internet if necessary, with all the tools you like, and deploying when you desire. Of course, in a two machine topology approach, deployment agility becomes paramount. The difference between 5 seconds to deploy and 5 minutes makes the difference between wonderful and painful.

In Practice: Agile and Scalable Site Development with Drupal, Appzero, and EC2.

Like a lot of folks, I'm excited about the possibilities that arise when you combine the agility of modern CMS's (like Drupal and Wordpress) with the scalability and administrative control offered by Compute Clouds (like Amazon EC2 and GoGrid).

In my work as VP of Technology here at AppZero, I've had the opportunity to work with a number of web site and web app developers who are trying to realize this potential. I've seen first hand that there are a lot of unwritten, but critical, details we must know to capitalize on this power.

This entry is the start of a blog series in which I'll share my viewpoint -- and I welcome your participation.

I'm going to kick off this series by sharing my experiences in developing, deploying, updating, and scaling out a Drupal installation in Amazon's EC2 Compute Cloud. I'll let you know what's worked and what's failed. I'm hoping I can make your life a little smoother so you can avoid some of the pain we've gone through -- and get right to the good part.

I'll be writing at least one entry a week.  Here's my plan:

Part 1: An agile development and deployment workflow: from your machine, to EC2, and back in 1 minute.
Part 2: Getting Drupal on your Windows machine in 5 minutes.
Part 3: Developing your site.
Part 4: Provisioning an EC2 machine.
Part 5: Moving your Drupal development site to the EC2 machine.
Part 6: Updating your Website and redeploying in a matter of seconds.
Part 7: Scaling out your website.
Part 8: Concluding comments.

Join me on this journey by commenting on the blog or writing me directly at chu@appzero.com.

 

Syndicate content