Testen Is een Doorsnijdend Belang; Dat Geldt Ook Voor Databases

We zijn allemaal bekend met de principes van DevOps: het bouwen van kleine, goed geteste incrementen, frequent implementeren en automatiseren van pipelines om de noodzaak van handmatige stappen te elimineren. We monitoren onze applicaties nauwlettend, stellen waarschuwingen in, draaien problematische wijzigingen terug en ontvangen meldingen wanneer er problemen ontstaan. 

Maar als het op databases aankomt, ontbreekt het vaak aan hetzelfde niveau van controle en zichtbaarheid. Het oplossen van prestatieproblemen kan uitdagend zijn en we kunnen moeite hebben om te begrijpen waarom databases vertragen. Schema-migraties en aanpassingen kunnen uit de hand lopen, wat leidt tot aanzienlijke uitdagingen. 

Deze obstakels overwinnen vereist strategieën die het migreren en aanpassen van schema stroomlijnen, waardoor efficiënte veranderingen in de databasestructuur met minimale downtime of prestatie-impact mogelijk worden gemaakt. Het is essentieel om alle wijzigingen samenhangend door de hele pipeline te testen. Laten we verkennen hoe dit kan worden bereikt.

Automatiseer uw tests

Databases zijn vatbaar voor vele soorten storingen, maar krijgen vaak niet dezelfde grondige tests als applicaties. Terwijl ontwikkelaars doorgaans testen of applicaties de juiste gegevens kunnen lezen en schrijven, kijken ze vaak over hoe dit wordt bereikt. Belangrijke aspecten zoals ervoor zorgen dat indexes correct worden gebruikt, onnodig lazy loading vermijden, of de query-efficiëntie verifiëren, blijven vaak ongecontroleerd.

Bijvoorbeeld richten we ons op hoeveel rijen de database retourneert, maar verwaarlozen we om te analyseren hoeveel rijen het moest lezen. Op dezelfde manier worden terugrolprocedures zelden getest, waardoor we kwetsbaar zijn voor potentieel gegevensverlies bij elke wijziging. Om deze hiaten aan te pakken, hebben we uitgebreide geautomatiseerde tests nodig die proactief problemen detecteren, waardoor de noodzaak voor handmatig ingrijpen wordt geminimaliseerd.

We vertrouwen vaak op belastingtests om prestatieproblemen te identificeren, en hoewel ze kunnen onthullen of onze query’s snel genoeg zijn voor productie, hebben ze aanzienlijke nadelen. Ten eerste zijn belastingtests duur om te bouwen en te onderhouden, waarbij z careful handling van GDPR-naleving, gegevensanonimisering en stateful applicaties vereist is. Bovendien komen ze te laat in de ontwikkelingspijplijn. Wanneer belastingtests problemen aan het licht brengen, zijn de wijzigingen al geïmplementeerd, beoordeeld en samengevoegd, wat ons dwingt terug te gaan naar de tekentafel en mogelijk opnieuw te beginnen. Tot slot zijn belastingtests tijdrovend, waarbij vaak uren nodig zijn om caches te vullen en de betrouwbaarheid van de applicatie te valideren, waardoor ze minder praktisch zijn voor het vroegtijdig opsporen van problemen.

Schema-migraties vallen vaak buiten de reikwijdte van onze tests. Meestal voeren we testreeksen alleen uit nadat migraties zijn voltooid, wat betekent dat we niet evalueren hoelang ze duurden, of ze tabel-herschrijvingen hebben veroorzaakt, of dat ze prestatieknelpunten hebben veroorzaakt. Deze problemen blijven vaak onopgemerkt tijdens het testen en worden pas duidelijk wanneer ze in productie worden uitgerold.

Een andere uitdaging is dat we testen met databases die te klein zijn om prestatieproblemen vroegtijdig aan het licht te brengen. Deze afhankelijkheid van inadequate tests kan leiden tot verspilde tijd aan belastingstests en laat kritieke aspecten, zoals schema-migraties, volledig ongetest. Dit gebrek aan dekking vermindert onze ontwikkelingssnelheid, introduceert problemen die de applicatie kunnen breken en belemmert de wendbaarheid.

De oplossing voor deze uitdagingen ligt in het implementeren van database-guardrails. Database-guardrails evalueren queries, schema-migraties, configuraties en databaseontwerpen terwijl we code schrijven. In plaats van te vertrouwen op pipeline-runs of langdurige belastingstests, kunnen deze controles rechtstreeks in de IDE of ontwikkelomgeving worden uitgevoerd. Door gebruik te maken van observability en projecties van de productiedatabase, beoordelen guardrails uitvoeringsplannen, statistieken en configuraties, zodat alles soepel functioneert na de implementatie.

Bouw Observability Rondom Databases

Wanneer we naar productie implementeren, kunnen de systeemdynamieken in de loop van de tijd veranderen. De CPU-belasting kan pieken, het geheugengebruik kan toenemen, de datavolumes kunnen uitbreiden en de patronen van gegevensdistributie kunnen verschuiven. Het snel identificeren van deze problemen is essentieel, maar het is niet genoeg. Huidige monitoringtools overweldigen ons met ruwe signalen, waardoor we de redenering zelf moeten reconstrueren. Ze kunnen bijvoorbeeld een toename van de CPU-belasting aangeven, maar niet uitleggen waarom dit is gebeurd. De last van het onderzoeken en identificeren van de oorzaken ligt volledig bij ons. Deze aanpak is verouderd en inefficiënt.

Om echt snel te bewegen, moeten we overschakelen van traditionele monitoring naar volledige observeerbaarheid. In plaats van overspoeld te worden met ruwe data, hebben we bruikbare inzichten nodig die ons helpen de oorzaken van problemen te begrijpen. Databasebeveiligingen bieden deze transformatie. Ze verbinden de punten, tonen aan hoe verschillende factoren met elkaar samenhangen, identificeren het probleem en stellen oplossingen voor. In plaats van simpelweg een piek in CPU-gebruik te observeren, helpen beveiligingen ons te begrijpen dat een recente uitrol een query heeft aangepast, waardoor een index werd omzeild, wat leidde tot de verhoogde CPU-belasting. Met deze helderheid kunnen we doeltreffend handelen, de query of index corrigeren om het probleem op te lossen. Deze verschuiving van “zien” naar “begrijpen” is essentieel voor het behoud van snelheid en betrouwbaarheid.

De volgende evolutie in databasebeheer is de overgang van geautomatiseerd probleemonderzoek naar geautomatiseerde oplossing. Veel problemen kunnen automatisch worden opgelost met goed geïntegreerde systemen. Observeerbaarheidstools kunnen prestatie- en betrouwbaarheidsproblemen analyseren en de nodige code- of configuratiewijzigingen genereren om ze op te lossen. Deze fixes kunnen automatisch worden toegepast of vereisen expliciete goedkeuring, zodat problemen onmiddellijk met minimale inspanning van uw kant worden aangepakt.

Buiten het snel oplossen van problemen, is het uiteindelijke doel om te voorkomen dat problemen überhaupt ontstaan. Frequent terugdraaien of falen belemmert voortgang en wendbaarheid. Ware wendbaarheid wordt niet bereikt door snel problemen op te lossen, maar door systemen te ontwerpen waarin problemen zelden ontstaan. Hoewel deze visie mogelijk incrementele stappen vereist om te bereiken, vertegenwoordigt het de uiteindelijke richting voor innovatie.

Metis stelt je in staat om deze uitdagingen te overwinnen. Het evalueert je wijzigingen nog voordat ze aan de repository worden bevestigd, door queries, schema-migraties, uitvoeringsplannen, prestaties en juistheid gedurende je pipelines te analyseren. Metis integreert naadloos met CI/CD-workflows, waardoor gebrekkige wijzigingen worden voorkomen dat ze in productie komen. Maar het gaat verder — het biedt diepgaande observatie van je productie-database door metrics te analyseren en implementaties, extensies en configuraties te volgen. Het lost automatisch problemen op wanneer mogelijk en waarschuwt je wanneer handmatige interventie vereist is. Met Metis kun je sneller bewegen en elk aspect van je CI/CD-pijplijn automatiseren, waardoor een soepelere en betrouwbaardere databasebeheer wordt gegarandeerd.

Iedereen Moet Deelnemen

Database-observatie gaat over het proactief voorkomen van problemen, het bevorderen van geautomatiseerd begrip en oplossing, en het opnemen van databasespecifieke controles gedurende het ontwikkelingsproces. Vertrouwen op verouderde tools en workflows is niet langer voldoende; we hebben moderne oplossingen nodig die zich aanpassen aan de complexiteiten van vandaag. Database-guardrails bieden deze ondersteuning. Ze helpen ontwikkelaars te voorkomen dat ze inefficiënte code creëren, schema’s en configuraties te analyseren en elke stap van de softwareontwikkelingscyclus binnen onze pipelines te valideren.

Vangrails zetten ook ruwe monitoringsgegevens om in bruikbare inzichten, waarbij niet alleen wordt uitgelegd wat er mis ging, maar ook hoe het opgelost kan worden. Deze capaciteit is essentieel in alle sectoren, aangezien de complexiteit van systemen alleen maar zal blijven groeien. Om voorop te blijven lopen, moeten we innovatieve tools en processen omarmen die ons in staat stellen om sneller en efficiënter te werken.

Source:
https://dzone.com/articles/testing-is-a-cross-cutting-concern-so-are-databases