Architecture of highly available application
I have to write an Application lets call it MA(My App), and i'm currently working on the architecture.
Ok so i want to make a desktop application(c# .net wpf) that connects to a webservice where i read and write data from. Since there is a lot of logging, there will be a lot of writing happening most of the time.
I have a requirement, that the application works at all times, so i have to account for possible database server crashes, or web server crashes. So i thought i would just set up a mirror for the database and the webserver, in case something goes down, i can still reach the mirror.
The application also will be used across continents, so if my db server is located in the US, and a user from asia uses the application, he will experience more latency than a user from the united states. I maybe thought the i could set up an instansce of the database for each location the application will be used, lets say 3 database servers(6 if you count the mirrors). And 3 Web servers for the REST APIs(6 if you count the mirrors). So that then all users from asia use the web service in asia which connects to the db located in asia. However, since i don't want to have to deal with 3 different databases, i would like for them to sync each other, so that after a sync every database has the same data. I'm planning on using MS SQL for the DB.
- Is this a well designed architecture?
- Do you have any suggestion on what i can/should change?
- Is it possible to keep all databases synced?
Thanks in advance for your help :) Have a nice day!
I think this is an example of premature-optimisation/over-engineering. Build your app. Get it into production in the US. Worry about these things later.
If latency is a problem in certain areas then think about introducing mirroring etc at a later date. I doubt it will be a problem.
We've got a system in production based in Amazon Web Services in EUWest1 (Ireland) - and its used by European/American/Asian customers. There's no latency issue that has caused us to mirror our app internationally.