Chcemy zrobić tytułową podmianę na istniejącym evencie na PRODukcji, która musi ciągle działać (bez bezpiecznego okienka, kiedy możemy uznać, iż system nic nie robi). Jest to event wewnętrzny naszego komponentu, nie dotyka to innych komponentów (microserwisów), które są osobnymi repozytoriami utrzymywanymi i deployowanymi przez inne zespoły.
Proponuje kroki:
- będzie nowy topic (pewnie będzie problem z nazwą, bo najlepsza pewnie będzie ta stara, ale niestety ona jest zajęta)
- dodanie konsumpcji eventu w formacie JSON z nowego topica (zakładam ze w jednym commicie i w jednym deployu, będzie tylko zmiana schematu i żadnej dodatkowej zmiany w logice)
- dodanie (ukryte za flaga na razie wyłączone) publiszowania na nowy topic
- sprawdzenie na DEV czy działa (włączenie flagi)
- kolejne środowiska (STAGE, PROD) * najpierw deploy * a później bezpiecznie sprawdzamy, czy po włączeniu flagi się dobrze procesuje
- gdy już na PROD działa to czyścimy kod z tworzenia i konsumowania starego eventu
Zalety tego podejścia
Ważne jest, żeby jednocześnie działała (przez jakiś czas) konsumpcja obydwu topic’ów. Unikamy sytuacji, iż wstaje nowa wersja aplikacji i nagle zostały sprzed ułamka sekundy eventy stworzone w starym (AVRO) formacie, i już nigdy nie będą przetworzone.
Deploy na PROD nie jest twardo powiązany z przepięciem się na topic JSONowy. Nie musimy czekać na dobry moment (np. mały ruch), żeby zrobić deploy, tylko robimy to w dowolnym momencie (przy okazji zdeployowaly się pewne inne rzeczy, które sprawdzimy od razu). W dowolnym momencie później przepinamy się na nowy topic.
Trudniej będzie odkręcić deploy niż zmienić flagę, jeżeli się okaże, iż przeszło nam na DEV, oraz STAGE, ale są inne „cosie” (corner case) na PROD i tutaj się nie procesuje wszystko poprawnie.