Disclaimer: I am the founder of the Elasticsearch service provider Facetflow, which currently offers shared clusters.
I think that both approaches have merit, but maybe suited for different types of customers. Looking at other SaaS providers, like MongoDB provider MongoLab, they essentially ended up offering both setups (although not using Docker).
So, pros and cons as I see them:
Shared Cluster
Most Elasticsearch as a Service providers operate this way.
Pros:
- Far more affordable for the majority of users just looking for good search and analytics.
- Simpler maintenance, less clusters for you to monitor
- Potentially less versions of Elasticsearch to integrate with. If you need to communicate with other systems (which you do), write your own plugins (we did, for authentication, silos, entitlements, stats etc.) less versions will be far easier to maintain.
Cons:
- Noisy neighbours have to be monitored and you have to scale and relocate indices to handle this.
- Users have to choose from a limited list of versions of Elasticsearch, usually a single version.
- Users don't get full cluster admin control.
Private Clusters using Docker
One provider that works this way is Found.
Pros:
- Users could potentially be able to deploy a variety of versions of Elasticsearch
- Users can have complete cluster admin access
- Noisy neighbours don't affect their cluster, less manual intervention from you
Cons:
- Complex monitoring and support. If people can do whatever they want (shut down the cluster over the api), you have to be clear where your responsibility as a provider ends, and what wakes you up at night.
- Complex integration with multiple versions, see shared cluster pros.
- More expensive since you have to allocate resources that might not always be used.