Cloud, put plainly, is a server for rent available online. As such, generally most of the types of hassles regarding setting up a server and making it accessible online while not putting the rest of your network at risk, is already handled for you. There are several types of clouds depending on what the cloud offers you:
- Storage clouds - They offer a means to upload and download files. As such, they generally charge by storage usage or by overall capacity. Most of these storage clouds will offer free file hosting up to a certain amount, which is excellent for development (and less so for production).
- Web application clouds - These allow you to create a backend and (potentially) a frontend for your website. The technologies vary greatly, and some also have database support built-in. When you use this you generally get charged by CPU rate.
- Database clouds - These allow you to save data. This may or may not also allow you to save files, though strictly speaking, it is not optimal to do so. Among these, the ones offering NoSQL type databases are generally free, though you should be able to find MySQL services as well. These tend to charge you by amount of data stored.
- Virtual machine clouds - These are generally the most flexible and allow you to do anything you could do with a server connected to the internet, including the above three cloud types. These are however also the most difficult to setup, since what you gain in flexibility, you lose in automatic handling. In other words, you have to do everything yourself. You generally get charged by CPU rate and/or disk capacity.
I will use MySQL as DB, will I have to connect to different DBs to
write to alleviate the stress or I should not even worry about that
because the "cloud" will take care of that? (I will have replication
for the reads)
If the cloud is providing MySQL service, then clustering and stress management is entirely expected to be handled by the server(s). If you're given a virtual machine cloud to install MySQL on, obviously that won't be the case, since you yourself are handling that aspect.
Keep in mind that you could use one cloud to hold your application and another cloud to provide MySQL services. You'd see a slightly larger delay, but it greatly simplifies your task if you need both web application hosting and MySQL hosting.
When accessing files, will I have to know on what server the files
where uploaded to be able to serve them, or will the "cloud" magically
do that ?
It depends entirely on how you're handling files. If you're using a cloud storage service, then again, you won't have to worry about any of that. Presumably, they will give you an API or interface by which you can use to download files. Supposing you wanted to offer your client a link to a file they uploaded, you'd likely not want to download to the web application cloud only to send it to the client, but rather simply offer them a direct link. In this sense, again, you're simplifying things greatly. You do not handle the files, the cloud service does. Instead you handle the URL that the client can use to download that file.
If you're not using a cloud storage service, then it is no different from handling it on your own server. You would presumably then need to download the file to your server, find a folder to put it in, and within MySQL save the file's position on the disk (or network as the case may be). When the client asks for that file, you have to find it and send it yourself.
If you handle it yourself on a virtual machine cloud, you have the added complication that if users could exceed the disk capacity (either through malice or negligence), then there could be supplementary charges and/or the entire virtual machine cloud will no longer respond (you have to hope they had a backup of some sort or you would simply have to reset the machine, neither of which is desirable).
If I increase the "cloud" space by adding a new server, what should I
know about it? simply deploy it and everything is up and running or
will I need to do something to my code to tell "hey, there is another
instance, now do this and that differently"
Assuming each cloud instance is its own virtual machine, there is nothing magical about it. If you have two, then there is going to be no automatic instance handling, and you will therefore need to handle it yourself.
If you use web application clouds, then it depends on what they offer. Some may only give you a single instance, while others will offer to increase that amount by demand for an additional cost.
If you're looking into using clouds to assist with development, my advice to you is to warm your boss to the idea of going the whole 9 yards and using whatever services you require. The point is to simplify production times by cutting out all the excess s*** err stuff you have to go through. There is no point doing this half-way. Speaking from experience, there is really nothing worse than winning the battle to use cloud technology, yet compromising by being given only a single virtual machine instance. The only thing you've gained is that you already have a computer ready to go and connected to the internet. You still have to do the rest of it on your own, with all that that entails regarding security and the rest.
Know that the primary things you have to worry about are the things you yourself introduce to the cloud. For instance, if you're using a web application cloud, you need not worry about security problems other than the ones you create yourself in your web application. If you're using a virtual machine cloud, you will likely have to configure the firewall yourself, and hence any attacks your virtual machine cloud will receive will be on the ports you enabled on your firewall. If you are using a database cloud, ensure that you're verifying the size of the files being uploaded as to prevent all of your storage capacity being occupied by a single user with nothing better to do than to upload 1 TB of porn videos. For the most part, these are common sense things.
I hope that answers your question.