#microservices
Вопрос:
Я думаю, что у микросервиса всегда должна быть своя собственная база данных, но имеет ли смысл иметь эту базу данных в отдельном экземпляре сервера, как в нескольких экземплярах SQL Server в Kubernetes? Или микросервисы должны совместно использовать экземпляр, но иметь отдельные базы данных внутри экземпляра?
Ответ №1:
В общем, совет по разделению баз данных связан с автономностью этой службы с точки зрения возможности иметь схему, которая работает для этой службы и тому подобное. Таким образом, совместное использование экземпляров СУБД (например, одного и того же экземпляра SQL Server) абсолютно нормально: оно примерно относится к той же категории, что и экземпляры нескольких служб, запущенных на одной виртуальной машине/хосте в вашем кластере Kubernetes.
Тем не менее, совместное использование экземпляров СУБД, как и любой другой формы общей инфраструктуры, подразумевает некоторую корреляцию сбоев, поэтому вы можете принять это во внимание, когда у вас есть выбор, с какими службами совместно использовать СУБД (например, если служба B будет видеть повышенную нагрузку из-за сбоя службы A, вероятно, не очень хорошая идея для них делиться большим количеством инфраструктуры).
Существует также аргумент, что, когда две службы имеют свои базы данных в одной и той же СУБД, этот факт увеличивает вероятность того, что в конечном итоге кто-то воспользуется этим фактом для получения краткосрочной выгоды, но это действительно зависит от того, насколько вы доверяете командам, обслуживающим службы.
Комментарии:
1. Спасибо тебе, Леви. Да, похоже, речь идет о соблюдении конечной характеристики «слабой связи» микросервисов. Мы предпочитаем экземпляр для каждой базы данных, но изучаем последствия лицензирования в Kubernetes.
2. «Проектируйте все так, как будто базы данных каждой службы находятся в разных экземплярах, но развертывайте их в общих, где это имеет смысл», — вот общий совет, который я бы дал.