Windows Azure is a collection of services managed by Microsoft that, together with software development tools and SDKs (for popular languages such as C#, Java, Ruby, Python, Node.js, or over plain REST), comprise a computing platform.
It includes services for on-demand computing, storage (in No-SQL form and Blob form), message queueing, service bus, secure connection, identity management, horizontably-scalable relational database, big data computing (Hadoop), media encoding and streaming, content distribution network, reporting, business intelligence, a data marketplace.
The list goes on and on and is increasing rapidly. The gist is, you consume those services, Microsoft hosts and manages them (with high availability, geographic redundancy, etc.) and you pay for what you use.
- It's speed is very unpredictable. Sometimes it'll be lighting fast, other times requests will hang for up to 8 seconds. We've used nodes in data centers across the world to measure this and have confirmed 100% that the delay is happening at App Engine and not our machines :)
- There's been several times where I have used Google Python libraries (for other Google products) and found them incompatible with the version of Python on app engine. I've had to write several dummy modules that replace googles ones that attempt to open a file on the disk in write mode (not allowed) when they're not even writing to the file! I cant be specific, under NDA. I have contributed the fixes back to the Google API team.
- The last 3 SDK upgrades has broken something in the core modules, or Django. App Engine SDK upgrades are now a running joke at my workplace
- It's insanely expensive for the CPU / DB power that you get
Part of Python [removed] core module on App Engine has a bug in it. Including this module will terminate your application with an exception.
Nobody notices it in development or testing, because the dev system was including the python distributions [removed] module, which is apparently different to the one on App Engine.
Site makes it through testing. push live and crunch, falls over.
Now we have a test app engine account, and have to deploy to that first, because we cant rely on the installation of Python on App Engine matching the installation of python on our dev machines, even though the versions are exactly the same
I'm not following. Why is the name of the module "[removed]". Was that an edit? Why? Surely a bug in a core python module (whether it be AppEngine-specific or not) is a matter worthy of public discussion.
That's good practice. You test locally, then test on a real deployment environment, then deploy to production. You should also use app versions and test new ideas on new versions and always plan for rolling back.
PaaS is a tough thing to do. You have to automatically deploy new instances of your applications, distribute those instances according to the load on individual nodes of its clusters. Also, they have to do more or less the same with the datastore. If you have loads that experience sharp peaks, new instances will have to be spun up and that may take some time. Some seemingly random variations on response time are to be expected when you consider it's not only your application that's running there. You can somehow mitigate that by setting up warmup requests (https://developers.google.com/appengine/docs/python/config/a...) and tuning the minimum pending latency (https://developers.google.com/appengine/docs/adminconsole/pe...). If you build a fixed size cluster to run a single application, you'll experience much more predictable response times.
As for the price, you should consider what would it cost running your application on IaaS, rented or co-lo hardware. As always, YMMV.
Yes, Windows Azure is very similar to Amazon Web Services, but with Microsoft's technology stack. You're supposed to use SQL Azure (the 'managed' version of SQL Server with some cool features like Federations and Data Sync) as your main database system, for example. There's Blob Storage which is like S3 and Table Storage which is more like Cassandra but you can ignore it (no indexes is a huge handicap). The main difference between EC2 and Azure Compute is that Microsoft auto-updates Windows and IIS on Azure whereas you have to do the updates yourself on EC2. Otherwise it's basically the same at the same price.
For a one-man project, nothing beats Google App Engine. Azure and AWS require more work.
I'd argue, the platform that is easiest depends on your skill set/background. Azure is going to be significantly easier and more productive for someone with a .NET background, for instance over any of the others mentioned.
Plus Google AppEngine (yes, Azure has more than 1 flavour: AWS style, GAE style, and the following that I'm about to mention) and also an environment where you can drop your pre-configured Windows 2008 Server VM as well (not sure if it is limited to Windows 2008 VM only).
I think the main difference, according to what I got from a friend who used it, is that the Azure PaaS offering is billed by uptime while Google's App Engine is billed by actual usage (because it can shut down unused instances).
"... I never understood what Azure actually is. All I hear is some buzzwords."
A common problem in the software world, not limited to MS.
The question is whether this is intentional or whether the company lacks the ability to actually tell you. Communication with the customer might be handled solely by marketing executives who may not understand what Azure actually is. The code might be so needlessly complicated that even few developers have a wholistic understanding of it.
One of the great things about open source is that if the need arises the customer can find out what something actually is. The system can be disassembled into smaller parts for a better understanding. The source code for individual programs can be read. The code for the compiler is also open for inspection. This has great benefits.