Earlier in December I did a webinar on the Zend PHP Cloud Application Platform. It's not some new product or anything like that, but rather a view of how our software is going to fit together. It's not something that will be "released" in the typical software fashion. Instead it is the mindset of our product development teams when they look at building new features. Cloud-based pricing for Zend Server, AWS/Cloud integration in Zend Studio, and, of course, SimpleCloud.
SimpleCloud is an initiative started last year (2009) for the purpose of allowing you to build cloud-portable applications. In other words, you would be able to build an application on your local machine and (mostly) transparently work on any of the three supported cloud platforms. The example application I built for that webinar was one that used, not just "the Cloud", but all of the cloud services available in SimpleCloud, the Zend Server Job Queue (to scale data processing) and, of course, Studio with it's AWS integration.
The application was one that took an uploaded image and resized it. Simple enough, unless you want it to scale. The example application that I wrote can theoretically scale to quite high heights. Not because I'm a great programmer, but because I utilized the underlying architecture of people smarter than me. That's kind of what the cloud is. Do you have the expertise to ward off a massive, worldwide DDoS? Apparently Amazon does. One of the prime rules of being human is to not only know your strengths, but know your weaknesses. Humility is very hard for humans to do, and allowing for the fact that someone may be better than you at something is hard to admit.
The purpose of this application was to demonstrate how you can build an application a) for scalability, and, supplementally, b) for the cloud. It's definitely not there to be pretty. So what it does is implement several cloud-based features. You could implement all of these on your own, but doing so (especially if you are a business) would probably cost you more. Part of the cloud's appeal is that someone else is the specialist. Could you use RabbitMQ? Sure. But then you have to manage it. Could you have a massively distributed file system? Sure! But then you have to manage it.
When you boil it all down; when you distill it to it's essentials; when you reduce it to it's finest ingredients, the cloud is just an on-demand managed service provider. Nothing more.
So, what does this application do?
- It receives an image to be uploaded
- It stores this image on a file system
- Executes a job on the Zend Server Job Queue to resize the images
- Communicate with the browser, letting the end user know which image sizes have been processed
- Browse files with meta data
- Download resized files
Could you do all of that on your own? Sure. Could you do it for a couple of thousand users? Sure. Could you do it for a couple of thousand users who all decided to upload their images at the same time? Nope. Probably not. The cloud isn't just about scalabilty, but elastic scalability. And the chances are pretty high that you are not good at that, unless you are a large company with loads of resources to call upon.
So let's, then, take a look at what this looks like. Check the "Related" panel for the link to part 2.