I got a design idea and I would like to have some advice from SF about It. I have 5 customers with small real-estate databases. I've built for them a desktop app and now they would like to merge their database to share their data. I don't want to centralize everything in one place nor I want to do maintenance for servers. They told me also, that all of them in their offices, have little servers and maintenance guys available. Although everything seems suitable for web application, I had the idea to experiment something new:
- Any customer small-server wild be connected to the others in a sort of mesh network without a single point of failure and through VPNs.
- If one of the servers went down the customers could still connect to their databases from one of the other mesh networked servers instead of from the local one that is down.
- During normal operations all the servers sync the db with the others through VPNs.
- I can accept a half-day timing window of NON synched data, in other words, since I don't need real time synchronization, the server don't have to always stay in synch.
- I can migrate my data over to other Non-Sql technologies like CouchDB or Redis or whatever you suggest.
As you can see I don't have a lot of constraints and although I could go with a web application I would like to delegate and decentralize support, data-privacy and management, as more as I can to my customers offices.
Is that a crazy idea? Do you know If something similar exist? Which technology would you suggest?
Something similar does exist, Amazon, Rackspace, MS Azure and other cloud providers. Make it a web app, clowd aware, host it on one of those services - done.
Otherwise, being familar with VPN, creating a mesh with VPN isn't a lot of fun. VPN's are tunnels with 2 endpoints. To create a mesh, each VPN endpoint would need to have a separate tunnel to a number of other endpoints. (or all) IP assignment and routing then can get pretty hairy from there. Do people do it, sure. Would you need a Cisco/Juniper/VPN expert? Probably.
Then, the database connection would get pretty fun from a code point of view. Each location has a full copy of the database? Then replicates changes to the other locations? You still have point of failure at each location, just only that location is impacted, and could potentially lose any of the current days data at any time.
Cloud while a buzz word at the moment, seems the way to go. Or just internet, why manage the whole virtual server when you can just get some webhosting, run your program and let them worry about the server.