Как обеспечивали непрерывную доставку микрофронтендов
Что проверяют
Понимаете ли вы, что главная ценность микрофронтендов в независимом релизе каждой части, и умеете ли это обеспечить на практике. Уточнение почти всегда одно из двух: как вы откатывали сломанный микрофронтенд и как синхронизировали общие зависимости вроде React.
Как отвечать
Вопрос про ваш опыт, поэтому нужен реальный проект: сколько было микрофронтендов и команд, как часто релизились, что изменилось после. Каркас ответа:
- способ интеграции: сборка через npm-пакеты убивает независимый деплой, поэтому речь о рантайме: Module Federation (webpack 5, Rspack, плагин для Vite), import maps с single-spa, Web Components, реже iframe;
- пайплайн на каждый микрофронтенд: свой репозиторий или монорепа с Nx или Turborepo, где собираются только затронутые пакеты; линтер, тесты, сборка, выгрузка статики в хранилище за CDN;
- релиз как смена указателя: файлы с хешем в имени лежат рядом со старыми, а релиз это обновление манифеста (адрес
remoteEntry.jsили JSON import map). Откат занимает секунды: возвращается прошлый адрес, код не пересобирается; - кэш: хешированные чанки отдаются с
Cache-Control: immutableи долгим сроком, точка входа и манифест с коротким; - общие зависимости: в Module Federation
sharedсsingleton: trueиrequiredVersionдля React, иначе две копии React ломают хуки; - проверка целиком: смоук на Playwright по собранному приложению после выкладки, контракты между оболочкой и микрофронтендами, канареечный релиз или фича-флаги.
Docker для чистой статики не обязателен, CDN справляется проще. Если опыта с CD микрофронтендов не было, скажите прямо и опишите, как спроектировали бы процесс по этой схеме.
Где спотыкаются
Рассказывают про раздельные репозитории, но выкатывают всё вместе единым релизом. Это распределённый монолит, и интервьюер это заметит.
Кэшируют точку входа надолго. После релиза часть пользователей получает старую версию или ломается на несовпадении чанков.
Не имеют плана отката и проверки после выкладки: микрофронтенд с другой мажорной версией общей библиотеки роняет оболочку, и узнают об этом от пользователей.