Blue-Green деплоймент — это стратегия выкладки приложений, при которой в инфраструктуре одновременно существуют две полностью идентичные среды: Blue (текущая рабочая версия) и Green (новая версия). В каждый момент времени пользовательский трафик направляется только на одну из них. Переключение между средами происходит атомарно, без промежуточных состояний.
В контексте JavaScript-приложений на Inferno эта стратегия особенно эффективна благодаря быстрому рендерингу, минимальному размеру бандла и предсказуемому жизненному циклу компонентов.
В классическом варианте фронтенд деплоится как статическое приложение, обслуживаемое CDN или веб-сервером. Blue-Green в таком случае реализуется на уровне:
URL / доменов
app-blue.example.comapp-green.example.comCDN версий
Reverse proxy (Nginx, HAProxy, Traefik)
Feature routing на уровне ingress (Kubernetes)
Inferno-приложение не требует специальных изменений для поддержки Blue-Green — вся логика находится вне кода, на уровне инфраструктуры.
Inferno обычно используется с кастомной сборкой (Rollup, Vite, Webpack). Для Blue-Green важно обеспечить:
/dist
/blue
index.html
app.3f92a.js
vendor.a81cd.js
/green
index.html
app.7b12c.js
vendor.4e91f.js
Каждая среда содержит полный независимый набор
файлов, включая index.html. Это исключает конфликт
кэша и позволяет мгновенно переключать трафик.
Inferno инициализируется строго в одном месте:
import { render } from 'inferno';
import App from './App';
render(<App />, document.getElementById('root'));
Blue-Green стратегия не влияет на этот код, но важно:
Это гарантирует, что новая версия (Green) не зависит от состояния Blue.
upstream inferno_app {
server app-blue.example.com;
}
server {
listen 443 ssl;
location / {
proxy_pass http://inferno_app;
}
}
Переключение выполняется изменением upstream:
upstream inferno_app {
server app-green.example.com;
}
Перезагрузка конфигурации Nginx происходит без разрыва соединений.
Blue-Green деплоймент для фронтенда невозможен без строгого контроля кэширования.
Ключевые принципы:
app.[hash].js)Cache-Control: immutable для JS/CSSno-cache или короткий TTL для
index.htmlInferno-приложение, как SPA, критично зависит от корректного
обновления index.html, так как именно он определяет, какую
версию бандлов загрузит браузер.
При Blue-Green деплойменте фронтенд и backend могут временно работать в разных версиях. Для Inferno-приложения это означает:
Практика:
Blue-Green часто комбинируется с feature flags, позволяя:
Пример простого флага:
const ENABLE_NEW_DASHBOARD = window.__FLAGS__.newDashboard;
Флаги загружаются из:
index.html.Это позволяет развернуть код, но активировать функциональность позже.
Главное преимущество Blue-Green — мгновенный откат.
При проблеме:
Время отката измеряется секундами и не зависит от размера проекта.
Для корректной эксплуатации необходимо разделять метрики:
Пример добавления версии:
console.info('App version:', __APP_VERSION__);
__APP_VERSION__ подставляется на этапе сборки через
define-плагин.
Типовой pipeline:
Inferno хорошо подходит для такого подхода из-за:
Особое внимание требуется при изменении:
Inferno, за счёт своей производительности и минимализма, хорошо вписывается в Blue-Green стратегию, не усложняя ни кодовую базу, ни процесс выкладки.