Я подумываю о переносе монолитного REST API на микросервисную архитектуру, и меня немного смущает хранение данных. На мой взгляд, некоторые из преимуществ микросервисов:
- Горизонтально масштабируемый - я могу запустить несколько избыточных копий микросервиса, чтобы справиться с нагрузкой и / или отключением сервера.
- Слабосвязанное - я могу изменять внутренние реализации микросервисов, не меняя другие, и я могу самостоятельно развертывать и изменять их и т. Д.
Моя проблема с хранением данных. На мой взгляд, есть несколько вариантов:
- Единая служба базы данных, совместно используемая всеми микросервисами, - это, казалось бы, полностью исключает любые преимущества слабой связи.
- Локально установленный экземпляр базы данных на каждом микросервисе - я не вижу способа горизонтального масштабирования этого, поэтому я не думаю, что это будет вариант.
- Каждый микросервис имеет свою собственную службу базы данных - это кажется наиболее многообещающим, так как он сохраняет преимущества слабой связи и горизонтального масштабирования (с использованием избыточных копий базы данных и / или шардинга между несколькими)
Мне кажется, что третий вариант - единственный вариант, но он кажется мне невероятно тяжелым, и это очень сложное решение. Если я правильно понимаю, то для простого приложения с 4-5 микросервисами мне потребуется запустить 16-20 серверов - два фактических экземпляра микросервиса на микросервис (в случае сбоя сервера и для развертывания без простоя), и два экземпляра службы базы данных на микросервис (в случае сбоя сервера и т. д.).
Это, откровенно говоря, кажется немного смешным. 16-20 серверов для запуска простого API, учитывая, что реалистичный проект, вероятно, будет иметь более 4-5 сервисов? Есть ли какая-то фундаментальная концепция, которая мне не хватает, которая объяснит это?
Некоторые вещи, которые могут помочь при ответе:
- Я единственный разработчик в этом проекте, и буду в обозримом будущем.
- Я использую Node.js и MongoDB, но меня могут заинтересовать независимые от языка ответы - возможно, даже ответом будет то, что я использую не те технологии!