Programmering

Slå av stor databehandling med Apache Ignite

Apache Ignite er en datamaskinplattform i minnet som kan settes sømløst mellom brukerens applikasjonslag og datalag. Apache Ignite laster data fra det eksisterende diskbaserte lagringslaget i RAM, og forbedrer ytelsen med hele seks størrelsesordener (1 million ganger).

Datakapasiteten i minnet kan enkelt skaleres for å håndtere petabyte med data ved å legge til flere noder i klyngen. Videre støttes både ACID-transaksjoner og SQL-spørsmål. Ignite leverer ytelse, skala og omfattende funksjoner langt utover hva tradisjonelle minnedatabaser, minnedatanettverk og andre minnebaserte punktløsninger kan tilby av seg selv.

Apache Ignite krever ikke at brukere riper og erstatter eksisterende databaser. Det fungerer med RDBMS, NoSQL og Hadoop datalagre. Apache Ignite muliggjør transaksjoner med høy ytelse, streaming i sanntid og rask analyse i et enkelt, omfattende datatilgangs- og behandlingslag. Den bruker en distribuert, massivt parallell arkitektur på rimelig råvaremaskinvare for å drive eksisterende eller nye applikasjoner. Apache Ignite kan kjøre i lokaler, på skyplattformer som AWS og Microsoft Azure, eller i et hybridmiljø.

Apache Ignite unified API støtter SQL, C ++, .Net, Java, Scala, Groovy, PHP og Node.js. Den enhetlige API-en kobler applikasjoner i skyskala med flere datalagre som inneholder strukturerte, semistrukturerte og ustrukturerte data. Det tilbyr et høyytelsesdatamiljø som gjør det mulig for selskaper å behandle fullstendige ACID-transaksjoner og generere verdifull innsikt fra sanntids-, interaktive og batch-spørsmål.

Brukere kan holde eksisterende RDBMS på plass og distribuere Apache Ignite som et lag mellom det og applikasjonslaget. Apache Ignite integreres automatisk med Oracle, MySQL, Postgres, DB2, Microsoft SQL Server og andre RDBMSer. Systemet genererer automatisk applikasjonsdomenemodellen basert på skjemadefinisjonen til den underliggende databasen, og laster deretter inn dataene. In-memory databaser gir vanligvis bare et SQL-grensesnitt, mens Ignite støtter en bredere gruppe tilgangs- og behandlingsparadigmer i tillegg til ANSI SQL. Apache Ignite støtter nøkkel- / verdilagre, SQL-tilgang, MapReduce, HPC / MPP-prosessering, streaming / CEP-prosessering, klynging og Hadoop-akselerasjon i en enkelt integrert databehandlingsplattform i minnet.

GridGain Systems donerte den opprinnelige koden for Apache Ignite til Apache Software Foundation i andre halvdel av 2014. Apache Ignite ble raskt promotert fra et inkubasjonsprosjekt til et Apache-prosjekt på toppnivå i 2015. I andre kvartal 2016 var Apache Ignite lastet ned nesten 200 000 ganger. Den brukes av organisasjoner over hele verden.

Arkitektur

Apache Ignite er JVM-basert distribuert mellomvare basert på en homogen implementering av klyngetopologi som ikke krever separate server- og klientnoder. Alle noder i en Ignite-klynge er like, og de kan spille en hvilken som helst logisk rolle per applikasjonskrav for kjøretid.

Et tjenesteleverandørgrensesnitt (SPI) -design er kjernen i Apache Ignite. Den SPI-baserte designen gjør alle interne komponenter i Ignite fullt tilpassbare og pluggbare. Dette muliggjør enorm konfigurering av systemet, med tilpasning til enhver eksisterende eller fremtidig serverinfrastruktur.

Apache Ignite gir også direkte støtte for parallellisering av distribuerte beregninger basert på fork-join, MapReduce eller MPP-stil prosessering. Ignite bruker distribuerte parallelle beregninger i utstrakt grad, og de er fullt eksponert på API-nivå for brukerdefinert funksjonalitet.

Nøkkelegenskaper

Datarutenett i minnet. Apache Ignite inkluderer et datarutenett i minnet som håndterer distribuert datahåndtering i minnet, inkludert ACID-transaksjoner, failover, avansert lastbalansering og omfattende SQL-støtte. Ignite-datarutenettet er et distribuert, objektbasert, ACID-transaksjonsnøkkelverdilager i minnet. I motsetning til tradisjonelle databasestyringssystemer, som bruker disk som sin primære lagringsmekanisme, lagrer Ignite data i minnet. Ved å bruke minne i stedet for disk, er Apache Ignite opptil 1 million ganger raskere enn tradisjonelle databaser.

SQL-støtte. Apache Ignite støtter fritt ANSI SQL-99-kompatible spørsmål med praktisk talt ingen begrensninger. Ignite kan bruke hvilken som helst SQL-funksjon, aggregering eller gruppering, og den støtter distribuerte, ikke-plasserte SQL-sammenføyninger og kryss-cache-sammenføyninger. Ignite støtter også begrepet feltforespørsler for å minimere overhead for nettverk og serialisering.

Beregningsnett i minnet. Apache Ignite inkluderer et beregningsrutenett som muliggjør parallell prosessering i minnet av CPU-intensive eller andre ressurskrevende oppgaver som tradisjonell HPC, MPP, fork-join og MapReduce-behandling. Støtte gis også for standard asynkron prosessering av Java ExecutorService.

Tjenestenett i minnet. Apache Ignite servicenett gir full kontroll over tjenester distribuert i klyngen. Brukere kan kontrollere hvor mange serviceinstanser som skal distribueres på hver klyngenode, og sikre riktig distribusjon og feiltoleranse. Servicenettet garanterer kontinuerlig tilgjengelighet av alle distribuerte tjenester i tilfelle nodefeil. Den støtter også automatisk distribusjon av flere forekomster av en tjeneste, av en tjeneste som en singleton og av tjenester ved oppstart av noden.

Strømning i minnet. Strømbehandling i minnet adresserer en stor familie av applikasjoner der tradisjonelle behandlingsmetoder og diskbasert lagring, for eksempel diskbaserte databaser eller filsystemer, er utilstrekkelige. Disse applikasjonene utvider grensene for tradisjonell databehandlingsinfrastruktur.

Streaming-støtte lar brukerne spørre rullende vinduer med innkommende data. Dette gjør det mulig for brukere å svare på spørsmål som "Hva er de 10 mest populære produktene den siste timen?" eller “Hva er gjennomsnittsprisen i en bestemt produktkategori de siste 12 timene?”

En annen vanlig bruk av strømbehandling er pipelining av en distribuert arbeidsflyt. Når hendelser kommer inn i systemet i høye hastigheter, blir behandlingen av hendelser delt inn i flere trinn, som hver må rutes ordentlig i en klynge for behandling. Disse tilpassbare hendelsesarbeidsflytene støtter applikasjoner med kompleks hendelsesbehandling (CEP).

Hadoop-akselerasjon i minnet. Apache Ignite Accelerator for Hadoop muliggjør rask databehandling i eksisterende Hadoop-miljøer via verktøyene og teknologien en organisasjon allerede bruker.

Ignite i minnet Hadoop-akselerasjon er basert på det første dual-mode, høyytelsesfilsystemet i minnet som er 100 prosent kompatibelt med Hadoop HDFS og en optimalisert MapReduce-implementering i minnet. Leverer opptil 100 ganger raskere ytelse, HDFS i minnet og MapReduce i minnet gir brukervennlige utvidelser til diskbasert HDFS og tradisjonell MapReduce. Denne plug-and-play-funksjonen krever minimal eller ingen integrasjon. Den fungerer med hvilken som helst åpen kildekode eller kommersiell versjon av Hadoop 1.x eller Hadoop 2.x, inkludert Cloudera, Hortonworks, MapR, Apache, Intel og AWS. Resultatet er opptil 100 ganger raskere ytelse for MapReduce- og Hive-jobber.

Distribuert filsystem i minnet. Et unikt trekk ved Apache Ignite er Ignite File System (IGFS), som er et filsystemgrensesnitt for data i minnet. IGFS leverer lignende funksjonalitet som Hadoop HDFS. Det inkluderer muligheten til å lage et fullt funksjonelt filsystem i minnet. IGFS er kjernen i Apache Ignite In-Memory Accelerator for Hadoop.

Dataene fra hver fil blir delt på separate datablokker og lagret i hurtigbufferen. Data i hver fil kan nås med et standard Java-streaming-API. For hver del av filen kan en utvikler beregne tilknytning og behandle filens innhold på tilsvarende noder for å unngå unødvendig nettverk.

Enhetlig API. Apache Ignite unified API støtter et bredt utvalg av vanlige protokoller for at applikasjonslaget kan få tilgang til data. Protokoller som støttes inkluderer SQL, Java, C ++, .Net, PHP, MapReduce, Scala, Groovy og Node.js. Ignite støtter flere protokoller for klienttilkobling til Ignite-klynger, inkludert Ignite Native Clients, REST / HTTP, SSL / TLS og Memcached.SQL.

Avansert gruppering. Apache Ignite gir en av de mest sofistikerte klyngeteknologiene på JVM-er. Ignite nodes kan automatisk oppdage hverandre, noe som hjelper til med å skalere klyngen når det er nødvendig uten å måtte starte hele klyngen på nytt. Utviklere kan også dra nytte av Ignites hybridsky-støtte, som lar brukerne etablere forbindelser mellom private skyer og offentlige skyer som AWS eller Microsoft Azure.

Tilleggsfunksjoner. Apache Ignite gir høy ytelse, clusterwide meldingsfunksjonalitet. Det tillater brukere å utveksle data via publiser abonnement og direkte punkt-til-punkt kommunikasjonsmodeller.

Funksjonen for distribuerte hendelser i Ignite gjør at applikasjoner kan motta varsler om hurtigbufferhendelser som oppstår i et distribuert rutenettmiljø. Utviklere kan bruke denne funksjonaliteten til å bli varslet om utførelse av eksterne oppgaver eller eventuelle cache-dataendringer i klyngen. Arrangementvarsler kan grupperes og sendes i grupper og i tide intervaller. Batching-varsler hjelper deg med å oppnå høy cacheytelse og lav ventetid.

Ignite tillater at de fleste datastrukturene fra java.util.concurrent-rammeverket kan brukes distribuert. For eksempel kan du legge til en kø med dobbelt ende (java.util.concurrent.BlockingDeque) på en node og avstemme den fra en annen node. Eller du kan ha en distribuert primærnøkkelgenerator, som vil garantere unikhet på alle noder.

Ignite distribuerte datastrukturer inkluderer støtte for disse standard Java APIene: Samtidig kart, distribuerte køer og sett, AtomicLong, AtomicSequence, AtomicReference og CountDownLatch.

Nøkkelintegrasjoner

Apache Spark. Apache Spark er en rask, generell motor for databehandling i stor skala. Ignite og Spark er komplementære databehandlingsløsninger i minnet. De kan brukes sammen i mange tilfeller for å oppnå overlegen ytelse og funksjonalitet.

Apache Spark og Apache Ignite adresserer noe forskjellige brukstilfeller og konkurrerer sjelden om samme oppgave. Tabellen nedenfor skisserer noen av hovedforskjellene.

 
 Apache SparkApache Ignite
DatalagringLaster inn data for behandling fra ekstern lagring, vanligvis diskbasert, og kaster data når behandlingen er ferdig. Ingen datalagring.Tilbyr en distribuert nøkkelverdilager i minnet (distribuert cache eller datanett) med ACID-transaksjoner og SQL-spørringsfunksjoner. Lagrer data i minnet og kan skrive gjennom til en underliggende database.
OLAP / OLTPFor ikke-transaksjonelle, skrivebeskyttede data, så de brukes til OLAP. Gnist elastiske distribuerte datasett (RDD) støtter ikke mutasjon på stedet.Støtter ikke-transaksjonsmessige (OLAP) nyttelaster, samt full ACID-kompatible transaksjoner (OLTP).
DatatyperBasert på RDD. Fungerer bare på datadrevne nyttelaster.Støtter fullt ut rene beregningsnyttelaster (HPC / MPP) som kan være "dataløse".

Apache Spark tilbyr ikke delt lagring, så data fra HDFS eller annen disklagring må lastes inn i Spark for behandling. Staten kan bare overføres fra Spark-jobb til jobb ved å lagre de behandlede dataene i ekstern lagring. Ignite kan dele gnisttilstand direkte i minnet uten å lagre tilstanden på disken.

En av hovedintegrasjonene for Ignite and Spark er Apache Ignite Shared RDD API. Ignite RDDs er i det vesentlige omslag rundt Ignite-cacher som kan distribueres direkte i utførelsen av Spark-jobber. Ignite RDD kan også brukes med hurtigbuffermønsteret, der Ignite-klynger distribueres separat fra Spark, men fortsatt i minnet. Data er fremdeles tilgjengelig ved hjelp av Spark RDD APIer.

Spark støtter en ganske rik SQL-syntaks, men den støtter ikke dataindeksering, så den må gjøre fulle skanninger hele tiden. Spark-spørsmål kan ta minutter, selv på moderat små datasett. Ignite støtter SQL-indekser, noe som resulterer i mye raskere spørsmål, så bruk av Spark med Ignite kan akselerere Spark SQL mer enn 1000 ganger. Resultatsettet som returneres av Ignite Shared RDDs samsvarer også med Spark Dataframe API, slik at det kan analyseres videre ved hjelp av standard Spark dataframes. Både Spark og Ignite integreres naturlig med Apache YARN og Apache Mesos, så det er lettere å bruke dem sammen.

Når du arbeider med filer i stedet for RDD-er, er det fortsatt mulig å dele tilstanden mellom Spark-jobber og applikasjoner ved hjelp av Ignite In-Memory File System (IGFS). IGFS implementerer Hadoop FileSystem API og kan distribueres som et eget Hadoop-filsystem, akkurat som HDFS. Tenn plugger inn i ethvert Hadoop- eller Spark-miljø. IGFS kan brukes med null kodeendringer på plug-and-play-måte.

Apache Cassandra. Apache Cassandra kan fungere som en høyytelsesløsning for strukturerte spørsmål. Men dataene i Cassandra skal modelleres slik at hvert forhåndsdefinerte spørsmål resulterer i en rad henting. Dermed må du vite hvilke spørsmål som kreves før du modellerer dataene.