Uwolnij się od monolitu commerce dzięki architekturze mikroserwisowej

Gdy platforma nie nadąża za skokami ruchu, niezależnymi wdrożeniami zespołów ani integracjami z nowymi dostawcami, wąskim gardłem jest architektura. Pomagamy liderom inżynierskim przeprojektować platformy commerce tak, żeby każda domena skalowała się i wdrażała na własnych zasadach.

Zaufali nam

Umów rozmowę

Netguru w liczbach

18+

lat na rynku

Ponad 18 lat projektowania i dostarczania złożonych platform technologicznych w wielu branżach, w tym systemów commerce o wysokim ruchu.

2 500+

zrealizowanych projektów

Od pierwszych wersji produktu po kompleksowe zmiany architektury platform, nasi inżynierowie mierzyli się z pełnym spektrum wyzwań commerce.

400+

specjalistów własnych

Architekci, inżynierowie backend, DevOps i QA pracują razem pod jednym dachem, bez outsourcingu do podwykonawców.

4,9/5

średnia ocena klientów

Ocena 4,9 na 5 wystawiana przez klientów z ponad 50 krajów, odzwierciedla powtarzalną jakość wdrożeń i rygory inżynierskie.

Czym jest architektura mikroserwisowa w e-commerce?

Architektura mikroserwisowa w e-commerce organizuje platformę commerce jako zbiór niezależnie wdrażanych serwisów, każdy odpowiada za jedną domenę biznesową: katalog, koszyk, checkout, magazyn i tak dalej. Każdy serwis ma własną bazę kodu, własne dane i własny cykl wydań, a z pozostałymi komunikuje się przez dobrze zdefiniowane API lub zdarzenia.

Różnica w stosunku do monolitu tkwi w odpowiedzialności: jeden zespół kontroluje jeden serwis, wdraża go bez konieczności koordynacji z każdym innym zespołem i skaluje go niezależnie. Podczas wyprzedaży flash tylko serwisy koszyka i checkout potrzebują dodatkowych zasobów, nie cała aplikacja.

W commerce ma to szczególne znaczenie, bo ruch jest nierównomierny, integracje z dostawcami zmieniają się często, a zespoły produktowe muszą uruchamiać logikę cennikową czy promocyjną bez czekania na pełny cykl wydania platformy.

Teoretyczne podstawy mikroserwisów, service mesh, wzorce API gateway i orkiestracja kontenerów, znajdziesz w naszym .

Kanoniczne granice serwisów commerce, które stosujemy

Te wyraźnie wyodrębnione konteksty odzwierciedlają to, jak domeny commerce faktycznie zmieniają się w różnym tempie i pod różną odpowiedzialnością. Wytyczenie granic tutaj zmniejsza zależności między zespołami i sprawia, że każdy serwis można testować niezależnie.

Serwis katalogu

Zarządza danymi produktów, atrybutami, mediami i indeksowaniem na potrzeby wyszukiwarki produktów e-commerce. Zmienia się często, gdy zespoły merchandisingowe aktualizują ofertę, izolacja zapobiega blokowaniu checkoutu przez wydania katalogu.

Koszyk i sesja

Zarządza stanem koszyka, ilościami pozycji i zastosowanymi kuponami. Musi obsługiwać wysoką współbieżność odczytów i zapisów w szczytowych okresach, bez powiązania z logiką cenową czy stanami magazynowymi.

Ceny i promocje

Wylicza ceny finalne, reguły rabatów i kwalifikację do promocji. Wyodrębnienie tej domeny pozwala zespołom komercyjnym wdrażać zmiany cenowe bez ingerowania w kod checkoutu ani katalogu.

Magazyn i realizacja zamówień

Śledzi stany magazynowe, alokację w magazynach i rezerwacje. Oddzielenie magazynu oznacza, że zmiana integracji z magazynem nie wymaga pełnego wdrożenia platformy.

Zarządzanie zamówieniami

Odpowiada za cykl życia zamówienia, od złożenia przez realizację po zwroty. Pełni funkcję punktu orkiestracji dla serwisów downstream po potwierdzeniu płatności.

Użytkownik, autoryzacja i powiadomienia

Obsługuje tożsamość, tokeny uwierzytelniania i zdarzenia komunikacyjne, takie jak potwierdzenia zamówień i powiadomienia o wysyłce. Wspólna infrastruktura pozostaje w gestii zespołu platformowego.

Jak pomogliśmy Ledbury połączyć sprzedaż stacjonarną i online bez tarcia

Ledbury to premium'owy retailer odzieży męskiej z ugruntowaną obecnością w e-commerce i rosnącą siecią sklepów stacjonarnych. Firma stanęła przed pilnym wyzwaniem: połączeniem swojej platformy Spree Commerce z systemem POS obsługującym sprzedaż offline, i to w bardzo napiętym harmonogramie. Celem było umożliwienie klientom wykonania pomiaru w sklepie i sfinalizowania zamówienia online bez żadnych przeszkód.

Netguru dostarczyło doświadczonych programistów Ruby on Rails i Spree Commerce, którzy zbudowali nowe funkcjonalności łączące system POS bezpośrednio z istniejącą platformą e-commerce. Dzięki integracji możliwe stało się płynne zamawianie online po konsultacji w sklepie, co otworzyło dla Ledbury nowe kanały sprzedaży. Po uruchomieniu platformy firma spodziewała się sprzedać ponad 100 000 koszul w 2016 roku, ogłosiła plany otwarcia nowych sklepów w Richmond i Waszyngtonie D.C. oraz przejęła historyczny zakład krawiecki, wszystko to świadczy o skali wzrostu, jaki umożliwiło nowe rozwiązanie.

You guys have been excellent to work with; we really appreciate how well the projects are managed and run.

Paul Watson

Ledbury Co-founder

Przeczytaj opis projektu
Ledbury case study

Jak migrujemy monolit commerce: nasza rekomendowana kolejność

Stosujemy wzorzec strangler fig, stopniowo przekierowujemy ruch do nowych serwisów, podczas gdy monolit się kurczy, zamiast ryzykownego przepisywania wszystkiego naraz. Poniższa kolejność odzwierciedla miejsca, gdzie ryzyko i wartość są zazwyczaj najwyższe. Kontekst MACH i composable commerce znajdziesz na naszej .

  1. Mapowanie granic monolitu

    Analizujemy istniejącą bazę kodu, żeby zidentyfikować skupiska domenowe, współdzielone tabele bazy danych i punkty wysokiego sprzężenia. Efektem jest mapa zależności, która wyznacza priorytety ekstrakcji.

  2. Wybór pierwszej ekstrakcji

    Rekomendujemy zaczęcie od ekstrakcji serwisu powiadomień lub użytkownika/autoryzacji, mają wyraźne granice, niskie sprzężenie danych, a awaria żadnego z nich nie blokuje zakupu. Wczesne sukcesy budują pewność zespołu i weryfikują pipeline wdrożeniowy.

  3. Zastosowanie wzorca strangler fig

    API gateway lub proxy kieruje rosnącą część ruchu do nowego serwisu, podczas gdy monolit obsługuje resztę. Ścieżka w monolicie jest wycofywana dopiero po potwierdzeniu działania nowego serwisu w środowisku produkcyjnym.

  4. Ekstrakcja domen o wysokiej wartości

    Jako kolejne ekstrahujemy katalog i ceny, zmieniają się najczęściej i w największym stopniu korzystają z niezależnego wdrażania. Magazyn i zarządzanie zamówieniami wyodrębniamy później, bo wiążą się z najwyższym ryzykiem transakcyjnym i wymagają starannego projektu Sagi.

  5. Konteneryzacja i wdrożenie na Kubernetes

    Każdy wyodrębniony serwis jest konteneryzowany i wdrażany z własnym pipeline CI/CD. Horyzontalne skalowanie podów dla koszyka i checkoutu konfigurujemy od pierwszego dnia, żeby obsługiwać zmienność ruchu.

  6. Instrumentacja, wgląd w działanie systemu i iteracje

    Dla każdego serwisu ustawiamy śledzenie rozproszone, ustrukturyzowane logowanie i cele poziomu usług (SLO). Te dane pozwalają nam wybrać kolejnego kandydata do ekstrakcji i wcześnie wykryć regresje w latencji.

Decyzje architektoniczne, które decydują o niezawodności produkcyjnej

Wybór wzorca komunikacji

REST po HTTP to dobry domyślny wybór dla synchronicznych interakcji żądanie-odpowiedź, na przykład gdy serwis checkout odpytuje serwis cenowy o finalną sumę koszyka. Jest prosty w debugowaniu i powszechnie obsługiwany, ale tworzy sprzężenie czasowe: jeśli serwis cenowy jest wolny, checkout czeka.

gRPC zmniejsza tę latencję w wewnętrznych wywołaniach między serwisami, gdy kontrolujesz oba końce. Jego binarny protokół i ściśle typowane kontrakty sprawiają, że dobrze sprawdza się przy wysokiej częstotliwości wywołań między magazynem a zarządzaniem zamówieniami.

Dla przepływów, w których serwisy nie powinny się blokować nawzajem, właściwym wyborem jest asynchroniczne przesyłanie zdarzeń przez Apache Kafka. Gdy klient składa zamówienie, serwis zamówień publikuje zdarzenie OrderPlaced. Serwis magazynowy je konsumuje i publikuje StockReserved. Serwis powiadomień konsumuje to zdarzenie i wysyła e-mail z potwierdzeniem. Żaden serwis nie czeka na drugi, każdy reaguje na fakty.

Transakcje rozproszone i wzorzec Saga

Każdy mikroserwis ma własną bazę danych, dlatego tradycyjna transakcja ACID obejmująca tworzenie zamówienia, pobranie płatności i rezerwację magazynową nie jest możliwa. Wzorzec Saga rozwiązuje ten problem, dzieląc transakcję na sekwencję lokalnych transakcji, każda publikuje zdarzenie lub komunikat uruchamiający następny krok.

W podejściu choreograficznym serwisy reagują na swoje zdarzenia bez centralnego koordynatora, prostsze w budowie, ale trudniejsze do śledzenia, gdy coś się nie powiedzie. W podejściu orkiestracyjnym dedykowany orkiestrator Sagi (często część serwisu zarządzania zamówieniami) wysyła polecenia do każdego uczestnika i obsługuje transakcje kompensacyjne w razie błędu kroku. Dla przepływu zamówienie–płatność–magazyn orkiestracja jest zazwyczaj bezpieczniejsza, bo logika biznesowa obsługi nieudanego pobrania płatności jest jawna i audytowalna w jednym miejscu.

Autoskalowanie Kubernetes przy szczytowym ruchu

Serwisy koszyka i checkout to dwie domeny najbardziej wrażliwe na ruch w każdej platformie commerce. Na Kubernetes horyzontalne skalowanie podów obserwuje metryki CPU i pamięci, lub metryki niestandardowe, takie jak głębokość kolejki, i automatycznie dodaje pody wraz ze wzrostem obciążenia. Podczas wyprzedaży flash serwis koszyka może w ciągu sekund przeskalować się wielokrotnie powyżej bazowej liczby replik, podczas gdy katalog i zarządzanie zamówieniami pozostają przy standardowej alokacji. Service mesh, taki jak Istio lub Linkerd, dodaje wzajemne TLS między serwisami, circuit breaking zapobiegający kaskadowemu wpływowi wolnego serwisu magazynowego na checkout oraz szczegółowy wgląd w działanie systemu, bez modyfikowania kodu aplikacji.

Co mówią nasi klienci

Praca Netguru przełożyła się na wyższą średnią wartość zamówienia, większy rozmiar koszyka i więcej aktywnych użytkowników miesięcznie. Są proaktywni, zaangażowani i mają ogromne doświadczenie.

Ayman Kaheel

CTO, Breadfast

Nie pozostawiają kamienia na kamieniu, żeby zrozumieć kontekst biznesowy. Dzięki ich unikalnemu podejściu zmniejszyliśmy obciążenie naszego zespołu operacyjnego, jednocześnie poprawiając doświadczenie użytkownika.

Tiago Goncalves Cabaço

VP of Design, Careem

Nowa aplikacja oparta na Flutter, stworzona przez Netguru, dała nam elastyczność, wydajność i zaangażowanie użytkowników, których szukaliśmy. Nie tylko wpasowała się w design naszej platformy, ale też znacząco zwiększyła retencję użytkowników i sprzedaż.

Joseph Raphael

CTO, METRO BRAZIL

Często zadawane pytania o mikroserwisy w e-commerce

Czy moja platforma e-commerce naprawdę potrzebuje mikroserwisów, czy monolit nadal wystarczy?

Monolit jest często właściwym wyborem na wczesnym etapie skali. Jest prostszy do wdrożenia, debugowania i rozumowania, gdy jeden zespół odpowiada za całą bazę kodu. Mikroserwisy mają sens, gdy pojawiają się konkretne problemy: wdrożenia wymagają koordynacji całego zespołu, skoki ruchu w jednej domenie wpływają na całą platformę albo różne zespoły muszą wdrażać niezależnie, nie wchodząc sobie w drogę.

Jeśli żaden z tych problemów nie jest jeszcze realny, operacyjny narzut architektury rozproszonej, latencja sieciowa, śledzenie rozproszone, złożoność Sagi, to koszt bez korzyści. Pomagamy zespołom rzetelnie ocenić tę sytuację, zanim zarekomendujemy migrację.

Jaka dojrzałość zespołu jest potrzebna przed migracją do mikroserwisów?

Mikroserwisy przenoszą złożoność z bazy kodu do operacji. Twój zespół musi czuć się pewnie w konteneryzacji, pipeline'ach CI/CD, narzędziach do wglądu w działanie systemu i praktykach dyżurowych, zanim weźmie się za architekturę rozproszoną. Zespoły, które mają trudności z niezawodnym wdrażaniem monolitu, będą miały ich jeszcze więcej z dziesięcioma serwisami.

Zazwyczaj rekomendujemy zaczęcie od inwestycji w platform engineering, standaryzację pipeline'ów wdrożeniowych i wglądu w system, zanim wyodrębni się pierwszy serwis. Dzięki temu infrastruktura jest gotowa, gdy pierwszy mikroserwis trafia na produkcję.

Jak architektura mikroserwisowa ma się do MACH i composable commerce?

MACH (Microservices, API-first, Cloud-native, Headless) to filozofia dostawców i architektury, którą umożliwiają mikroserwisy. Composable commerce idzie o krok dalej, polega na zestawieniu wyspecjalizowanych dostawców SaaS: dedykowanej wyszukiwarki produktów e-commerce, silnika promocji, headless CMS, gdzie każdy wypełnia jeden wyodrębniony kontekst.

Architektura mikroserwisowa to fundament techniczny; MACH i composable commerce to strategia zakupowa i produktowa zbudowana na tym fundamencie. Na naszej wyjaśniamy, jak wybór dostawców przekłada się na granice serwisów.

Jak zarządzacie własnością danych, gdy każdy serwis ma własną bazę danych?

Każdy serwis jest właścicielem swojego schematu i jedynym źródłem prawdy dla swojej domeny. Inne serwisy odpytują go przez API lub konsumują jego zdarzenia, nigdy nie odczytują jego bazy danych bezpośrednio. Tworzy to spójność ostateczną (eventual consistency): serwis zamówień może przechowywać w pamięci podręcznej nazwę produktu, która chwilowo może różnić się od bieżącej wartości w serwisie katalogu.

W większości przepływów commerce spójność ostateczna jest akceptowalna. W przypadku transakcji finansowych, pobrania płatności, rezerwacji magazynowej, stosujemy wzorzec Saga z transakcjami kompensacyjnymi, żeby zagwarantować, że nieudany krok wycofa się czysto we wszystkich serwisach.

Jak długo zazwyczaj trwa migracja monolitu commerce?

To zależy od rozmiaru monolitu, jakości istniejącego pokrycia testami i liczby zaangażowanych zespołów. Pierwsza ekstrakcja serwisu, zazwyczaj powiadomień lub użytkownika/autoryzacji, może trafić na produkcję w kilka tygodni. Wyodrębnienie domeny wysokiego ryzyka, takiej jak zarządzanie zamówieniami czy checkout, zajmuje dłużej ze względu na projekt Sagi, migrację danych i planowanie przełączenia ruchu.

Pełne migracje mierzy się w kwartałach, nie w tygodniach. Planujemy kolejność tak, żeby na każdym kroku dostarczać wartość produkcyjną, biznes nie musi czekać na kompletne przepisanie, żeby zobaczyć efekty.

Jakie są główne kompromisy między monolitem a mikroserwisami w e-commerce?

Poniższe zestawienie podsumowuje kluczowe kompromisy, z którymi mierzą się zespoły inżynierskie:

  • Złożoność wdrożenia: Monolit, jeden pipeline, jeden artefakt. Mikroserwisy, jeden pipeline na serwis, wymaga orkiestracji kontenerów i service discovery.
  • Izolacja błędów: Monolit, jeden bug może wyłączyć całą platformę. Mikroserwisy, awaria serwisu promocji nie blokuje checkoutu, jeśli circuit breakery są skonfigurowane.
  • Skalowanie zespołu: Monolit, narzut koordynacji rośnie wraz z wielkością zespołu. Mikroserwisy, zespoły zarządzają serwisami niezależnie, co zmniejsza konflikty przy scalaniu i zależności wydań.
  • Narzut wydajnościowy: Monolit, wywołania w procesie są szybkie. Mikroserwisy, skoki sieciowe dodają latencję; gRPC i komunikacja asynchroniczna to ograniczają.
  • Czas wejścia na rynek: Monolit, szybszy na początku. Mikroserwisy, szybszy per zespół po ustabilizowaniu platformy, bo zespoły wdrażają bez czekania na innych.

Gotowy zaplanować migrację platformy commerce?

Nasi architekci współpracują z liderami inżynierskimi, żeby ocenić Twoją obecną platformę, wyznaczyć granice serwisów i określić kolejność migracji, która na każdym etapie minimalizuje ryzyko. Żadnych ogólnych frameworków, plan zbudowany wokół Twojego zespołu, Twoich wzorców ruchu i Twoich ograniczeń biznesowych.

Umów rozmowę