5 Reasons Simple Cloud is a Dark Cloud
- 2
- Add a Comment
When it comes to technology, everyone thinks they want interoperability. Using SQL, JavaScript or map APIs? There's an abstraction layer for that (SQL, JavaScript, map APIs). Writing mobile applications? There's an abstraction layer for that too (PhoneGap, Appcelerator, among others).
Developing "cloud-native" applications? Soon there'll be an abstraction layer for that too. Yesterday Zend announced the Simple Cloud API, a set of PHP classes for "writing scalable and highly available applications that are still portable."
Sounds great, right? Not so much. As Chief Architect of a PHP-based "cloud-native" application that's handling hundreds of millions of requests per month, there's no way I'd consider using Simple Cloud. Here are five reasons why you shouldn't either:
1. Abstractions leak. It's never as easy as it seems, which becomes painfully obvious at the least opportune moment. Let's have a show of hands of how many people have launched a SQL-abstraction based web application, only to find later that the crazy-ass SQL your toolset generated was 100x slower than one you'd have cooked up on your own. Okay then. The Law of Leaky Abstractions drags us down when it's time to figure out what's broken.
2. The Lowest common denominator rules. Abstraction layers often talk about unifying access to technologies where the differences are insignificant. Which is funny, since the providers of those technologies introduce differences to be competitive. Do you really want your web applications to be built around the elements of cloud services that are all the same? Your competition will likely be focusing on leveraging cloud advantages to the max, which will inevitably mean taking advantage of features that a lowest common denominator API ignores.
3. The true leaders don't participate. Simple Cloud lists contributors including Microsoft, IBM, Rackspace, Nirvanix and Go Grid, and dubs these companies as "leading the cloud revolution." Note how the three published APIs all include support for an Amazon Web Services solution. Who's really leading here? Amazon is leading the cloud revolution, and has been all along. Everyone else is just playing catch-up.
We've seen a similar situation recently. Remember OpenSocial? Google, MySpace, Yahoo and a few others banded together when Facebook handed their asses to them a couple of years ago. Facebook has never participated, and continues to lead the pack in social platform application development.
Of course all the companies that are not leading want to band together for the sake of interoperability, since interoperability means a greater chance of survival. But as a developer, be careful of getting roped into these company-serving agendas--it will cost you more than it costs them, with little return on your investment.
4. Native adoption isn't hard. Have you looked at the Amazon Web Services APIs, and noticed how many of them actually use the term "Simple" in their full descriptions? SDB is short for SimpleDB, S3 is short for Simple Storage Service. Is an API simplifying these already-simple APIs really necessary? If you're looking for a reduced feature set and inability to leverage each service to the maximum, sure! Otherwise, bite the very tiny bullet and learn about each service that you need. They're not hard. Trust me.
5. Face it: You'll probably never move. Despite portability claims, you'll likely never move from one service to another willy nilly. Consider the last significant web application you built around the database of your choice. Even if you used an abstraction layer, do you really think you could just pick it up tomorrow and move to a competing database engine? Whenever this scenario is truly considered, it's a much more complicated problem than just swapping out the underlying RDBMS. An audit must be done of all code to make sure no one snuck in a workaround query that included vendor-specific features, a new backup system needs to be evaluated (odd that no one has cooked up an SQL backup abstraction layer!), performance testing needs to be done ... all for what? Try doing this in a real company and see how quickly your plan gets shot down. Real companies have real business problems to be solving, and rarely have spare engineering cycles to waste on switching technologies that lie behind abstraction layers. So, just because you could doesn't mean you ever will.
With all that said, don't get me wrong: I love it that there are multiple providers getting into the cloud computing game in a meaningful way. I am actively evaluating each service and looking at ways to spread my cloud dependancies around to reduce my exposure to single-company cloud fail.
However, with each set of services I evaluate, I look for exactly the kinds of differentiating details that abstraction layers strive to hide, and will build out my application to leverage each environment to the max. My company and the services my customers consume deserve the very best utilization of upstream resources possible. Don't yours?
2 Comments
Wil Sinclair
September 25th, 2009
at 9:36am
Hi, Clay. As the guy who’s mostly responsible for the API, I’m probably the best person at the moment to respond to the great points you make.
1) The DB abstraction analogy is very appropriate in many ways, but IMO you take it pretty far without tying it back to the API. Yes, there will be what we call ‘vendor value add’ features that more advanced cloud applications are likely to use. We’ve openly embraced this fact. We offer access to the basic functionality with the Simple Cloud API, and we have the luxury of having full-featured client libs that developers can drop down to in ZF. So, why use the API if you plan to use such features? For one, you will have a much clearer distinction between value-add features and common features so that you know when you’re locking in and can more easily migrate if you must. Also, you will also have only one very simple and stable API to learn, even if you switch vendors. The Simple Cloud API is also *extremely* thin to the point that it adds negligible overhead to the calls made by the client libs in ZF. There is no magic under the hood, and no generation of anything, so I’m not sure what the complex SQL generation has to do with anything here to be honest.
2) See 1)
3) Keep in mind that Amazon hasn’t said no yet.
In fact, we have an ongoing discussion with them, and they are very interested in what we’re doing both in the API and the AWS client libs in ZF. But regardless of whether they contribute to the Simple Cloud API, the adapters for their services are still full featured due to community and Zend’s own contributions. While Amazon will always be welcome to join the effort- along with any other cloud player that can contribute- we recognize that they are the leader in the cloud space and have therefore ensured we support them well. I also personally believe that MS, Rackspace, Nirvanix, and GoGrid are true leaders in their cloud offerings, and IBM is leading thought around cloud technologies. I also think IBM will have a great impact and influence on the cloud space if/when they release their own offerings.
4) Well, adoption of the Simple Cloud API isn’t hard either.
And there are still benefits even if you don’t switch (see 1)).
5) True, established apps may never switch. But developers evaluating services for their barely written apps (likely nothing more than prototypes) are likely to switch around until they find the right platform for them. After they’ve found the right service they’ll see no reason to move off of the Simple Cloud API if we’ve met our goals with the project. And keep in mind that not all cloud apps have the cloud requirements that your apps have.
In any case, thanks for the feedback. I’d really appreciate it if you started a forum topic about this here: http://www.simplecloud.org/forum. And/or dicuss this with me in an open forum like a webinar, etc.
Thanks again!
,Wil
Sam Hennessy
September 25th, 2009
at 12:08pm
Disclaimer: I work for Zend, but I nothing to do with this project.
Some of the value I see from projects like Simple Cloud, would be to help alleviate the fear of vendor lock in.
While this is not as big a deal as you have pointed out, it’s nice to have the tools that you can take to a decision maker to allow you to more easily get buy in.
In the end, projects like this may not be of value to everyone, but they will drive the cloud forward and I think that’s a positive thing.