Наше приложение является SaaS и мультитенантным с архитектурой микросервисов. Мы действительно используем 1 базу данных для каждой службы, хотя в некоторых случаях это фактически отдельная схема для каждого клиента, а не отдельный экземпляр.
Ключевая концепция «база данных для каждой службы» связана с тем, чтобы избежать совместного использованиятаблицы / документы между службами и меньше, чтобы точно сделать, как вы реализуете этоЕсли две службы одновременно обращаются к одной и той же таблице, это становится точкой жесткой связи между службами, а также общей точкой отказа - микросервисы предназначены для двух вещей:
База данных наСлужба означает, что постоянство между несколькими службами не зависит от того, как вы реализуете, в зависимости от вас.
Многопользовательская аренда - это еще одна проблема, и есть несколько способов ее решения. В нашем случае (когда правила не предписывают нашу архитектуру) мы разработали наши таблицы-структуры, учитывающие Арендатора, с TenantId
как часть первичного ключа. Каждая служба, учитывающая интересы арендаторов, реализует это разделение, и наша служба авторизации помогает удерживать пользователей в пределах границ назначенных им арендаторов.
Если вам требуется большее разделение, чем разделение ключ / значение, я хотел бы обратиться киспользовать схемы как отличный инструмент для разделения данных и безопасности:
- Вы можете иметь экземпляр базы данных (скажем, экземпляр SQL Server) для каждого микросервиса, а в каждом экземпляре - схему для каждого арендатора.
- Это может быть излишним с самого начала, и я думаю, что было бы безопасно создать схему для комбинации услуги / арендатора, пока это число не станет проблемой.
В любом случаеВозможно, вы захотите написать какой-нибудь инструментарий в выбранной вами БД, который поможет вам управлять растущей коллекцией схем, но если у вас не будет тысячи арендаторов, это приведет вас довольно далеко в будущее.
Последнее, что нужно сделать, это то, что вы будете сильно опираться на какую-то шину интеграции, чтобыp ваши несколько независимых хранилищ данных в синхронизации. Я настоятельно рекомендую вам тратить столько же времени на разработку этого, как и на всю оставшуюся настойчивость, поскольку эти события становятся источником жизненной силы системы. Например, в нашей мультитенантной настройке создание нового арендатора затрагивает 80% других наших служб (путем передачи сообщения), так что эти службы готовы взаимодействовать с новым арендатором. Некоторые интеграционные события должны происходить быстро, другие могут занимать время, но управление всеми этими движущимися частями является сложной задачей.