We’re looking at migrating some of our systems to EventStore, and I’m trying to find some resources which can help with deciding how to partition and isolate the data from multiple business areas.
Are there any Best Practice guides for hosting multiple business domains within an EventStore instance?
Let’s say I have two related but loosely coupled business domains (e.g. customers and orders vs marketing’s offers and email lists). In an RDBMS I might have a single SQL server with two databases - one for customers and orders, and one for marketing activity, with the databases owned by two different development teams. If we migrate this to EventStore, our dev teams are keen to be quite granular and potentially create a stream per customer, per order, per marketing promotion, etc.
If we do this, and the two dev teams share an EventStore instance, what options do we have for isolating the streams “owned” by the customer and order team from the streams “owned” by the marketing promotion team? I get that you can assign ACLs to streams, but if we’re creating them on the fly per customer, order, promotion, etc, how does a server admin ensure the right permissions are assigned to the appropriate stream? The default ACL assumes there’s only one ACL set that needs to be assigned, so I don’t think we can use that.
Should we run a separate EventStore cluster per business domain? Or should we use naming conventions in stream names - e.g. customer100, order999, etc (in which case how do we enforce these conventions and prevent the marketing team from inadvertently creating a stream called customer200?).
Any advice would be greatly appreciated.