FWIW
We connect to our databases from web applications via ODBC. We ALWAYS have our application servers in the same city as our database server. We are also a multi site company but trying to have the application be driven from a different city is severely taxing on database performance.
Example:
If I have a client in City A and they need to get data from a database in City B. If I use an application (in this case a web server) which also resides in City A (essentially simulating the "
fat client") that directly makes 7 database queries calls to the database in City B over a 50 MBit pipe (with 1-2 ms ping times, which is extremely low for interconnected cities and as these grow so do all your other times) the database query timing is approximately 90 ms and the processing time in total runs around 452 ms and the client web browser had fully received and rendered the page at the 460 ms mark.
Now lets take the flip side of that, we're going to have a client in City A and they still need to get data from a database in City B, but this time our application server is going to reside in City B and then only send the rendered page back to the client in City A after it's been generated. Running the same 7 queries and building the exact same page we end up with a page that has only 20 ms of database query time and 133 ms of processing time in total and the client web browser had fully received and rendered the page at the 140 ms mark.
What you should be able to conclude from this is that making network calls to another server, especially one in a different city is one of the most expensive operations that you can do. It's by far cheaper to keep your database and application closer together and then serve up your final results over the network.
Another side note I'll rant about here is that since very frequently data is being sent over unencrypted lines, having fat clients is just asking for security trouble. Frequently you might be requesting data from the database which is later suppressed by the application, but with a Fat Client, all that data is being sent to the client so it's completely possible to glean that hidden information from a simple network packet sniffer.