Migracja do mikroserwisów

EdTech / E-Learning

3x

Poprawa wydajności

60%

Zmniejszone zużycie pamięci

0

Przestoju podczas migracji

Przegląd

CloudAcademy potrzebowała migracji serwisu autoryzacji treści z Kotlin do Go jako część szerszej standaryzacji. Prowadziłem tę migrację zapewniając zero przestojów i tworząc nowe mikroserwisy według wzorców DDD.

Kontekst biznesowy

CloudAcademy to wiodąca platforma e-learningowa specjalizująca się w szkoleniach z chmury i technologii. Ich mikroserwis autoryzacji treści zbudowany w Kotlin stał się wąskim gardłem wydajności i utrzymania. Serwis obsługiwał złożoną logikę biznesową określającą dostęp użytkowników do kursów, quizów i ścieżek nauczania. Zespół standaryzował się na Go dla mikroserwisów i potrzebował doświadczonego leada do przeprowadzenia migracji bez zakłócania produkcji obsługującej tysiące jednoczesnych użytkowników.

Wyzwanie

Legacy serwis Kotlin miał wąskie gardła wydajnościowe i był trudny w utrzymaniu. Zespół potrzebował standaryzacji na Go dla lepszej spójności mikroserwisów.

  • Serwis Kotlin ze złożoną logiką biznesową i wysokim ruchem
  • Potrzeba migracji bez przestojów
  • Zespół niezaznajomiony z najlepszymi praktykami Go

Rozwiązanie

Wykonaliśmy staranną migrację używając wzorca strangler fig, stopniowo kierując ruch do nowego serwisu Go przy zachowaniu pełnej kompatybilności wstecznej.

  • Migracja mikroserwisu autoryzacji treści z Kotlin do Go
  • Tworzenie nowych mikroserwisów Go według wzorców DDD
  • Budowa narzędzia dev-ex w Pythonie do orkiestracji lokalnych kontenerów

Podejście i metodologia

Przyjęliśmy podejście strangler fig, oznaczające stopniową migrację zamiast przepisania big-bang. Najpierw stworzyłem szczegółową mapę zachowania istniejącego serwisu Kotlin - wszystkie endpointy, logikę biznesową i edge cases. Następnie zbudowaliśmy nowy serwis Go, który początkowo uruchamiał się równolegle, otrzymując duplikat ruchu. Flagi funkcji kontrolowały, który serwis faktycznie obsługuje odpowiedzi. Podejście to pozwoliło nam zwalidować zachowanie Go z produkcyjnym ruchem przed przełączeniem.

Szczegóły implementacji

Migracja Strangler Fig

Zaimplementowano stopniowe przesuwanie ruchu za pomocą flag funkcji i testów A/B w celu walidacji nowego serwisu Go przed pełnym przełączeniem. Utrzymano możliwość podwójnego zapisu podczas przejścia.

Narzędzia Developer Experience

Zbudowano narzędzie CLI w Pythonie do orkiestracji lokalnych środowisk deweloperskich, ułatwiając deweloperom uruchamianie całego stacka mikroserwisów lokalnie z Docker Compose.

Kluczowe decyzje

  • Wybraliśmy wzorzec strangler fig zamiast przepisania big-bang - wyższy początkowy koszt, ale znacznie niższe ryzyko i możliwość walidacji w produkcji
  • Utrzymaliśmy kompatybilność API 1:1 podczas migracji - umożliwiło to bezproblemowy rollback w razie problemów
  • Zbudowaliśmy szczegółowy pakiet testów porównawczych - uruchamialiśmy te same żądania przeciwko obu serwisom i porównywaliśmy odpowiedzi

Stack technologiczny

Go Python AWS Kubernetes Docker gRPC PostgreSQL

Powiązane usługi

Poniższe usługi zostały wykorzystane w tym projekcie do osiągnięcia pomyślnych rezultatów.

Wnioski z projektu

  • Testy porównawcze są bezcenne dla migracji - automatycznie wykrywały subtelne różnice w zachowaniu
  • DevEx ma znaczenie - narzędzia CLI Pythona do lokalnego developmentu znacząco poprawiły produktywność zespołu
  • Dokumentuj założenia - wiele zachowań Kotlin okazało się celowymi decyzjami biznesowymi, a nie przypadkami

Informacje o projekcie

Czas realizacji

5 miesięcy (migracja + nowe serwisy)

Zespół

2 developerów + ekspert domenowy

Rezultaty

3x

Poprawa wydajności

60%

Zmniejszone zużycie pamięci

0

Przestoju podczas migracji

Masz podobne wyzwanie?

Porozmawiajmy, jak mogę pomóc Twojemu projektowi odnieść sukces dzięki sprawdzonym rozwiązaniom architektonicznym i AI.