Nasazení nové verze = maintenance window, oznámení uživatelům, modlení. Blue-green deployment eliminuje downtime: dvě identická prostředí, přepnutí load balanceru, okamžitý rollback. Konec nočních deploymentů.
Princip¶
Dvě prostředí: Blue (aktuální produkce) a Green (nová verze). Nasadíte na Green, otestujete, přepnete router/LB na Green. Blue zůstane jako instant rollback. Problém? Přepněte zpět na Blue za sekundy.
Implementace s Nginx¶
# Přepnutí z blue na green
upstream app {
server green-server:8080;
# server blue-server:8080; # zakomentováno
}
# nginx -s reload
Databázové migrace¶
Největší výzva. Obě verze musí fungovat se stejnou databází. Pravidla: přidávejte sloupce (neodebírejte), backward-compatible změny, Flyway/Liquibase pro verzované migrace. Destruktivní změny až po úspěšném přepnutí.
S Docker a Swarm¶
Docker Swarm rolling update je de facto blue-green na úrovni kontejnerů.
docker service update --image myapp:2.0 postupně nahrazuje instance.
Zero downtime je dosažitelné¶
Blue-green deployment vyžaduje investici do infrastruktury a disciplínu u databázových migrací. Ale eliminace downtime a instant rollback stojí za to.