Про микросервисы у меня был отдельный большой доклад после более года участия в разработке большого проекта.
Пока его можно глянуть, а вечером пройдусь по тезисам из доклада.
Когда говорят про микросервисы подразумевают:
- Независимую разработку / легкость масштабирования команд
- Технологическую гетерогенность (технологии под сервис)
- Независимый деплой (выпустил patch релиз, шли его отдельно в прод)
- Продуктовая составляющая (можно продать клиентам микросервисы как разные части проекта)
- Изолированность (может быть решающим звеном для прохождения различных регуляторных compliance-ов)
Представьте что ваш проект состоит из 10 микросервисов, чтобы сделать релиз, вам нужно собрать целый поезд из версий который помчится на production.
Такой поезд должен быть хорошо оттестирован.
Иногда это реально круто работает, но зачастую у вас в штате команда людей с определённым стэком и давать ей писать на чем-то другом не имеет смысла.
Каждый проект имеет свою инфраструктуру, иногда инфраструктуры между проектами могут не совпадать и все равно придётся допиливать, но это в любом случаи лучше чем писать каждый раз один и тот же сервис :)
1. На уровне БД
Когда каждый сервис имеет свою БД, и вы ходите между микросервисами используя RPC, то быть транзакционными не представляется возможным.
- Нужен нормальный CI
- Без docker и k8s я вообще представить не могу микросервисы
Обо всем надо читать, все это нужно уметь, боль :(
opentracing.io/docs/overview/…
А теперь представьте, что есть целая цепочка последовательных RPC от сервиса к сервису, и вам нужно понять, где ошибка.