nästan all teknik beslutsfattande måste uppfylla två viktiga kriterier: det måste göra det möjligt för dig att uppfylla dina affärsmål och det måste fungera bra tillsammans med resten av din teknik stack. När det gäller att välja datalagerteknik för att bygga ut din applikationsarkitektur fortsätter open source Apache Cassandra, Apache Kafka, Apache Spark och Elasticsearch att öka i popularitet.
men de är inte rätt val för varje användningsfall.
Låt oss ta en djupare titt på var och en av dessa tekniker, och några av de användningsfall som är – och är inte – fördelaktiga tillämpningar av dessa open source-lösningar.
Apache Cassandra
ursprungligen skapad av Facebook 2007, Cassandra använder en Dynamo arkitektur och en Bigtable-stil datamodell för att ge en NoSQL datalager som ger hög tillgänglighet och hög skalbarhet.
när du ska använda Apache Cassandra
Cassandra är ett idealiskt val för användningsfall som kräver högsta möjliga tillgänglighet. Databasen är också särskilt väl lämpad för att betjäna organisationer som förutser massiva arbetsbelastningar eller som vill se till att deras tjänster kan växa flexibelt när arbetsbelastningen expanderar (och därmed behöver den enkla skalbarheten som Cassandra tillhandahåller). Cassandra erbjuder tillförlitlig dataredundans och aktiv-aktiv verksamhet över flera datacenter.
när du inte ska
Cassandra är mer resurskrävande än alternativ när det gäller datalagring eller ren analyslagring (även factoring användningen av tillgängliga Spark-kontakter och Tableau och Hadoop-plugins). Cassandra är också dåligt lämpad för realtidsanalys, särskilt i form av slutanvändare ad hoc eller anpassade frågor, eftersom behovet av att implementera kod på applikationssidan kan bli invecklad. Dessutom uppfyller Cassandra inte de flesta SYRAKRAV.
Apache Kafka
Apache Kafka skapades först av det tekniska teamet på LinkedIn och tillhandahåller en mycket skalbar och mycket tillgänglig streamingplattform och meddelandebuss. Kafka fungerar som en distribuerad Logg, där nyanlända meddelanden läggs till i köens huvud och läsare (konsumenter) kommer att konsumera dem baserat på en förskjutning.
när du ska använda Apache Kafka
Apache Kafka är i allmänhet ett smart val för användningsfall som involverar mikrotjänster och serviceorienterad arkitektur. Kafka kan också fungera som en mycket effektiv arbetskö som kan samordna separata arbetsvägar, reservera beräkningskraft genom att lyssna och vänta tills arbetet anländer. Plattformens strömbehandlingsfunktioner är användbara för anomalidetektering, roll-ups och aggregeringar, liksom för att överföra mätvärden. Kafka är också ett mycket kapabelt alternativ för event sourcing, dataavstämning över olika mikrotjänster och för att tillhandahålla en extern commit-logg för distribuerade system. Ytterligare lämpliga användningsfall inkluderar loggaggregering, datamaskering och filtrering, databerikning och upptäckt av bedrägerier.
när du inte bör
även om det kan vara frestande i vissa fall kan det vara oklokt att använda Kafka som en databas eller källa-of-record, åtminstone utan en mycket gedigen förståelse för Kafka begränsningar och egenskaper för detta användningsfall. En sann databas kommer nästan alltid att vara enklare att använda och mer flexibel. Kafka är ett liknande olämpligt val för orderbehandling över ett helt ämne. I alla användningsfall där målet är att snabbt föra datapaket till slutkällan, till exempel ljud och video i realtid eller andra förstörande dataströmmar, bör organisationer använda specialbyggda lösningar istället för Kafka.
Apache Spark
ett allmänt ramverk för klusterberäkning som är lämpligt för att använda fall som involverar stora datavolymer, delar Apache Spark data och kör beräkning på dessa segment, så att arbetare utför allt möjligt arbete tills de behöver data från andra arbetare. Denna design ger Spark enorm skalbarhet och tillgänglighet, samtidigt som den gör den mycket motståndskraftig mot dataförlust.
när du ska använda Apache Spark
Spark låter sig använda fall som involverar storskalig analys, särskilt fall där data kommer via flera källor. Spark är en kraftfull lösning för ETL eller något användningsfall som inkluderar rörliga data mellan system, antingen när de används för att kontinuerligt fylla ett datalager eller data lake från transaktionsdatalager, eller i engångsscenarier som Databas eller system migreringar. Organisationer som bygger maskininlärningspipelines ovanpå befintliga data, arbetar med streaming med hög latens eller utför interaktiv, ad hoc eller explorativ analys kommer att hitta Spark en stark passform. Spark låter sig också hjälpa organisationer att uppfylla sina efterlevnadsbehov genom att erbjuda datamaskering, datafiltrering och granskning av stora datamängder ur ett efterlevnadsperspektiv.
när du inte ska
i allmänhet kommer Spark inte att vara det bästa valet för användningsfall som involverar realtid eller låg latensbearbetning. (Apache Kafka eller annan teknik ger överlägsen end-to-end-latens för dessa behov, inklusive realtidsströmbehandling.) När du arbetar med små eller enkla datamängder är Spark oftast för överdrivet ett alternativ. När det gäller datalagring och datasjöar är det också bättre att använda en teknik på högre nivå istället för Apache Spark, även om sådana produkter för Spark existerar.
Elasticsearch
Elasticsearch erbjuder en fulltextsökmotor som har ett brett utbud av funktioner för att söka och analysera ostrukturerade data. Tekniken erbjuder skalbar linjär sökning i nära realtid, ger robust drop-in sök ersättning, och betydande analysfunktioner.
när du ska använda Elasticsearch
Elasticsearch är starkt lämpad att använda fall som kräver fulltextsökning, geografisk sökning, skrapning och kombinera offentliga data, loggning och log analys, visualiseringar, och små volymer händelsedata och mätvärden.
när du inte bör
Elasticsearch bör inte användas som en databas eller källa-of-record, med relationsdata, eller för att uppfylla ACID krav.
att välja kompletterande teknik
att välja den bästa blandningen av teknik för din organisation (oavsett om det är öppen källkod eller på annat sätt) innebär uppenbarligen mer än bara att utvärdera lösningarna själva – beslutsfattare måste också föreställa sig hur organisationen kommer att anta och använda varje lösning som en del av sin teknikstack. Apache Cassandra, Apache Kafka, Apache Spark och Elasticsearch erbjuder en särskilt kompletterande uppsättning tekniker som är vettiga för organisationer att använda tillsammans, och som erbjuder frihet från licensavgifter eller leverantörslåsning tack vare deras open source-natur. Genom att samarbeta med dessa tekniker och förverkliga sina samlade fördelar kan organisationer uppnå sina mål och möjliggöra utveckling av applikationer som är mycket skalbara, tillgängliga, bärbara och fjädrande.
Ben Slater är Chief Product Officer på Instaclustr, som tillhandahåller en hanterad serviceplattform för öppen källkodsteknik som Apache Cassandra, Apache Spark, Elasticsearch och Apache Kafka.
relaterade artiklar:
här är vad Doug Cutting säger är Hadoop största bidrag
ett decennium senare, Apache Spark still Going Strong