Systemy rozproszone z pomocą AI
Twój serwis checkout zwraca sporadyczne błędy 500. Logi pokazują, że serwis płatności odpowiada poprawnie, ale serwis zamówień przekracza timeout czekając na zdarzenie, które serwis inwentarza powinien był opublikować. Trzy serwisy, trzy repozytoria, trzy różne zespoły — a narzędzie AI, którego używasz, widzi tylko jedno otwarte repozytorium. Debugowanie systemów rozproszonych z AI wymaga fundamentalnie innego podejścia niż rozwój jednoserwisowy.
Co wyniesiesz z tego rozdziału
Dział zatytułowany „Co wyniesiesz z tego rozdziału”- Przepływy pracy kontraktowe, w których AI generuje i waliduje interfejsy serwisów
- Strategie debugowania cross-serwisowego działające w ramach ograniczeń kontekstu jednego narzędzia
- Wzorce koordynowania migracji schematów przez granice serwisów
- Techniki analizy rozproszonego tracingu wspomaganej AI
- Prompty do generowania spójnej obsługi błędów w serwisach
Problem kontekstu rozproszonego
Dział zatytułowany „Problem kontekstu rozproszonego”Mikroserwisy dzielą twój system na repozytoria, języki i zespoły. Narzędzia AI widzą jedno repozytorium na raz. Rozwiązanie: zakoduj kontrakty i konwencje cross-serwisowe w każdym repozytorium, aby AI zawsze miało potrzebny kontekst integracyjny.
Rozwój kontraktowy
Dział zatytułowany „Rozwój kontraktowy”Definiuj kontrakty serwisów przed pisaniem kodu implementacyjnego. Narzędzia AI doskonale radzą sobie z generowaniem implementacji z dobrze zdefiniowanych interfejsów.
Przechowuj definicje kontraktów w repozytorium serwisu i odwołuj się do nich jawnie:
This service (order-service) communicates with:- payment-service: REST API, OpenAPI spec at /contracts/payment-api.yaml- inventory-service: Events via RabbitMQ, schemas at /contracts/inventory-events.json- notification-service: Events via RabbitMQ, schemas at /contracts/notification-events.json
When implementing any integration:1. Always read the relevant contract file first2. Generate client code from the contract, do not hand-write it3. Include retry logic with exponential backoff for all HTTP calls4. Include dead-letter queue handling for all event consumersUżyj @contracts/payment-api.yaml, aby wciągnąć kontekst kontraktu do konwersacji.
Claude Code może czytać pliki kontraktów bezpośrednio i generować implementacje:
Microservice: order-serviceContracts directory: /contracts/- payment-api.yaml (OpenAPI 3.1) - payment-service REST API- inventory-events.json (AsyncAPI 2.6) - inventory-service event schemas- notification-events.json (AsyncAPI 2.6) - notification-service events
Integration rules:- All HTTP clients must use the generated SDK in /src/clients/- Regenerate clients when contracts change: npm run generate-clients- All event publishers must validate against the schema before publishing- Circuit breaker pattern required for all external service callsCodex może uzyskiwać dostęp do wielu repozytoriów poprzez integrację z GitHub:
This is part of a microservices architecture. Related repos:- org/payment-service - Payment processing- org/inventory-service - Stock management- org/notification-service - User notifications
Shared contracts are in org/service-contracts repo.When making changes that affect service boundaries:1. Check the contract in org/service-contracts first2. Update the contract if needed (creates PR to service-contracts)3. Implement the change in this service4. Note any downstream services that need updatesDebugowanie cross-serwisowe
Dział zatytułowany „Debugowanie cross-serwisowe”Strategia: Debugowanie oparte na trace
Dział zatytułowany „Strategia: Debugowanie oparte na trace”Gdy problem rozproszony obejmuje serwisy, pracuj od trace wstecz.
Strategia: Wykrywanie naruszeń kontraktów
Dział zatytułowany „Strategia: Wykrywanie naruszeń kontraktów”Narzędzia AI mogą weryfikować, czy serwisy dotrzymują swoich kontraktów, nawet gdy masz dostęp tylko do jednej strony.
Compare our order-service HTTP client for the payment serviceagainst the payment-api.yaml contract:1. Are we handling all documented error codes?2. Are we sending all required headers?3. Are we respecting rate limits and timeouts from the spec?4. Are there any fields we're ignoring in responses that we should handle?claude "Read /contracts/payment-api.yaml and /src/clients/payment-client.ts.Perform a contract compliance audit:- List every endpoint in the contract and whether our client implements it- Check error handling for every documented error response- Verify request/response types match the schema- Check timeout and retry configurations against SLA requirementsOutput as a compliance checklist with pass/fail for each item."Audit contract compliance for the order-service against all its upstream contracts.For each contract in /contracts/:1. Find the corresponding client implementation in /src/clients/2. Verify every endpoint, error code, and schema field is handled3. Check for missing retry logic, circuit breakers, and timeout handling4. Create issues for any violations foundRozproszone migracje schematów
Dział zatytułowany „Rozproszone migracje schematów”Zmiana formatu danych, który przekracza granice serwisów, wymaga koordynacji.
-
Zdefiniuj nową wersję schematu
Dodaj nowy schemat obok starego. Jeszcze go nie zastępuj.
-
Zaktualizuj producentów, aby publikowali obie wersje
Serwis produkujący wysyła zdarzenia w obu formatach — starym i nowym — w okresie przejściowym.
-
Zaktualizuj konsumentów, aby akceptowali obie wersje
Każdy konsumujący serwis obsługuje obie wersje schematu elegancko.
-
Zweryfikuj, że wszyscy konsumenci zostali zaktualizowani
Monitoruj, czy żaden serwis nie konsumuje jeszcze starego formatu.
-
Usuń stary schemat
Dopiero po migracji wszystkich konsumentów, przestań produkować stary format i usuń go.
Service Mesh i obserwowalność
Dział zatytułowany „Service Mesh i obserwowalność”Konfiguracja obserwowalności wspomagana AI
Dział zatytułowany „Konfiguracja obserwowalności wspomagana AI”Kiedy coś się psuje
Dział zatytułowany „Kiedy coś się psuje”“AI nie rozumie naszych granic serwisów.” Potrzebujesz plików CLAUDE.md lub .cursor/rules per serwis, które jawnie dokumentują, z czym ten serwis się komunikuje i jak. Bez tego AI traktuje każdy serwis jako samodzielną aplikację.
“Zmiany kontraktów łamią serwisy downstream w produkcji.” Pominąłeś fazę podwójnej publikacji. Zawsze uruchamiaj obie wersje schematu jednocześnie podczas migracji. Użyj metryk śledzenia wersji, aby zweryfikować, że wszyscy konsumenci zmigrowali przed usunięciem starej wersji.
“AI generuje kod klienta, który nie pasuje do kontraktu.” Regeneruj klientów z kontraktów, nie pisz ich ręcznie. Dodaj walidację kontraktów do swojego pipeline CI: npm run validate-contracts powinno łamać build, jeśli implementacje odchodzą od specyfikacji.
“Debugowanie rozproszone trwa wieczność nawet z AI.” Najpierw zainwestuj w infrastrukturę obserwowalności. Narzędzia AI stają się dramatycznie bardziej skuteczne, gdy mogą analizować ustrukturyzowane trace i skorelowane logi, zamiast składać w całość osobne pliki logów.