Dela via


Introduktion till tjänsten för felanalys

Felanalystjänsten är utformad för att testa tjänster som bygger på Microsoft Azure Service Fabric. Med Tjänsten för felanalys kan du inducera meningsfulla fel och köra fullständiga testscenarier mot dina program. Dessa fel och scenarier övar och validerar de många tillstånd och övergångar som en tjänst kommer att uppleva under hela sin livstid, allt på ett kontrollerat, säkert och konsekvent sätt.

Åtgärder är de enskilda fel som riktas mot en tjänst för att testa den. En tjänstutvecklare kan använda dessa som byggstenar för att skriva komplicerade scenarier. Till exempel:

  • Starta om en nod för att simulera valfritt antal situationer där en dator eller virtuell dator startas om.
  • Flytta en replik av din tillståndskänsliga tjänst för att simulera belastningsutjämning, redundans eller programuppgradering.
  • Anropa kvorumförlust på en tillståndskänslig tjänst för att skapa en situation där skrivåtgärder inte kan fortsätta eftersom det inte finns tillräckligt med "säkerhetskopiering" eller "sekundära" repliker för att acceptera nya data.
  • Anropa dataförlust på en tillståndskänslig tjänst för att skapa en situation där allt minnesinternt tillstånd är helt rensat.

Scenarier är komplexa åtgärder som består av en eller flera åtgärder. Tjänsten Felanalys innehåller två inbyggda kompletta scenarier:

  • Kaosscenario
  • Redundansscenario

Testa som en tjänst

Felanalystjänsten är en Service Fabric-systemtjänst som startas automatiskt med ett Service Fabric-kluster. Den här tjänsten fungerar som värd för felinmatning, körning av testscenarion och hälsoanalys.

Felanalystjänst

När en felåtgärd eller ett testscenario initieras skickas ett kommando till felanalystjänsten för att köra felåtgärden eller testscenariot. Tjänsten för felanalys är tillståndskänslig så att den kan köra fel och scenarier på ett tillförlitligt sätt och validera resultat. Ett långvarigt testscenario kan till exempel köras på ett tillförlitligt sätt av tjänsten för felanalys. Och eftersom tester körs i klustret kan tjänsten undersöka klustrets tillstånd och dina tjänster för att ge mer detaljerad information om fel.

Testa distribuerade system

Service Fabric gör det betydligt enklare att skriva och hantera distribuerade skalbara program. Felanalystjänsten gör det enklare att testa ett distribuerat program på samma sätt. Det finns tre huvudproblem som måste lösas vid testning:

  1. Simulera/generera fel som kan inträffa i verkliga scenarier: En av de viktiga aspekterna av Service Fabric är att distribuerade program kan återställas från olika fel. Men för att testa att programmet kan återställas från dessa fel behöver vi en mekanism för att simulera/generera dessa verkliga fel i en kontrollerad testmiljö.
  2. Möjligheten att generera korrelerade fel: Grundläggande fel i systemet, till exempel nätverksfel och datorfel, är enkla att skapa individuellt. Att generera ett stort antal scenarier som kan inträffa i den verkliga världen till följd av interaktionerna mellan dessa enskilda fel är inte trivialt.
  3. Enhetlig upplevelse över olika nivåer av utveckling och distribution: Det finns många felinmatningssystem som kan utföra olika typer av fel. Upplevelsen i alla dessa är dock dålig när du går från scenarier med en ruta till att köra samma tester i stora testmiljöer till att använda dem för tester i produktion.

Det finns många mekanismer för att lösa dessa problem, men ett system som gör samma sak med nödvändiga garantier – hela vägen från en enstaka utvecklarmiljö för att testa i produktionskluster – saknas. Felanalystjänsten hjälper programutvecklarna att fokusera på att testa sin affärslogik. Tjänsten Felanalys innehåller alla funktioner som behövs för att testa interaktionen mellan tjänsten och det underliggande distribuerade systemet.

Simulera/generera verkliga felscenarier

För att testa robustheten i ett distribuerat system mot fel behöver vi en mekanism för att generera fel. Även om det i teorin verkar enkelt att generera ett fel som en nod nedåt, börjar det stöta på samma uppsättning konsekvensproblem som Service Fabric försöker lösa. Om vi till exempel vill stänga av en nod är det obligatoriska arbetsflödet följande:

  1. Från klienten utfärdar du en begäran om avstängningsnod.

  2. Skicka begäran till rätt nod.

    a. Om noden inte hittas bör den misslyckas.

    b. Om noden hittas bör den bara returneras om noden stängs av.

För att verifiera felet ur ett testperspektiv måste testet veta att felet faktiskt inträffar när det här felet uppstår. Den garanti som Service Fabric tillhandahåller är att noden antingen kommer att gå ned eller redan var nere när kommandot nådde noden. I båda fallen bör testet kunna resonera korrekt om tillståndet och lyckas eller misslyckas korrekt i valideringen. Ett system som implementeras utanför Service Fabric för att utföra samma uppsättning fel kan drabba många problem med nätverk, maskinvara och programvara, vilket skulle hindra det från att tillhandahålla de föregående garantierna. I närvaro av de problem som angetts tidigare konfigurerar Service Fabric om klustertillståndet för att kringgå problemen, och därför kommer tjänsten för felanalys fortfarande att kunna ge rätt uppsättning garantier.

Generera nödvändiga händelser och scenarier

Även om det är svårt att simulera ett verkligt misslyckande konsekvent till att börja med, är förmågan att generera korrelerade misslyckanden ännu tuffare. Till exempel sker en dataförlust i en tillståndskänslig beständiga tjänst när följande saker händer:

  1. Endast ett skrivkvorum för replikerna fångas upp vid replikering. Alla sekundära repliker ligger efter den primära.
  2. Skrivkvorumet går ned på grund av att replikerna går ned (på grund av att ett kodpaket eller en nod går ned).
  3. Skrivkvorumet kan inte säkerhetskopieras eftersom data för replikerna går förlorade (på grund av diskskada eller datoråterställning).

Dessa korrelerade fel inträffar i den verkliga världen, men inte lika ofta som enskilda fel. Möjligheten att testa för dessa scenarier innan de sker i produktion är avgörande. Ännu viktigare är möjligheten att simulera dessa scenarier med produktionsarbetsbelastningar under kontrollerade omständigheter (mitt på dagen med alla tekniker på däck). Det är mycket bättre än att det händer för första gången i produktion klockan 02:00.

Enhetlig upplevelse i olika miljöer

Metoden har traditionellt varit att skapa tre olika uppsättningar av upplevelser, en för utvecklingsmiljön, en för tester och en för produktion. Modellen var:

  1. I utvecklingsmiljön skapar du tillståndsövergångar som tillåter enhetstester av enskilda metoder.
  2. I testmiljön skapar du fel som tillåter slutpunkt-till-slutpunkt-tester som utför olika felscenarier.
  3. Håll produktionsmiljön orörd för att förhindra icke-naturliga fel och för att säkerställa att det finns extremt snabba mänskliga svar på fel.

I Service Fabric föreslår vi genom tjänsten felanalys att vi vänder på detta och använder samma metodik från utvecklarmiljö till produktion. Det finns två sätt att uppnå detta:

  1. Om du vill inducera kontrollerade fel använder du API:erna för felanalystjänsten från en enstaka miljö hela vägen till produktionskluster.
  2. Om du vill ge klustret feber som orsakar automatisk induktion av fel använder du felanalystjänsten för att generera automatiska fel. Genom att kontrollera felfrekvensen via konfigurationen kan samma tjänst testas på olika sätt i olika miljöer.

Med Service Fabric skulle skalningen av fel vara annorlunda i de olika miljöerna, men de faktiska mekanismerna skulle vara identiska. Detta möjliggör en mycket snabbare kod-till-distribution-pipeline och möjlighet att testa tjänsterna under verkliga belastningar.

Använda tjänsten för felanalys

C#

Funktionerna i Tjänsten för felanalys finns i System.Fabric-namnområdet i NuGet-paketet Microsoft.ServiceFabric. Om du vill använda funktionerna i Tjänsten för felanalys tar du med nuget-paketet som en referens i projektet.

PowerShell

Om du vill använda PowerShell måste du installera Service Fabric SDK. När SDK:t har installerats läses ServiceFabric PowerShell-modulen in automatiskt så att du kan använda den.

Nästa steg

För att skapa verkligt molnskalade tjänster är det viktigt att säkerställa, både före och efter distributionen, att tjänsterna kan klara verkliga fel. I tjänstevärlden idag är det mycket viktigt att snabbt kunna förnya och flytta kod till produktion. Felanalystjänsten hjälper tjänstutvecklare att göra just detta.

Börja testa dina program och tjänster med hjälp av de inbyggda testscenarierna eller skapa egna testscenarier med hjälp av felåtgärderna som tillhandahålls av tjänsten för felanalys.