Our current proposed structure would be to use AWS for front end and Azure for the DB which isn't ideal but I find AWS far more flexible for our purposes.
A windows 2008 server license on 2 machines for fall back comes in at around £700 - £800 a month per instance. The same redundancy on Azure is around £80 - £100 a month. If it doesn't work then we go back to the drawing board, if it does work then we have saved ourselves an almighty chunk of money.
We cache a lot of data in our application too which we are putting into elasticache, which is local to EC2.
We haven't used it in great stress yet but initial tests were very good
If azure opened it's model up then we wouldn't need to do all this!
Though they're probably still ephemeral, but then again, so are EC2's...
I kept thinking that this must be a quick and dirty hack and there was a proper PaaS-like solution. Nope, that is the official support for the JVM. Pretty much the opposite of Heroku.
To be fair, they probably offer proper PaaS for their technologies. But for other things, it is basically (windows) infrastructure and you have to configure/update/etc your software on your own. I wouldn't expect any bells and whistles for the Linux support. Then again, it doesn't hurt if we have a choice.
One of the other announcements from yesterday is that there's now tooling for Eclipse which should eliminate this pain point. See http://msdn.microsoft.com/en-us/library/windowsazure/hh69094... for an overly-detailed description of deploying a Java app to Azure.
It didn't take long to figure out (Microsoft is one of the few companies that really puts a lot of effort into documentation, and I appreciate that).
I have two other problems with that:
- I need to think about it again whenever a (security) update is released for the software (not only including the jvm, but also the web server and, for me, scala and akka)
- I have to upload that whole mess each and every time when I update my software. For my slowish internet connection, it took at least 30 mins to upload the whole stack (JRE, netty, scala, akka). [Fixed that by putting the .zips into the storage (whatever their S3 is called) and let the .cmd script download these]
Oh wait, I just remember one more detail about the webserver (taken from the .cmd):
:: 3) Place a Jetty 7.x distribution as jetty7.zip under approot in your project
:: 3.1) If you want to download the server into Azure directly from a URL instead, then
:: uncomment the next line and modify the URL as appropriate:
:: cscript /NoLogo "util\download.vbs" "http://download.eclipse.org/jetty/7.4.5.v20110725/dist/jetty... "jetty7.zip"
That is just wrong. If the eclipse server is down or changes its URL... my servers won't start. And, if I load balance my servers, I everytime use server resources of eclipse?
I really do not understand why Microsoft doesn't simply provide VM images with Java and the common webservers pre-installed. Or, at least a repository inside azure where I can download common Java versions and other common Java software. They spent big marketing dollar on their website and documentation on Java, yet when I actually used it, it felt like the engineer spent 2 hours on the Java support.
All of this is fine IF I want 100% configurable IaaS. But I'd rather have PaaS (which is what the parent comment was about), and Heroku, CloudBees etc. have so much more to offer, at least for Java.