Context
I have an enterprise Mac App that uses App Services and relies on Realm Sync. The app is essentially like iTunes: it tracks 1-2 million audio files, has a bunch of columns to display/edit metadata, and operates like a shared Google Doc because 25-30 employees run the app simultaneously and work on the same data. Realm Sync keeps everything up-to-date in realtime.
Now, the company that uses this app wants to expand it to be used at other companies. There will be NO shared data between companies—each requires a separate database.
Question
We’re currently running on an M20 cluster and it’s working great. Costs about $70/mo with backups. Now that we’re expanding, I have two options:
-
Vertically scale our existing cluster to, say, M50, and then add separate databases for each company. Let the single cluster handle requests from multiple companies across multiple databases.
-
Create a new cluster at the M10 or M20 level for EACH company.
This is a very specialized enterprise app. The number of companies that will adopt it is no greater than 20. I’m wondering which of the two options are best, particularly keeping in mind that this app has a very high sync workload.
If I use one large cluster, I worry that all the sync streams from all the companies will degrade performance for everyone. I know there’s still a maximum limit on sync streams and that each user consumes multiple streams.
Adopting separate clusters seems like a better fit:
- The sync load for each company is confined to a separate server.
- I can scale certain clusters to match the size of the company using that cluster.
- I can migrate each cluster’s server to new versions independently
- Separation of data is extremely important. These companies compete with each other and ANY access/leak across companies would be lawsuit-city.
- If I screw some server configuration up one day, I’ll affect just one company instead of bringing basically an entire industry to a halt.
Is there a best practice for this choice?