Rozwój systemów rozproszonych z AI
Zmieniasz jedno pole w API serwisu Order, a trzy inne serwisy zaczynają zwracać błędy 500 na środowisku staging. Ślad jest niekompletny, bo dwa serwisy nigdy nie przekazały kontekstu śladu, saga przetwarzająca płatności po cichu pominęła krok kompensacji, a twój dashboard dyżurny świeci na zielono, podczas gdy klienci nie mogą sfinalizować zakupu. Systemy rozproszone psują się w lukach między serwisami — i to dokładnie tam asystenci AI są najbardziej przydatni i najbardziej niebezpieczni: szybko generują wiarygodny szkielet wielu serwisów, ale wklejenie „wygeneruj cały system produkcyjny” daje ci kod, którego nie jesteś w stanie zweryfikować.
Ten przewodnik pokazuje, jak używać Cursora, Claude Code i Codeksa do tych części, w których AI jest naprawdę dobre — szkicowania zrębów serwisów, przekazywania kontekstu śladu, pisania nudnej logiki kompensacji — przy jednoczesnym utrzymaniu pętli weryfikacji na tyle ciasnej, że bez wahania wdrożysz wynik.
Co z tego wyniesiesz
Dział zatytułowany „Co z tego wyniesiesz”- Przepływ koordynowania pojedynczej funkcji w wielu repozytoriach serwisów w każdym z trzech narzędzi
- Gotowe prompty do projektowania granic serwisów, napisania kroku sagi wraz z jego kompensacją i testem, który najpierw nie przechodzi, oraz instrumentowania OpenTelemetry przyrostowo
- Realne, zweryfikowane serwery MCP do monitorowania (Sentry, Grafana, Dynatrace) i infrastruktury (Docker, Kubernetes, AWS) — wraz z dokładnymi poleceniami instalacji
- Sekcja „Gdy to się psuje” obejmująca tryby awarii, które naprawdę dają się we znaki: zerwany kontekst śladu, brakująca kompensacja w sadze i błędy uwierzytelniania MCP
Serwery MCP, które naprawdę istnieją
Dział zatytułowany „Serwery MCP, które naprawdę istnieją”Połowa wartości AI w systemach rozproszonych polega na tym, że pozwalasz mu odpytywać żywą infrastrukturę, zamiast zgadywać. Ale ekosystem jest pełen łudząco podobnych paczek npm — sentry-mcp to mało popularna zaślepka, a nie serwer Sentry. Korzystaj z tych zweryfikowanych serwerów. Konfiguracja MCP jest identyczna w Cursorze, Claude Code i Codeksie: wszystkie trzy czytają te same definicje serwerów (.mcp.json dla Claude Code, .cursor/mcp.json dla Cursora, ~/.codex/config.toml dla Codeksa), więc poniższe polecenia działają niezależnie od tego, którego narzędzia używasz.
Monitorowanie i obserwowalność
Dział zatytułowany „Monitorowanie i obserwowalność”-
Sentry (błędy, ślady, wydania) — użyj oficjalnego, hostowanego serwera z OAuth, bez tokena do zarządzania:
Okno terminala claude mcp add --transport http sentry https://mcp.sentry.dev/mcpDla samodzielnie hostowanego Sentry oficjalną paczką npm jest
@sentry/mcp-server:Okno terminala claude mcp add sentry -- npx -y @sentry/mcp-server@latest --access-token=YOUR_TOKEN -
Grafana (dashboardy, zapytania Loki/Prometheus, incydenty) — oficjalny serwer to
grafana/mcp-grafana, binarka Go dystrybuowana przez Dockera (nie ma paczki npmmcp-grafana):Okno terminala claude mcp add grafana -- docker run --rm -i \-e GRAFANA_URL=http://localhost:3000 \-e GRAFANA_SERVICE_ACCOUNT_TOKEN=YOUR_TOKEN \grafana/mcp-grafana -t stdio -
Dynatrace (APM, wykrywanie anomalii przez AI) — oficjalna paczka jest publikowana przez organizację Dynatrace OSS i wymaga Node 22.10+:
Okno terminala DT_ENVIRONMENT=https://YOUR.apps.dynatrace.com \claude mcp add dynatrace -- npx -y @dynatrace-oss/dynatrace-mcp-server@latest
Kontenery i infrastruktura
Dział zatytułowany „Kontenery i infrastruktura”-
Docker — oficjalny MCP jest dostarczany z MCP Toolkit w Docker Desktop; uruchamiasz bramę zamiast paczki npm:
Okno terminala claude mcp add docker -- docker mcp gateway runW Cursorze dodaj serwer typu polecenie w Settings → MCP, wskazując na to samo
docker mcp gateway run. -
Kubernetes —
kubernetes-mcp-serverto prawdziwa paczka; używa twojego bieżącego kontekstu kubeconfig:Okno terminala claude mcp add k8s -- npx -y kubernetes-mcp-server@latest -
AWS — AWS Labs publikuje serwery o konkretnym przeznaczeniu (nie jeden monolityczny obraz). Wybierz ten, którego potrzebujesz, i polegaj na standardowym łańcuchu poświadczeń AWS, zamiast wpisywać klucze na sztywno:
Okno terminala claude mcp add aws-api -- uvx awslabs.aws-api-mcp-server@latestPrzejrzyj pełny katalog na awslabs.github.io/mcp. Dla Google Cloud wdróż własny serwer MCP na Cloud Run — zobacz cloud.google.com/run/docs.
Projektowanie granic serwisów
Dział zatytułowany „Projektowanie granic serwisów”AI szybko szkicuje propozycje ograniczonych kontekstów, ale granice to decyzja biznesowa — traktuj wynik jako pierwszą wersję do dyskusji, a nie wyrok. Zacznij wąsko: poproś o granice wraz z uzasadnieniem, abyś mógł wychwycić, gdzie model pomylił warstwę techniczną z domeną.
Gdy uzgodnisz już granice, projektuj po jednym serwisie naraz. Oprzyj się pokusie „wygeneruj wszystkie serwisy” — nie da się zrecenzować zrzutu siedmiu serwisów, a to właśnie w kontraktach między nimi kryją się błędy.
Wzorce saga, które naprawdę da się zweryfikować
Dział zatytułowany „Wzorce saga, które naprawdę da się zweryfikować”Wzorzec saga to miejsce, gdzie wygenerowany przez AI kod rozproszony najczęściej wygląda dobrze, a jest błędny. Tryb awarii jest zawsze taki sam: ścieżka szczęśliwa działa, ale krok kompensacji nie jest idempotentny albo brakuje budżetu czasowego (timeout). Lekarstwem jest budowanie po jednym kroku naraz, każdego wraz z jego kompensacją i najpierw testem, który nie przechodzi, a potem obserwowanie, jak zmienia się na zielony.
Otwórz repozytorium serwisu Order i przełącz się w tryb Agent. Poproś o jeden krok sagi wraz z testem, który nie przechodzi, uruchom test w terminalu Cursora i zaakceptuj diff dopiero, gdy zmieni się na zielony. Użyj punktu kontrolnego (checkpoint) przed każdym krokiem, abyś mógł cofnąć złą kompensację bez utraty poprzednich kroków. Widok inline diff w Cursorze ułatwia wychwycenie, gdy model „naprawił” test, osłabiając asercję zamiast kodu.
Steruj nim z terminala, aby uruchomienie testu było częścią pętli. Claude Code potrafi uruchomić test, odczytać błąd i iterować bez kopiowania i wklejania danych wyjściowych przez ciebie:
claude "Implement step 3 of the order saga (process payment) plus itscompensation (refund). Write a failing test that asserts the refund fireswhen step 4 throws, then make it pass. Run the test with `npm test -- saga`and show me the diff before committing."Dodaj hook w .claude/settings.json, który uruchamia zestaw testów sagi przy każdej edycji w saga/, aby regresja we wcześniejszym kroku natychmiast wychodziła na jaw.
Użyj worktree Codeksa, aby praca nad sagą była odizolowana we własnym lokalnym checkoucie, a następnie pozwól Codeksowi uruchamiać zestaw testów po każdym kroku. Ponieważ Codex obejmuje CLI, IDE i Cloud, możesz wystartować krok z CLI i zrecenzować powstały diff w IDE:
codex --ask-for-approval on-request "Implement the payment step of the ordersaga with an idempotent compensation. Add a test that injects a failure atthe inventory step and asserts payment is refunded exactly once on retry.Run the suite and stop for my review before applying."Powiąż każdy krok z obserwowalnym sprawdzeniem: gdy model twierdzi, że krok działa, uruchom ten jeden test, który dowodzi, że kompensacja się odpala. Jeśli nie potrafisz wyrazić testu, nie możesz ufać kodowi.
Komunikacja między serwisami i kontekst śladu
Dział zatytułowany „Komunikacja między serwisami i kontekst śladu”Konfiguracje service mesh i bramy są dla AI bardzo opłacalne — ale znów, przyrostowo. Zacznij od najmniejszej konfiguracji, którą da się zweryfikować jednym poleceniem (curl, istioctl analyze), a potem nakładaj wagi canary i wyłączniki obwodu.
W przepływach sterowanych zdarzeniami nawracający błąd produkcyjny to zerwany ślad: serwis konsumuje wiadomość Kafki, ale nigdy nie wyodrębnia i ponownie nie wstrzykuje kontekstu śladu, więc ślad urywa się w ślepym zaułku. Gdy prosisz AI o podłączenie konsumentów, uczyń propagację kontekstu jawnym, przetestowanym wymaganiem — a nie kwestią dodaną na końcu.
Obserwowalność: instrumentuj przyrostowo
Dział zatytułowany „Obserwowalność: instrumentuj przyrostowo”Nowoczesna obserwowalność wykroczyła poza dashboardy ku wykrywaniu anomalii sterowanemu AI i analizie podstawowych przyczyn świadomej topologii — ale wciąż zdobywasz ją po jednym serwisie naraz. Podejście „zinstrumentuj 8 serwisów i 3 bazy danych w jednym promcie” daje konfigurację, której nie da się zwalidować. Zinstrumentuj jeden serwis od początku do końca, potwierdź, że span pojawia się w Jaegerze, a potem zrób z tego szablon.
Z podłączonymi serwerami MCP Grafany i Sentry możesz domknąć pętlę bez opuszczania edytora: poproś AI, by wyciągnęło faktyczny wskaźnik błędów albo najwolniejszy ślad dla serwisu i przeanalizowało go, zamiast robić zrzut ekranu dashboardu.
Koordynowanie zmian w wielu repozytoriach
Dział zatytułowany „Koordynowanie zmian w wielu repozytoriach”Funkcja taka jak „punkty lojalnościowe” dotyka serwisów Customer, Order, Payment i Notification. To problem koordynacji — a nie kod poszczególnych serwisów — czyni to trudnym, a trzy narzędzia podchodzą do tego naprawdę odmiennie.
Otwórz wszystkie cztery repozytoria serwisów w jednym wieloźródłowym workspace, aby agent widział każdy kontrakt naraz. Zaprojektuj najpierw kontrakty OpenAPI/zdarzeń, a potem użyj agenta w tle do zaimplementowania każdego serwisu w kolejności zależności, recenzując diffy per repozytorium. Punkty kontrolne na poziomie pliku w Cursorze pozwalają cofnąć zmiany jednego serwisu bez rozplątywania pozostałych. Najlepsze, gdy chcesz wizualnie obserwować i sterować diffem każdego serwisu.
Oskryptuj koordynację. Claude Code działa bezgłowo (headless), więc możesz sterować każdym repozytorium nieinteraktywnie i bramkować na testach kontraktów:
for svc in customer order payment notification; do (cd "../$svc" && claude -p "Implement the loyalty-points changes per ../contracts/loyalty.openapi.yaml. Add Pact contract tests against the services you call. Stop if any contract test fails." \ --allowedTools Read Edit Bash)donePod-agenci i bezgłowy tryb -p czynią Claude Code najlepszym wyborem, gdy zmiana jest mechaniczna w wielu repozytoriach i chcesz mieć ją audytowalną w CI.
Użyj Codex Cloud — jedno zadanie na serwis, każde we własnym środowisku chmurowym — aby zmiany były odizolowane i recenzowalne jako odrębne jednostki, a następnie pozwól Codeksowi otworzyć PR-y. Jego integracje z GitHubem i Linearem oznaczają, że możesz sterować całą funkcją z poziomu zgłoszenia: podlinkuj ticket Linear, a Codex śledzi pracę między repozytoriami i raportuje status z powrotem. Najlepsze, gdy koordynacja powinna żyć w twoim trackerze zgłoszeń, a nie w skrypcie powłoki.
Gdy to się psuje
Dział zatytułowany „Gdy to się psuje”Systemy rozproszone psują się w sposób, którego nie wychwytuje sposób myślenia o pojedynczym serwisie. Oto tryby awarii, które naprawdę wychodzą na jaw przy pracy wspomaganej AI, i sposoby na wyjście z nich.
-
Kontekst śladu urywa się na granicy asynchronicznej. Żądanie pojawia się w Jaegerze przez dwa skoki, a potem znika. Konsument nie wyodrębnił kontekstu śladu z nagłówków wiadomości. Przeszukaj konsumenta pod kątem wyodrębniania kontekstu; jeśli go brak, poproś AI o dodanie propagacji opartej na nagłówkach oraz testu, który potwierdza, że znany traceId przetrwa skok (zobacz prompt dla Kafki powyżej). Nie ufaj „dodałem śledzenie” — zweryfikuj traceId od początku do końca.
-
Saga zostawia osierocony stan. Płatność się powiodła, ale zapasy nigdy nie zostały zwolnione po awarii w dół strumienia. Kompensacja jest brakująca lub nieidempotentna. Odtwórz problem, wstrzykując awarię na kroku po tym, który podejrzewasz, i potwierdź, że kompensacja odpala się dokładnie raz. Przebuduj ten krok z promptem „najpierw test, który nie przechodzi”; nigdy nie akceptuj logiki kompensacji bez testu, który ją wyzwala.
-
Uwierzytelnianie serwera MCP zawodzi lub nic nie zwraca. Narzędzie się łączy, ale każde zapytanie kończy się błędem albo zwraca pustkę. Zwykle to brakujący/wygasły token lub błędna zmienna środowiskowa (
GRAFANA_SERVICE_ACCOUNT_TOKEN,DT_ENVIRONMENT, nieukończony OAuth Sentry). Uruchomclaude mcp list, aby potwierdzić, że serwer jest połączony, sprawdź ponownie zmienne środowiskowe względem poleceń instalacji powyżej, a dla hostowanego serwera Sentry ponownie przejdź przepływ OAuth. Jeślinpm view <pkg>pokazuje podejrzanie niską liczbę pobrań, zainstalowałeś podróbkę — przeinstaluj oficjalną paczkę z przestrzenią nazw. -
AI wygenerowało „rozproszony monolit”. Serwisy, które muszą być wdrażane razem, albo dwa serwisy zapisujące do tej samej tabeli. To wada projektowa, której model sam z siebie nie zgłosi. Poproś go o audyt: „Wypisz każde miejsce, gdzie dwa serwisy współdzielą bazę danych, ścieżkę zapisu lub muszą być wdrażane w blokadzie”. Rozwiąż te przypadki, zanim podzielisz dalej — współdzielone ścieżki zapisu niweczą sens mikrousług.
-
Automatyczne cofnięcie canary nigdy się nie odpala. Wdrożenie poszło źle, ale pozostało na 100%. Próg cofnięcia odwołuje się do metryki, która nie jest emitowana, albo nazwa metryki jest błędna. Potwierdź, że metryki golden signals istnieją w Prometheus/Grafanie (użyj MCP Grafany, aby je odpytać), zanim zaczniesz polegać na automatycznym cofaniu, i przetestuj ścieżkę cofnięcia na staging z celowo wadliwym buildem.
Co dalej
Dział zatytułowany „Co dalej”- Monitorowanie i obserwowalność — wejdź głębiej w OpenTelemetry, dashboardy Grafany i pętlę debugowania z MCP Sentry
- Automatyzacja potoków z AI — buildy świadome zmian i bezpieczne wdrożenia progresywne dla serwisów, które właśnie wydzieliłeś
- Infrastruktura jako kod z asystentami AI — Terraform, Pulumi i serwery MCP dostawców, które osadzają AI w realnym stanie
- Wzorce testów integracyjnych — testowanie kontraktów i weryfikacja granic serwisów bez kruchych atrap
- Niezbędne serwery MCP dla każdego dewelopera — fundamentalne serwery stojące za każdym z powyższych przepływów