Inteligentne projektowanie eksperymentów
Generuj realistyczne scenariusze awarii oparte na architekturze systemu, historycznych incydentach i analizie ryzyka
Przekształć awarie systemów z katastrof w możliwości uczenia się. Opanuj inżynierię chaosu z Cursor i Claude Code, aby budować odporne systemy, które gracefully radzą sobie z nieoczekiwanym. Naucz się projektować inteligentne scenariusze awarii, automatyzować testowanie odzyskiwania i tworzyć systemy, które poprawiają się pod wpływem stresu.
W systemach rozproszonych awarie są nieuniknione. Inżynieria chaosu wspierana przez AI przekształca te awarie z problemów w przewagi konkurencyjne:
Inteligentne projektowanie eksperymentów
Generuj realistyczne scenariusze awarii oparte na architekturze systemu, historycznych incydentach i analizie ryzyka
Automatyczne kontrole bezpieczeństwa
Wbudowana kontrola promienia wybuchu, automatyczne mechanizmy wycofywania i monitorowanie w czasie rzeczywistym zapobiegają przekształceniu chaosu w katastrofę
Uczenie się z awarii
Wyciągaj praktyczne wnioski z każdego eksperymentu, aby poprawić odporność systemu i procedury reagowania na incydenty
Proaktywna odporność
Identyfikuj i naprawiaj słabości zanim spowodują awarie produkcyjne, redukując MTTR i poprawiając niezawodność
Prompt: “Zaprojektuj eksperymenty inżynierii chaosu, aby przetestować odporność naszej architektury mikroserwisów na typowe scenariusze awarii.”
// Tryb agenta: Projektowanie eksperymentów chaosuAgent: "Utwórz kompleksowe eksperymenty inżynierii chaosu:
1. Przeanalizuj architekturę naszego systemu i zależności2. Zaprojektuj scenariusze awarii dla różnych komponentów3. Utwórz progresywne plany eksperymentów z kontrolami bezpieczeństwa4. Skonfiguruj monitorowanie i alerty dla eksperymentów5. Zdefiniuj kryteria sukcesu i procedury wycofywania6. Wygeneruj runbooki eksperymentów i dokumentację
Komponenty systemu:- Frontend webowy (React/Next.js)- Brama API (Kong/Envoy)- Mikroserwisy (Node.js, Python, Go)- Bazy danych (PostgreSQL, Redis)- Kolejki wiadomości (RabbitMQ, Kafka)- Infrastruktura (Kubernetes, AWS)"
// AI generuje framework eksperymentów chaosuclass ChaosExperimentDesigner { designInfrastructureTests() { return [ { name: 'Symulacja awarii podów', description: 'Testuj odzyskiwanie serwisu gdy pody są zabijane', target: 'kubernetes-pods', scenario: { action: 'kill-random-pods', percentage: 25, // Zabij 25% podów duration: '5m', rollback: 'automatic' }, monitoring: { metrics: ['response_time', 'error_rate', 'availability'], alerts: ['pod_restart_rate', 'service_degradation'], dashboards: ['service_health', 'infrastructure_overview'] }, successCriteria: { maxResponseTime: '2000ms', maxErrorRate: '1%', minAvailability: '99%', recoveryTime: '<60s' } },
{ name: 'Wstrzykiwanie opóźnienia sieciowego', description: 'Testuj zachowanie systemu pod wpływem stresu sieciowego', target: 'service-mesh', scenario: { action: 'inject-latency', latency: '500ms', jitter: '100ms', affectedServices: ['user-service', 'order-service'], duration: '10m' }, monitoring: { metrics: ['request_latency', 'timeout_rate', 'retry_count'], businessMetrics: ['conversion_rate', 'user_satisfaction'] }, successCriteria: { circuitBreakerTriggered: true, gracefulDegradation: true, userImpact: 'minimal' } },
{ name: 'Wyczerpanie puli połączeń bazy danych', description: 'Testuj zachowanie aplikacji gdy połączenia DB są wyczerpane', target: 'database-connections', scenario: { action: 'exhaust-connection-pool', targetService: 'order-service', duration: '3m', gradual: true }, monitoring: { metrics: ['db_connection_count', 'query_response_time', 'queue_depth'], applicationMetrics: ['order_processing_rate', 'error_responses'] }, successCriteria: { connectionPoolRecovery: '<30s', backpressureHandling: true, dataConsistency: 'maintained' } } ]; }
createSafetyControls() { return { blastRadiusControl: { maxAffectedServices: '30%', maxAffectedUsers: '5%', environmentIsolation: true },
automaticRollback: { triggers: [ 'error_rate > 5%', 'response_time > 5000ms', 'availability < 95%', 'business_metric_degradation > 20%' ], rollbackTime: '<30s' },
businessHourProtection: { allowedWindows: ['weekends', 'maintenance_windows'], requireApproval: 'outside_allowed_windows', stakeholderNotification: true } }; }}
# Zaprojektuj kompleksowe eksperymenty inżynierii chaosuclaude "Utwórz zestaw testów inżynierii chaosu dla naszego systemu rozproszonego:
Architektura systemu:- Frontend: React SPA hostowany na CDN- Brama API: Kong z ograniczaniem szybkości- Serwisy: User, Order, Payment, Inventory (mikroserwisy)- Bazy danych: PostgreSQL (główna), Redis (cache)- Message Bus: RabbitMQ do przetwarzania asynchronicznego- Infrastruktura: Kubernetes na AWS
Kategorie eksperymentów:1. Awarie infrastruktury (zabijanie podów, awarie węzłów)2. Problemy sieciowe (opóźnienia, partycje, utrata pakietów)3. Wyczerpanie zasobów (CPU, pamięć, dysk)4. Awarie zależności (baza danych, zewnętrzne API)5. Awarie na poziomie aplikacji (wycieki pamięci, deadlocki)
Wymagania bezpieczeństwa:- Promień wybuchu: <30% systemu- Wpływ na użytkowników: <5% ruchu- Auto-wycofywanie: <30 sekund- Godziny biznesowe: chronione- Monitorowanie: kompleksowe
Wygeneruj definicje eksperymentów, konfigurację monitorowania i runbooki."
# Claude tworzy kompletny framework inżynierii chaosu
Prompt: “Utwórz eksperymenty chaosu na poziomie aplikacji, aby przetestować wzorce odporności jak circuit breaker, ponawianie prób i graceful degradation.”
# Progresywne eksperymenty chaosu generowane przez AIapiVersion: chaos-mesh.org/v1alpha1kind: Schedulemetadata: name: application-resilience-testsspec: schedule: "0 2 * * 6" # Cotygodniowo w sobotę o 2:00 type: Workflow workflow: entry: progressive-chaos templates: # Etap 1: Wstrzykiwanie opóźnienia bazy danych - name: database-latency templateType: NetworkChaos networkChaos: action: delay mode: all delay: latency: "200ms" jitter: "50ms" selector: labelSelectors: app: "postgresql" duration: "10m"
# Etap 2: Awaria zależności serwisu - name: service-failure templateType: PodChaos podChaos: action: pod-kill mode: fixed-percent value: "50%" selector: labelSelectors: app: "payment-service" duration: "5m"
# Etap 3: Presja pamięciowa - name: memory-stress templateType: StressChaos stressChaos: stressors: memory: workers: 4 size: "256MB" selector: labelSelectors: app: "order-service" duration: "8m"
# Etap 4: Partycja sieciowa - name: network-partition templateType: NetworkChaos networkChaos: action: partition direction: both selector: labelSelectors: tier: "backend" duration: "3m"
// Tryb agenta: Wstrzykiwanie chaosu na poziomie aplikacjiAgent: "Utwórz eksperymenty chaosu na poziomie aplikacji:
1. Wstrzyknij opóźnienie bazy danych, aby przetestować obsługę timeoutów2. Symuluj awarie zależności serwisów3. Utwórz scenariusze presji pamięciowej4. Testuj circuit breaker i mechanizmy ponawiania prób5. Waliduj wzorce graceful degradation6. Monitoruj wpływ biznesowy podczas eksperymentów"
// AI generuje framework testowania chaosu aplikacyjnegoclass ApplicationChaosTests { async testResiliencePatterns() { const experiments = [ { name: 'Testowanie timeoutów bazy danych', description: 'Testuj zachowanie aplikacji gdy zapytania do bazy przekraczają timeout', implementation: async () => { // Wstrzyknij opóźnienie do wywołań bazy danych const originalQuery = db.query; db.query = async (sql, params) => { // Symuluj wolne zapytania 30% czasu if (Math.random() < 0.3) { await new Promise(resolve => setTimeout(resolve, 5000)); } return originalQuery.call(db, sql, params); }; }, validation: { circuitBreakerTriggered: true, timeoutHandled: true, userExperienceImpact: 'minimal' } },
{ name: 'Awaria zewnętrznego API', description: 'Testuj mechanizmy fallback gdy zewnętrzne API zawodzą', implementation: async () => { // Mockuj zewnętrzne API do zwracania błędów nock('https://api.external-service.com') .get('/data') .reply(500, { error: 'Service Unavailable' }) .persist(); }, validation: { fallbackActivated: true, cacheUsed: true, partialFunctionality: 'maintained' } },
{ name: 'Test presji pamięciowej', description: 'Testuj zachowanie aplikacji pod ograniczeniami pamięci', implementation: async () => { // Stopniowo konsumuj pamięć const memoryConsumer = []; const interval = setInterval(() => { memoryConsumer.push(new Array(1000000).fill('data'));
// Zatrzymaj przed destabilizacją systemu if (process.memoryUsage().heapUsed > 500 * 1024 * 1024) { clearInterval(interval); } }, 1000); }, validation: { gracefulDegradation: true, memoryManagement: 'effective', serviceAvailability: '>95%' } } ];
// Wykonuj eksperymenty z monitorowaniem for (const experiment of experiments) { await this.runExperimentWithMonitoring(experiment); } }
async runExperimentWithMonitoring(experiment) { const metrics = { start: Date.now(), baseline: await this.captureBaseline(), monitoring: true };
try { // Wykonaj eksperyment chaosu await experiment.implementation();
// Waliduj zachowanie systemu const results = await this.validateExperiment(experiment.validation);
return { experiment: experiment.name, status: 'completed', results, metrics: await this.captureMetrics(metrics.start) }; } catch (error) { return { experiment: experiment.name, status: 'failed', error: error.message, needsAttention: true }; } }}
// Testowanie awarii zależności wspierane przez AIclass DependencyChaosTester { async testResilience(service: Service) { // Mapuj wszystkie zależności const dependencies = await this.ai.mapDependencies({ service, depth: 3, includeTransitive: true, criticality: 'analyze' });
// Generuj scenariusze awarii const scenarios = await this.ai.generateFailureScenarios({ dependencies,
patterns: [ 'single_point_failure', 'cascading_failure', 'slow_degradation', 'intermittent_failure', 'partial_availability' ],
// AI priorytetyzuje na podstawie wpływu prioritization: { businessImpact: 0.4, userExperience: 0.3, dataIntegrity: 0.2, recoveryComplexity: 0.1 } });
// Wykonuj testy for (const scenario of scenarios) { const result = await this.executeScenario({ scenario,
monitoring: { // Metryki biznesowe business: ['conversion_rate', 'revenue_impact', 'user_satisfaction'],
// Metryki techniczne technical: ['latency_p99', 'error_rate', 'throughput'],
// Metryki odporności resilience: ['recovery_time', 'degradation_level', 'blast_radius'] },
validation: async (metrics) => { return this.ai.validateResilience({ metrics, slo: await this.getSLOs(), acceptableDegradation: 0.2 }); } });
// Ucz się z każdego testu await this.ai.updateResilienceModel({ scenario, result, systemResponse: await this.analyzeSystemResponse(result) }); } }
async analyzeSystemResponse(result: TestResult) { return this.ai.analyze({ circuitBreakers: { triggered: result.circuitBreakerActivations, effectiveness: await this.measureCircuitBreakerEffectiveness(result), tuning: await this.ai.suggestCircuitBreakerSettings(result) },
retries: { patterns: result.retryPatterns, success: result.retrySuccessRate, optimization: await this.ai.optimizeRetryStrategy(result) },
fallbacks: { used: result.fallbackActivations, quality: await this.measureFallbackQuality(result), improvements: await this.ai.suggestFallbackImprovements(result) },
caching: { hitRate: result.cachePerformance, staleness: result.cacheDataAge, strategy: await this.ai.optimizeCachingStrategy(result) } }); }}
// Testuj i optymalizuj circuit breakeryclass CircuitBreakerChaos { async testCircuitBreakers(service: Service) { const circuitBreakers = await this.identifyCircuitBreakers(service);
for (const cb of circuitBreakers) { // Testuj warunki otwierania const openingTest = await this.testOpening({ circuitBreaker: cb,
scenarios: await this.ai.generateOpeningScenarios({ errorRates: [0.1, 0.3, 0.5, 0.7, 0.9], latencies: ['100ms', '500ms', '1s', '5s', 'timeout'], patterns: ['sudden_spike', 'gradual_increase', 'intermittent'] }),
validate: async (behavior) => { return this.ai.assessOpeningBehavior({ behavior, expectedThreshold: cb.config.errorThreshold, acceptableDeviation: 0.1 }); } });
// Testuj stan half-open const halfOpenTest = await this.testHalfOpen({ circuitBreaker: cb,
recovery: await this.ai.simulateRecovery({ patterns: ['immediate', 'gradual', 'unstable', 'false_recovery'], duration: cb.config.halfOpenDuration }),
validate: async (behavior) => { return this.ai.assessHalfOpenBehavior({ behavior, stabilityRequired: true, prematureCloseRisk: 'low' }); } });
// Optymalizuj ustawienia const optimization = await this.ai.optimizeCircuitBreaker({ current: cb.config, testResults: { openingTest, halfOpenTest }, constraints: { maxLatency: '2s', minAvailability: 0.95, recoveryTime: 'under 1m' } });
return { circuitBreaker: cb.name, currentSettings: cb.config, suggestedSettings: optimization.settings, expectedImprovement: optimization.metrics }; } }}
Zacznij małe, skaluj stopniowo
Rozpocznij od eksperymentów niskiego ryzyka w środowiskach testowych. Używaj AI do bezpiecznego kierowania progresji do systemów produkcyjnych.
Automatyzuj kontrole bezpieczeństwa
Implementuj automatyczne wycofywanie, kontrole promienia wybuchu i monitorowanie. Nigdy nie uruchamiaj eksperymentów bez siatek bezpieczeństwa.
Ucz się z każdego eksperymentu
Wyciągaj wnioski zarówno z udanych, jak i nieudanych eksperymentów. Buduj organizacyjną wiedzę o odporności.
Spraw, żeby to był sport zespołowy
Włącz interesariuszy inżynieryjnych, operacyjnych i biznesowych. Inżynieria chaosu buduje odporność zespołu, nie tylko systemu.
Prompt: “Zintegruj inżynierię chaosu z naszym potokiem CI/CD z automatycznym wyborem eksperymentów i wykonywaniem.”
name: Ciągła inżynieria chaosu
on: schedule: - cron: '0 */6 * * *' # Co 6 godzin workflow_dispatch: inputs: experiment_type: description: 'Typ eksperymentu chaosu' required: true default: 'infrastructure' type: choice options: - infrastructure - application - dependency - security
jobs: chaos-experiment: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3
- name: Wybierz eksperyment chaosu id: select-experiment run: | # AI wybiera odpowiedni eksperyment na podstawie: # - Najnowszych zmian # - Zdrowia systemu # - Historycznych wzorców incydentów # - Oceny ryzyka
EXPERIMENT=$(./scripts/select-chaos-experiment.sh \ --recent-changes ${{ github.sha }} \ --system-health current \ --risk-tolerance low)
echo "experiment=$EXPERIMENT" >> $GITHUB_OUTPUT
- name: Kontrole bezpieczeństwa przed lotem run: | # Weryfikuj, że system jest zdrowy przed chaosem ./scripts/pre-flight-checks.sh \ --slo-status green \ --active-incidents none \ --business-hours-check
- name: Wykonaj eksperyment chaosu run: | ./scripts/run-chaos-experiment.sh \ --experiment ${{ steps.select-experiment.outputs.experiment }} \ --environment staging \ --monitoring enhanced \ --auto-rollback true \ --blast-radius minimal
- name: Analizuj wyniki i ucz się if: always() run: | ./scripts/analyze-chaos-results.sh \ --generate-insights \ --update-resilience-model \ --create-action-items
Zacznij od mapowania systemu - Udokumentuj architekturę, zależności i krytyczne ścieżki
Ustal stan ustalony - Zdefiniuj, jak wygląda “normalność” z kluczowymi metrykami i liniami bazowymi
Zaprojektuj bezpieczne eksperymenty - Rozpocznij od scenariuszy niskiego ryzyka w środowiskach testowych
Buduj możliwości zespołu - Trenuj zespoły w reagowaniu na incydenty przez game days
Automatyzuj i skaluj - Integruj testowanie chaosu z potokami CI/CD
Ucz się i ulepszaj - Wyciągaj wnioski i wzmacniaj odporność systemu
Agent: "Zaprojektuj eksperymenty inżynierii chaosu dla naszej platformy e-commerce:- Utwórz scenariusze awarii infrastruktury (zabijanie podów, problemy sieciowe)- Zaprojektuj testy chaosu na poziomie aplikacji (timeouty bazy danych, awarie API)- Skonfiguruj kompleksowe monitorowanie i kontrole bezpieczeństwa- Wygeneruj scenariusze game day do szkolenia zespołu- Włącz automatyczne procedury wycofywania i odzyskiwania"
claude "Skonfiguruj program inżynierii chaosu:
Todo:- [ ] Mapuj architekturę systemu i zależności- [ ] Utwórz bibliotekę scenariuszy awarii- [ ] Skonfiguruj Chaos Mesh lub Litmus w Kubernetes- [ ] Zaprojektuj progresywne etapy eksperymentów- [ ] Implementuj kontrole bezpieczeństwa i monitorowanie- [ ] Utwórz runbooki game day i scenariusze- [ ] Integruj z potokiem CI/CD- [ ] Skonfiguruj automatyczną analizę i uczenie się
Skup się na budowaniu pewności zespołu i odporności systemu."