Что такое микросервисы и какие преимущества они дают
Что проверяют
Аналитика спрашивают не ради определения из статьи, а чтобы понять, умеете ли вы проводить границы между сервисами и описывать требования к системе, где один пользовательский сценарий проходит через несколько владельцев. Хороший признак: кандидат сразу говорит про цену архитектуры, а не только про преимущества.
Как отвечать
Определение: приложение собрано из небольших сервисов, каждый отвечает за отдельную бизнес-возможность, владеет своими данными и выкатывается независимо от остальных. Взаимодействие только через явный контракт, чаще HTTP или очередь сообщений.
Преимущества называйте с условием, при котором они наступают. Независимое масштабирование работает, если у сервисов разный профиль нагрузки. Независимый релиз работает, если контракты обратно совместимы. Технологическая свобода работает, если в компании есть кому поддерживать зоопарк.
Аналитическая часть ответа сильнее технической. Границу проводим по бизнес-возможности и по данным: у сущности один владелец, остальные читают копию или спрашивают через API. Контракт становится частью требований: поля, ошибки, идемпотентность, версионирование. Согласованность перестаёт быть мгновенной, поэтому в требованиях появляется поведение в промежуточном состоянии и компенсирующие операции вместо распределённой транзакции.
Где спотыкаются
Пересказывают список преимуществ и ни слова про цену. Сетевые вызовы вместо вызовов в памяти, отладка по нескольким логам, общая трассировка, дежурство по десяти сервисам вместо одного: интервьюер ждёт, что вы это назовёте сами.
Режут систему по слоям или по таблицам базы и получают распределённый монолит. Признак простой: чтобы выпустить одну фичу, нужен согласованный релиз четырёх команд, а любой сценарий превращается в синхронную цепочку вызовов.
Повторяют, что отказ одного сервиса не влияет на остальные. Без таймаутов, ретраев и запасного поведения он влияет ровно наоборот: зависшие ответы съедают пулы соединений у соседей. В требованиях должно быть написано, что видит пользователь при недоступности каждого участника.