BK cloud / systemen Notities
NL
English ENDeutsch DEEspañol ES中文 ZHFrançais FRPortuguês (Brasil) PT-BR日本語 JAहिन्दी HINederlands NL
Laten we kennismaken ↗
← Terug naar praktijknotities

De tijdbom van zes maanden: toen de EFS-burstcredits opraakten

Bijna zes maanden lang leek alles perfect te werken. Juist die lange rust was het gevaarlijke deel.

Een webapplicatie gebruikte Amazon Elastic File System (EFS) als gedeelde opslag. Meerdere applicatie-instances konden dezelfde bestanden benaderen, deployments waren eenvoudig en er was geen duidelijke reden om aan de architectuur te twijfelen.

Toen werd de website schijnbaar zonder waarschuwing extreem traag en leek uiteindelijk helemaal niet meer te werken. De serverbelasting was ongewoon hoog, aanvragen liepen vast op time-outs en applicatieprocessen stapelden zich op.

Op het eerste gezicht leek het een rekenkrachtprobleem. Dat was het niet. De werkelijke oorzaak was een uitgeput EFS-burstcreditsaldo.

Waarom de storing op een CPU-probleem leek

Een van de misleidende symptomen was de hoge Linux-load average. Een hoge load average betekent niet noodzakelijk dat de CPU’s volledig worden benut. Die telt ook processen mee die in een niet-onderbreekbare toestand wachten, vaak doordat ze geblokkeerd zijn op opslag-I/O.

De applicatieworkers wachtten tot EFS-bewerkingen klaar waren. Nieuwe verzoeken bleven binnenkomen, steeds meer workers raakten geblokkeerd en de wachtrij groeide:

  1. De EFS-doorvoer werd begrensd.
  2. Bestandsbewerkingen duurden langer.
  3. Applicatieworkers bleven bezet doordat ze op I/O wachtten.
  4. Binnenkomende verzoeken stapelden zich op.
  5. De systeembelasting nam toe.
  6. Uiteindelijk werd de website praktisch onbereikbaar.

Meer CPU-capaciteit had het onderliggende probleem niet opgelost.

Waarom het zes maanden duurde voordat het misging

Het EFS-bestandssysteem was geconfigureerd voor Bursting Throughput -modus. In deze modus hangt de duurzame basisdoorvoer af van de hoeveelheid data in de opslagklasse EFS Standard. Blijft de workload onder die basisdoorvoer, dan bouwt het bestandssysteem burstcredits op. Komt de doorvoer erboven, dan worden die credits verbruikt.

Dit creëert voor relatief kleine bestandssystemen een mogelijk misleidende situatie:

  • De hoeveelheid opgeslagen gegevens leidt tot een lage duurzaam beschikbare basisdoorvoer.
  • Een bestaand creditsaldo staat tijdelijk veel meer doorvoer toe.
  • De applicatie presteert normaal, hoewel de werklast op lange termijn de duurzame basisdoorvoer overschrijdt.
  • De onbalans blijft verborgen zolang er credits beschikbaar zijn.
  • Wanneer het saldo nul bereikt, vallen de prestaties sterk terug.

In dit geval gingen de opgebouwde credits ongeveer zes maanden mee. Qua doorvoer was de architectuur al te klein bemeten, maar het creditsaldo verborg het probleem. Het was een langzaam groeiend capaciteitsprobleem: een tijdbom die zes maanden tikte.

Tijdelijke burstprestaties mogen nooit worden verward met duurzaam beschikbare doorvoer.

De juiste EFS-doorvoermodus kiezen

Bursting Throughput

Bursting Throughput kan geschikt zijn als de doorvoer vanzelf meegroeit met de hoeveelheid opgeslagen data en drukke perioden worden gevolgd door rustigere perioden. Zorgvuldige monitoring is noodzakelijk. Een voortdurend dalend creditsaldo laat zien dat de workload in deze modus niet houdbaar is.

Elastic Throughput

Elastic Throughput past doorgaans beter bij onvoorspelbare of sterk wisselende werklasten. De doorvoer schaalt automatisch mee met de vraag, waardoor de applicatie niet afhankelijk is van een eindig burstcreditsaldo. Dat vergroot de operationele robuustheid, al moeten de verbruiksafhankelijke kosten worden beoordeeld bij werklasten met een voortdurend hoge doorvoer.

Provisioned Throughput

Provisioned Throughput is nuttig wanneer de vereiste doorvoer bekend is en hoger ligt dan het opgeslagen datavolume anders zou ondersteunen. Het biedt voorspelbare capaciteit onafhankelijk van de grootte van het bestandssysteem, maar het ingestelde niveau moet worden herzien wanneer de vraag verandert.

Verwar ook de EFS- doorvoermodus niet met de prestatiemodus. Doorvoermodi bepalen hoe doorvoercapaciteit wordt geleverd; prestatiemodi gaan over eigenschappen zoals latentie en parallellisme.

Monitoring die er had moeten zijn

De belangrijkste CloudWatch-meetwaarde voor een EFS-bestandssysteem met Bursting Throughput is BurstCreditBalance. Een bruikbare basis voor monitoring omvat ook:

  • BurstCreditBalance om aanhoudend creditverbruik te signaleren
  • PercentIOLimit om te zien wanneer het bestandssysteem zijn I/O-limiet nadert
  • PermittedThroughput om de momenteel beschikbare doorvoer te begrijpen
  • MeteredIOBytes en TotalIOBytes om I/O-verbruik te volgen
  • applicatielatentie, requestduur, time-outs en foutpercentages
  • processen die op I/O wachten, in samenhang met load en werkelijk CPU-gebruik

Alleen CPU, geheugen en HTTP-statuscodes monitoren is onvoldoende. Gedeelde opslag is een kritieke afhankelijkheid van de applicatie en moet als onderdeel van de dienst worden bewaakt, niet alleen als infrastructuurcomponent.

Een alarm moet ruim voordat het creditsaldo nul bereikt afgaan. Nog belangrijker is het beoordelen van de trend. Een saldo dat wekenlang gestaag daalt, wijst al op een structureel doorvoertekort, ook als het absolute saldo nog ruim lijkt.

Wat ik anders zou doen

  1. Schat de duurzaam beschikbare doorvoer tijdens het ontwerp.
  2. Kies de doorvoermodus op basis van het werkelijke toegangspatroon.
  3. Behandel burstcredits als tijdelijke speelruimte, niet als normale capaciteit.
  4. Maak CloudWatch-alarmen voor het creditsaldo en de I/O-limieten.
  5. Bewaak hoe snel de credits worden verbruikt.
  6. Neem EFS-doorvoer en latentie mee in belastingtests.
  7. Leg het verband tussen Linux-load, CPU-gebruik en I/O-wachttijd.
  8. Bekijk of vaak geraadpleegde bestanden werkelijk gedeelde netwerkopslag nodig hebben.
  9. Test applicatiegedrag bij opslagbeperking en verhoogde latentie.
  10. Documenteer de operationele procedure om van doorvoermodus te wisselen.

De belangrijkste les

EFS kan een uitstekende oplossing voor gedeelde opslag zijn, maar het gedrag hangt sterk af van de gekozen doorvoermodus en het workloadprofiel.

Het gevaarlijke aan dit incident was niet alleen dat de prestaties afnamen. Het gevaarlijke was dat het systeem zes maanden goed werkte voordat dat gebeurde. Het burstcreditsaldo stelde de zichtbare storing lang genoeg uit om vertrouwen te wekken in een architectuur die niet houdbaar was.

De beste bescherming is geen groter creditsaldo. Het is de juiste doorvoermodus kiezen, duurzame doorvoer begrijpen en de meetwaarden bewaken die een groeiende onbalans zichtbaar maken voordat gebruikers die merken.

Bronnen