It is interesting to see Edward’s comment that according to EMC/VMware, widespread production deployment of Cloud Apps is 3-5 years off. If that is the case the VMware CloudFoundry initiative should be focused on cutting-edge development rather than porting existing apps, and in much the same way that Microsoft has always courted developers, CloudFoundry should be the latest cool thing for developer productivity. It’s interesting to talk about this stuff in the abstract, and at the strategic level, but sometimes it’s worth understanding what happens when you need to make the decisions for yourself.
So, although I’m more of an Architect than a Developer I’m knocking up a prototype application – this isn’t a thought experiment I really am building a real prototype with a view to showing to a real enterprise customer (in fact several), but it’s not being built for one specific customer so there aren’t any pre-defined corporate standards on the technology that I have to build it on.
It’s a fairly standard database application, and it’s been designed using traditional data modelling, entity relationships, attributes etc. The constraints are as follows:
- I don’t want to spend a lot of money at this stage on tools and infrastructure to build and run it on – after all the customer isn’t paying yet
- I want to get the prototype together as fast as possible. Weeks would be good, after all it’s my own time.
- I’m realistic enough to know that if the prototype works, there won’t be a lot of resource available for re-implementing it, so I need something that at least stands a chance of scaling to reasonable data volumes (tens, maybe hundreds of millions of database records) and maybe a hundred users.
- I need fairly fine-grained security on the entities, and I need the opportunity to authenticate from Active Directory
- I need a web-front end. In fact I don’t want anything other than a web-front end, and I don’t want to have to mess around with lots of HTML and CSS to get me there.
- I definitely need it to run on-premise in the first instance, but there may be opportunities to turn it into a cloud service in due course. It’s a standalone custom web app, so a PaaS cloud would seem to be the way to go.
- I’d like to develop this in Eclipse because I’m used to that and I now find it slightly more productive than Emacs.
- I don’t actually have a lot of time to research my options.
So, I went through the process of choosing development technology without any pre-conceptions about how specific vendors would feature in the choices (and yes it has all changed since my day). I thought briefly about .NET (I actually have an old version of Visual Studio somewhere), but for anything reasonable on the Web side I’ll need to upgrade. The free Visual Studio Express version doesn’t do much and the Pro versions of the tools are expensive for a one-off prototype. Anyway it didn’t seem like I needed to lock myself into paying Microsoft to license its backends further down the line or to restrict my choices to Azure if I want to stick it in a PaaS cloud.
So, I had a look at Ruby, at Python and thought about doing it in PHP or Java. All of these have frameworks to speed up the process of building simple Web front-ends. I’ve not personally written code for one of these, but given the nature of the application I know I can get a lot of value from these frameworks in speeding up development.
After a bit of Googling I look ed at Rails (Ruby), web2py (Python), Zend (PHP) and Grails (Groovy – which is close enough to Java not to scare the horses). Again I don’t have a lot of time, so although web2py looks nice, I don’t feel terribly comfortable with the Python, Similarly Ruby on Rails I don’t know Ruby, Zend looks a bit complex, but when I came to look at Grails it suddenly started to make sense. The documentation is clear and I saw snippets of Java that I understand.
So, focusing on Grails, I start to look at various other requirements on my list. As far as scalability and performance is concerned it turns out it’s got a built-in object-relational database mapping through Hibernate and an abstraction over the database layer that allows a memcache, also it’s restful and the mid-tier all runs in tomcat, and whilst there is a lot of software in the stack, I have some faith in all of this scaling to the levels I need to go to.
It also turns out there are a couple of plugins to deal with security at the entity level and the entity instance level, which will cover off my requirement for fine-grained access control. and’ there’s an LDAP plugin that I can use to glue into Active Directory (and an OpenID one as well in case there is a future requirement for that). So I get to the end of my list of requirements and decide it’s going to be Grails.
So far, I’ve noticed the SpringSource logo on the Grails site, but my interaction with VMware has been limited. However, once I’ve made the decision to go with Grails, some interesting stuff starts to happen.
- I need a development machine. I could develop in the cloud, but I’d rather not – I sometimes write code on planes, and I want to show this to the customer in a self-contained environment. I’ve got some development hardware running ESX, and I’d like also to develop and/or demo on my laptop which is running Windows. I don’t want to clutter the laptop up with extra installs, and in any case it seems to make more sense to put all the back-end stuff on Linux because it’ll end up there anyway, so I decide to build a dev environment in VMware Player on my laptop. This I download from the VMware website.
- I need an O/S. I’m familiar with Ubuntu and it’s free, so I download and install that in my VM.
- I then need Grails in Eclipse, which is interesting. The Grails site points me at a SpringSource Tool Suite which I can install inside Eclipse. It’s also available pre-packaged with Eclipse and this turns out ton be the simplest way to install it and get it working. As part of this install it also installs a version of Tomcat for me called tcServer development edition. I’d be happy with vanilla Tomcat, but hey if there’s a different one in the bundle why worry?
So far, I haven’t actually paid VMware anything but I have fairly willingly downloaded and installed free versions of two of their paid-for products, and as a result I am running vFabric in a machine image that I can manage under vSphere. I can also deploy the whole thing straightforwardly to CloudFoundry. I could have used Red Hat or even Fedora in my VM but in reality I didn’t, so I don’t have a relationship with Red Hat at this stage.
What’s interesting about this whole process is that I approached this as a developer, and made the simple developer-friendly choices and ended up with VMware. I’m certainly well-disposed towards VMware and at no point did I feel locked-in, and indeed I may not be.
As my prototype develops I’ll continue to feed back on my experience with all of this technology, and ultimately the PaaS options it offers me. Should be interesting.