Jedną z metod ciągłego wdrażania jest oddzielenie wdrożenia od wydania, tj. Wdrożenie aktualizacji bez natychmiastowej aktywacji zmian.
Wiem, że można do tego używać przełączania funkcji , ale zastanawiam się, czy istnieją inne techniki dla „braku funkcji”.
Na przykład, czy zbudowałbyś przełącznik funkcji dla poprawki błędu? Prawdopodobnie nie i można argumentować, że poprawki powinny zostać wdrożone jak najszybciej, ponieważ może być tylko lepiej. A po wydaniu poprawki na pewno nie chcę już jej wyłączać. Ale czy tak jest w tym przypadku? Może to być ryzykowna zmiana, którą chcesz uwolnić w kontrolowany sposób. A jeśli nie są niespodziewane skutki uboczne, to dobrze, aby móc rozwinąć go z powrotem. Więc flagi funkcji dla każdej zmiany?
A co ze zmianami wizualnymi? Na przykład, czy możesz zaimplementować coś w stylu flagi funkcji w CSS? Czy to w ogóle ma sens?
źródło
Odpowiedzi:
W przypadku oprogramowania w kategorii aplikacji internetowych, w zależności od dostawcy infra / hosta, takie oddzielenie może być możliwe do przełączania ruchu przychodzącego (lub dzielenia go) na różne wdrożone wersje SW, praktycznie obejmując dowolne ze wspomnianych zmian: poprawki błędów, efekty wizualne itp.
Takie wsparcie zazwyczaj nie wymaga przełączania funkcji. I może mieć zastosowanie niezależnie od tego, czy aplikacja jest monolityczna lub podzielona na mikrousługi.
Na przykład oferta Google App Engine Paas obsługuje podział ruchu i migrację.
Od podziału ruchu :
Z migracji ruchu :
źródło
Podczas gdy w przypadku monolitów możesz być ograniczony do przełączników, w architekturach mikrousług można podzielić każdą pulę wdrożeniową węzłów zapewniających usługę (np. Pods). Następnie aktywujesz wdrażanie nowo zmienionego produktu w podzbiorze puli i dokładnie go monitorujesz; możesz nawet wybrać, jaka ilość puli ma zostać wdrożona, aby np. aktywować zmianę dla 15% ruchu. W literaturze można znaleźć funkcję o nazwie „aktualizacja ciągła”.
źródło