Rozwijamy bot za pomocą BotKit, a teraz próbujemy rozwiązać problem z minimalnym przestojem wdrożenia.Wdrożenie luki bota Slack
Na tym serwerze działa serwer i kontener dokowania. Wewnątrz kontenera uruchom instancję bot-app połączoną z serwerem RTM (Slack). Kiedy zaczynam wdrażać nową wersję (v2) bot-app, chcę uzyskać zero przestojów, użytkownicy nie powinni widzieć "bot jest w trybie offline".
Deploy skrypt uruchamia drugi pojemnik Döcker z nową wersją bot aplikacji. A bot-app łączy się również z serwerem RTM. W ten sposób jest kilka sekund, kiedy obie aplikacje działają, są podłączone do serwera RTM i odpowiadają na polecenia użytkownika (a użytkownik zobaczy dwie odpowiedzi na swoje polecenie).
Jaką optymalną decyzję mogę uzyskać, jeśli z jednej strony chcemy uzyskać zero przestojów, az drugiej strony chcemy zapobiec interakcji użytkownika z dwoma przypadkami w tym samym czasie?
Decyzja 1: Aby umożliwić małe prawdopodobieństwo prawdopodobieństwa kolizji, gdy obie instancje odpowiedzą na polecenie użytkownika.
Decyzja 2: Porzucić wdrożenie zerowego czasu przestoju. W takim przypadku wdróż skrypt najpierw zatrzyma pierwszy kontener dokera, a następnie uruchom inny. Aplikacja nie będzie reagować na polecenia użytkownika wysyłane między zatrzymaniem bieżącej wersji aplikacji a uruchomieniem nowej wersji aplikacji.
Decyzja 3: Z interakcją prądu biegu równoległego i nowej wersji aplikacji lub muteksów. Ogólny schemat: 1) Aktualna wersja aplikacji działa 2) Wdróż skrypt uruchamia nową wersję aplikacji 3) Czas, kiedy nowa wersja aplikacji prawie działa i jest gotowy do połączenia z serwerem RTM, wysyła do bieżącej wersji aplikacji polecenie, aby zamknąć połączenie RTM. 4) Aktualna wersja aplikacji zamyka połączenie RTM 5) Nowa wersja aplikacji otwarte połączenie RTM
Myślę, że istnieją inne dobre rozwiązania.
Jak rozwiązałbyś ten problem w swojej aplikacji?
Dzięki smarx! Jest bardzo dobre rozwiązanie! W przeciwieństwie do pierwszego wariantu wydaje się mniej skomplikowany i bardziej niezawodny. – vovan