A variety of methods can be used to achieve this. Usually a combination of DNS load balancing and load balancers is the approach that is applied. Allows you to have multiple layers of redundancy, my simple flow diagram:
User -> DNS Response (multiple IPs, makes sure you get a response from a respective cloud provider) -> Load Balancer (such as ELB or HAproxy, makes sure your cloud servers are up) -> cloud server
simple example of a walkthrough: http://blog.rightscale.com/enterprise-cloud-strategies/dns-load-balancing-and-using-multiple-load-balancers-cloud
A solution I have also used before is using CDN to handle DNS responses and dynamically manage traffic across multiple data centers or cloud providers. Akamai does this using global traffic management: http://www.akamai.com/html/solutions/gtm.html
edit: I did forget to mention that with DNS load balancing can provide some interesting behavior based on how upstream servers cache DNS responses, sometimes ISPs (cough comcast, at&t cough, they have gotten better) and other client DNS servers don't follow TTLs you define (the blog I linked mentioned this, but I can't hammer this home enough). Usually this isn't a major problem, but something to consider if you actually run into an issue.