Zephyrnet-logotyp

Ingen databas är perfekt: Tillämpa CAP-teorem på databasval – DATAVERSITY

Datum:

Sedan introduktionen på marknaden 2000 har konsistens-, tillgänglighets- och partitionssatsen, eller CAP-satsen, varit en vägledande princip i databashantering. Datavetaren Eric Brewer presenterade CAP-teoremet i ett föredrag om distribuerade system som tillhandahåller webbtjänster. Två MIT-professorer bevisade senare teoremet. Den anger att en databas kan vara stark inom ett eller två av tre områden – databaskonsistens, tillgänglighet och partitionstolerans – men inte i alla tre samtidigt. Till exempel prioriterar traditionella SQL-databaser stark konsistens men kan äventyra tillgängligheten vid nätverksfel. I kontrast, NoSQL databaser prioritera tillgänglighet och partitionstolerans men kan acceptera eventuella brister i konsekvens. CAP-satsen beskriver en medfödd begränsning av distribuerade system och gäller för olika databaser. Det är viktigt för designers att noga överväga vilka två CAP-garantier som är mest avgörande för deras organisationer innan de implementerar en databas.

Definiera konsistens, tillgänglighet och partitionstolerans 

Distribuerade system är spridda över flera datorer och servrar, vilket erbjuder en lösning för att hantera enorma mängder data. Konsistens i ett distribuerat system hänvisar till i vilken grad data visas korrekt och identiskt över noder. Det kan uppnås genom lås som hindrar flera användare från att göra ändringar samtidigt. System som prioriterar konsekvens är pålitliga och robusta. I ett konsekvent system levererar varje server ett svar som är lämpligt för den specificerade begäran. Innebörden av konsekvens varierar beroende på vilken typ av tjänst som efterfrågas. Trivialt och svagt konsekventa tjänster, som inte kräver någon samordning mellan servrar eller endast mindre samordning mellan servrar, faller inte inom ramen för CAP-teoremet och undviker i allmänhet att offra tillgänglighet och partitionstolerans. Men alla tjänster som kräver betydande samordning mellan servrar kommer att medföra CAP-avvägningar.

Tillgänglighet hänvisar till förmågan hos alla noder i ett system att konsekvent läsas eller skrivas. I ett tillgängligt system får alla förfrågningar från användaren ett tillförlitligt svar. Även om vissa noder inte fungerar, kommer ett tillgängligt system att fortsätta att svara på användarförfrågningar. System som prioriterar tillgänglighet kan dock ofta inte garantera att den data som returneras är helt uppdaterad. 

In partitionstolerant system distribueras data mellan flera servrar, vilket ökar robustheten i fall av partiella fel och nätverksuppdelningar. I en nätverkspartition är noder uppdelade i flera undernät som inte enkelt kan kommunicera med varandra. Partitioner ses i allmänhet som oundvikliga i system fördelade över ett stort område. Ett partitionstolerant system har förmågan att återhämta sig snabbt och bibehålla funktionen inför dessa splittringar. 

Hitta rätt databas

Databaser som prioriterar konsekvens och tillgänglighet, inklusive Oracle och MySQL, är idealiska för användningsfall som bankapplikationer och transaktionsbehandling. Tidigare prioriterade systemen konsistens och tillgänglighet, men i takt med att datasystem och lagring utvecklas börjar konsekvensen minska i betydelse. Ofta har nyare system användningsfall där det är tillåtet för flera användare att göra ändringar samtidigt. I dessa fall är partitionstolerans prioritet.

Databaser som är konsekventa och partitionstoleranta, inklusive MongoDB, Redis och Google Spanner, är idealiska för att lagra dokument. Google Drive, till exempel, använder Google Spanner, en databas för konsistens och partitionstolerans (CP). Nackdelen med CP-databaser är att de kan bli otillgängliga under en nätverkspartition. Användare av Google Drive, till exempel, förlorar ibland åtkomst till sina dokument under korta perioder. 

Samtidigt är databaser som prioriterar tillgänglighet och partitionstolerans idealiska för användningsfall där hastigheten är viktigast, som dataanalysoperationer. Netflix använder en databas för tillgänglighet och partitionstolerans (AP) som heter Cassandra, medan Airbnb använder en känd som Riak. AP-databaser offrar viss konsekvens; en läsoperation kan returnera ett föråldrat värde om databasen är partitionerad vid tidpunkten för läsningen.

Eftersom varje databas har unika styrkor och svagheter kräver att välja den bästa en grundlig förståelse för en organisations krav och specifika tillämpning. Det är viktigt att i förväg fastställa tydliga servicenivåmål (SLOs) och regelbundet spåra servicenivåindikatorer (SLIs). Databasskala, både vid tidpunkten för implementeringen och i termer av potential för ytterligare tillväxt, är en avgörande faktor.

Ett annat övervägande är datadelning, där data delas upp i segment och delas mellan servrar. Detta kan vara fördelaktigt för specifika databaser eftersom det ökar tillgängligheten och partitionstoleransen och kan göra katastrofåterställning och säkerhetskopiering enklare. Sharding innebär vissa uppoffringar när det kommer till konsistens. Att avgöra om datadelning är lämpligt är en viktig del av planering av databasdesign. 

Hur man minimerar CAP-avvägningar 

Även om ingen databas kan ge perfekt konsistens, tillgänglighet och partitionstolerans, finns det flera sätt att mildra CAP-avvägningar. Databasreplikering, där data kontinuerligt kopieras från en källdatabas till andra, förbättrar tillgängligheten och partitionstoleransen, även i databaser som prioriterar konsistens. Hybridarkitektur innebär att man kombinerar två olika databaser – till exempel en relationsdatabas med en NoSQL-databas – för att dra nytta av fördelarna med båda designerna och samtidigt minimera deras nackdelar. 

Att dela upp ett distribuerat system i segment tillåter system att prioritera de delar av CAP som är viktigast för vissa data eller operationer. Vissa arkitekturer innehåller flera separata databaser för olika användningsfall. Till exempel använder onlinemarknadsplatsen Etsy en MySQL-databas för stark konsekvens; hög tillgänglighet Redis för cachelagring i minnet; och Apache Kafka, som prioriterar partitionstolerans, för strömmande data.

Många nya databaser försöker övervinna de begränsningar som beskrivs av CAP-satsen. CockroachDB är en distribuerad SQL-databas som använder en Raft-konsensusalgoritm för att säkerställa att alla repliker av databasen kommer överens om skrivordningen så att databasen förblir tillgänglig även om vissa repliker misslyckas. Detta gör att CockroachDB kan erbjuda stark konsekvens och tillgänglighet, även inför nätverkspartitioner. TiDB, en annan nyare distribuerad SQL-databas, använder en Raft-konsensusalgoritm för att ge stark konsekvens och tillgänglighet för storskaliga applikationer.

Framtiden för databasdesign

Ny teknik och trender har potential att ytterligare ta itu med kompromisserna med CAP-teoremet. Många databasdesigners går över till molnbaserade arkitekturer, som har ett antal fördelar jämfört med lokala databaser, inklusive skalbarhet, elasticitet och feltolerans. Multimoln-distributioner kan göra hybriddatabasarkitekturer enklare att implementera. Algoritmer för maskininlärning (ML) kan användas för att dynamiskt justera balansen mellan konsekvens och tillgänglighet, baserat på arbetsbelastningsmönster, applikationskrav och dataåtkomstmönster. The Tunable Availability and Consistency Trade-offs (TACT) Systemet, utvecklat av Haifeng Yu och Amin Vahdat, gör det möjligt för applikationer att kontinuerligt uppdatera nivån på nödvändig konsistens. Slutligen, när kvantberäkningen mognar, kan databaser innehålla kvantresistenta kryptografiska tekniker för att säkerställa dataintegritet, konfidentialitet och konsistens.

CAP-teoremet ger en användbar ram för att förstå styrkorna och begränsningarna hos olika databaser. Även om ingen databas är perfekt, är vissa bättre lämpade än andra för specifika tillämpningar. Alltför ofta väljer företag databaser baserat på tillgänglighet eller bekvämlighet. Detta kan medföra onödiga kostnader utan att tillgodose organisationens behov. Istället är det viktigt för utvecklare att ha en grundlig förståelse för databasens grunder och detaljerna i deras specifika användningsfall. Det är avgörande att bestämma vilken av de tre databasegenskaperna som är viktigast för applikationen och definiera specifika mål och indikatorer på servicenivå innan implementering. Även om det kanske inte är möjligt för en enskild databas att leverera konsistens, partitionstolerans, och tillgänglighet, hybrid- och multi-databasarkitektur kan mildra en databas svagheter. Eftersom framväxande teknologier och utvecklingar som cloud computing och ML fortsätter att påverka området för databasdesign, kommer utvecklarnas sätt att hantera CAP-avvägningar också att fortsätta att utvecklas.

plats_img

Senaste intelligens

plats_img