As Matt says, there are companies which will provide CDNs.
A cheaper approach would be to use RRDNS, with
www.example.com A (UK address)
www.example.com A (US address)
uk.www.example.com A (UK address)
uk.www.example.com A (UK address)
uk.www.example.com A (UK address)
...
uk.www.example.com A (US address)
us.www.example.com A (US address)
us.www.example.com A (US address)
us.www.example.com A (US address)
...
us.www.example.com A (UK address)
And on both servers, try to drop a cookie (if there's not one) indicating which continent the client is on (saves repeated expensive lookups).
Maintain the state of the 'other' system(s) in each server. When you get a connection on the www.example.com address, redirect to the most local system for the customer which is available (e.g. uk.www.example.com).
On the localised vhosts (uk. and us.) whenever a GET request comes in, if it is for a non-local vhost, check if the prefered host at that location is available, and redirect the customer there.
You'd probably want to implement better failover detection (avoiding split-brain) and detect looping between servers not to mention other tweaks.
Its not perfect and relies a lot on you coding your own redirect / failover handling.
A more practical solution might be to implement your own location-sensitive DNS server
alternatively, there are a small, but growing number of DNS providers who can provide just such a service (again use RRDNS with lots of repeated local A and few remote A records).
C.