Unless you are really careful in cloud adopting life cycle - you are locked-up either with the cloud vendor (eg Amazon AWS) or with your development platform (eg Google Apps). The data portability interfaces are the key factors, not only for the success of Platform as a Service (PaaS, like Google App Engine) or Infrastructure as a Service (IaaS, like Amazon EC2 or S3) but also for the SaaS players. It is imperative that you choose the right design so that you reap the cost benefits and also keep your users happy on a longer-term.
While choosing the cloud models, some of the key factors one needs to look at are:
- Computing model (HTTP requests only, processes, OS etc)
- Service creation platform (Python, Ruby, Perl or any)
- File storage model (local, ZFS, block storage, tempFS)
- Database storage model (BigTable, SQL, simpleDB)
- Network topology (hidden, private, shared networks)
- Network protocols (http, tcp, udp)
- Network connectivity (hidden, NAT, VPN, L4, L7)
- DNS (static, dynamic, fixed)