Programmering

Slå big databehandling op med Apache Ignite

Apache Ignite er en computerplatform i hukommelsen, der kan indsættes problemfrit mellem en brugers applikationslag og datalag. Apache Ignite indlæser data fra det eksisterende diskbaserede lag i RAM og forbedrer ydeevnen med op til seks størrelsesordener (1 million gange).

Datakapaciteten i hukommelsen kan let skaleres til at håndtere petabytes af data ved blot at tilføje flere noder til klyngen. Yderligere understøttes både ACID-transaktioner og SQL-forespørgsler. Ignite leverer ydeevne, skala og omfattende kapaciteter langt ud over, hvad traditionelle in-memory databaser, in-memory datagitre og andre in-memory-baserede punktløsninger kan tilbyde af sig selv.

Apache Ignite kræver ikke, at brugerne ripper og udskifter deres eksisterende databaser. Det fungerer med RDBMS, NoSQL og Hadoop datalagre. Apache Ignite muliggør højtydende transaktioner, streaming i realtid og hurtig analyse i et enkelt, omfattende dataadgangs- og behandlingslag. Det bruger en distribueret, massiv parallel arkitektur på økonomisk overkommelig råvare til at drive eksisterende eller nye applikationer. Apache Ignite kan køre lokaler, på cloudplatforme som AWS og Microsoft Azure eller i et hybridmiljø.

Apache Ignite unified API understøtter SQL, C ++, .Net, Java, Scala, Groovy, PHP og Node.js. Den samlede API forbinder applikationer i skyskala med flere datalagre, der indeholder strukturerede, semistrukturerede og ustrukturerede data. Det tilbyder et højtydende datamiljø, der giver virksomheder mulighed for at behandle fulde ACID-transaktioner og generere værdifuld indsigt fra realtids-, interaktive- og batchforespørgsler.

Brugere kan holde deres eksisterende RDBMS på plads og implementere Apache Ignite som et lag mellem det og applikationslaget. Apache Ignite integreres automatisk med Oracle, MySQL, Postgres, DB2, Microsoft SQL Server og andre RDBMSer. Systemet genererer automatisk applikationsdomænemodellen baseret på skemadefinitionen af ​​den underliggende database og indlæser derefter dataene. In-memory databaser giver typisk kun en SQL-grænseflade, mens Ignite understøtter en bredere gruppe af adgangs- og behandlingsparadigmer ud over ANSI SQL. Apache Ignite understøtter nøgle- / værdilagre, SQL-adgang, MapReduce, HPC / MPP-behandling, streaming / CEP-behandling, klyngedannelse og Hadoop-acceleration i en enkelt integreret computerhukommelsesplatform.

GridGain Systems donerede den originale kode til Apache Ignite til Apache Software Foundation i anden halvdel af 2014. Apache Ignite blev hurtigt forfremmet fra et inkubationsprojekt til et Apache-projekt på øverste niveau i 2015. I andet kvartal af 2016 var Apache Ignite downloadet næsten 200.000 gange. Det bruges af organisationer over hele verden.

Arkitektur

Apache Ignite er JVM-baseret distribueret middleware baseret på en homogen implementering af klyngetopologi, der ikke kræver separate server- og klientnoder. Alle noder i en Ignite-klynge er ens, og de kan spille en hvilken som helst logisk rolle pr. Krav til runtime-applikation.

Et SPI-design (service provider interface) er kernen i Apache Ignite. Det SPI-baserede design gør alle interne komponenter i Ignite fuldt tilpasselige og tilslutte. Dette muliggør en enorm konfigurerbarhed af systemet med tilpasningsevne til enhver eksisterende eller fremtidig serverinfrastruktur.

Apache Ignite yder også direkte support til parallelisering af distribuerede beregninger baseret på fork-join, MapReduce eller MPP-stil behandling. Ignite bruger distribuerede parallelle beregninger i udstrakt grad, og de er fuldt eksponeret på API-niveau for brugerdefineret funktionalitet.

Nøglefunktioner

In-memory datagitter. Apache Ignite inkluderer et datagitter i hukommelsen, der håndterer distribueret datahåndtering i hukommelsen, herunder ACID-transaktioner, failover, avanceret belastningsbalancering og omfattende SQL-support. Ignite-datagitteret er et distribueret, objektbaseret ACID-transaktionsnøgleværdilager i hukommelsen. I modsætning til traditionelle databasestyringssystemer, der bruger disk som deres primære lagringsmekanisme, lagrer Ignite data i hukommelsen. Ved at bruge hukommelse snarere end disk er Apache Ignite op til 1 million gange hurtigere end traditionelle databaser.

SQL-understøttelse. Apache Ignite understøtter fri form ANSI SQL-99-kompatible forespørgsler med næsten ingen begrænsninger. Ignite kan bruge enhver SQL-funktion, aggregering eller gruppering, og den understøtter distribuerede, ikke-placerede SQL-sammenføjninger og kryds-cache-sammenføjninger. Ignite understøtter også begrebet feltforespørgsler for at minimere omkostninger til netværk og serialisering.

In-memory beregningsgitter. Apache Ignite inkluderer et beregningsgitter, der muliggør parallel, hukommelsesbehandling af CPU-intensive eller andre ressourceintensive opgaver såsom traditionel HPC, MPP, fork-join og MapReduce-behandling. Der ydes også support til standard Java ExecutorService asynkron behandling.

Servicenet i hukommelsen. Apache Ignite-servicenettet giver fuld kontrol over tjenester, der er implementeret i klyngen. Brugere kan kontrollere, hvor mange serviceinstanser der skal distribueres på hver klynge node, hvilket sikrer korrekt implementering og fejltolerance. Servicenettet garanterer kontinuerlig tilgængelighed af alle implementerede tjenester i tilfælde af knudepunkter. Det understøtter også automatisk implementering af flere forekomster af en tjeneste, af en tjeneste som en singleton og af tjenester ved start af node.

Streaming i hukommelsen. Strømbehandling i hukommelsen adresserer en stor familie af applikationer, hvor traditionelle behandlingsmetoder og diskbaseret lagring, såsom diskbaserede databaser eller filsystemer, er utilstrækkelige. Disse applikationer udvider grænserne for traditionel databehandlingsinfrastruktur.

Streaming-support giver brugerne mulighed for at forespørge på rullende vinduer med indgående data. Dette giver brugerne mulighed for at besvare spørgsmål som "Hvad er de 10 mest populære produkter i løbet af den sidste time?" eller "Hvad er gennemsnitsprisen i en bestemt produktkategori de sidste 12 timer?"

En anden almindelig anvendelse af strømbehandling er pipelining af en distribueret begivenhedsworkflow. Da begivenheder kommer ind i systemet i høje hastigheder, er behandlingen af ​​begivenheder opdelt i flere faser, som hver især skal dirigeres korrekt inden for en klynge til behandling. Disse tilpassede begivenhedsarbejdsprocesser understøtter komplekse begivenhedsbehandling (CEP) applikationer.

Hadoop-acceleration i hukommelsen. Apache Ignite Accelerator til Hadoop muliggør hurtig databehandling i eksisterende Hadoop-miljøer via de værktøjer og teknologi, som en organisation allerede bruger.

Ignite i hukommelse Hadoop-acceleration er baseret på det første dual-mode, højtydende in-memory-filsystem, der er 100 procent kompatibel med Hadoop HDFS og en in-memory optimeret MapReduce-implementering. Levering af op til 100 gange hurtigere ydeevne, i hukommelse HDFS og i hukommelse MapReduce giver brugervenlige udvidelser til diskbaseret HDFS og traditionel MapReduce. Denne plug-and-play-funktion kræver minimal eller ingen integration. Det fungerer med enhver open source eller kommerciel version af Hadoop 1.x eller Hadoop 2.x, inklusive Cloudera, Hortonworks, MapR, Apache, Intel og AWS. Resultatet er op til 100 gange hurtigere ydeevne til MapReduce- og Hive-job.

Distribueret hukommelsesfilsystem. Et unikt træk ved Apache Ignite er Ignite File System (IGFS), som er et filsystemgrænseflade til data i hukommelsen. IGFS leverer lignende funktionalitet som Hadoop HDFS. Det inkluderer muligheden for at oprette et fuldt funktionelt filsystem i hukommelsen. IGFS er kernen i Apache Ignite In-Memory Accelerator til Hadoop.

Dataene fra hver fil opdeles på separate datablokke og lagres i cache. Data i hver fil kan tilgås med en standard Java-streaming-API. For hver del af filen kan en udvikler beregne en tilknytning og behandle filens indhold på tilsvarende noder for at undgå unødvendigt netværk.

Samlet API. Apache Ignite unified API understøtter en bred vifte af almindelige protokoller, som applikationslaget kan få adgang til data. Understøttede protokoller inkluderer SQL, Java, C ++, .Net, PHP, MapReduce, Scala, Groovy og Node.js. Ignite understøtter flere protokoller til klientforbindelse til Ignite-klynger, herunder Ignite Native Clients, REST / HTTP, SSL / TLS og Memcached.SQL.

Avanceret gruppering. Apache Ignite leverer en af ​​de mest sofistikerede klyngeteknologier på JVM'er. Ignite nodes kan automatisk opdage hinanden, hvilket hjælper med at skalere klyngen, når det er nødvendigt uden at skulle genstarte hele klyngen. Udviklere kan også drage fordel af Ignites hybrid cloud support, som giver brugerne mulighed for at etablere forbindelser mellem private skyer og offentlige skyer som AWS eller Microsoft Azure.

Yderligere funktioner. Apache Ignite giver højtydende clusterwide messaging-funktionalitet. Det giver brugerne mulighed for at udveksle data via publish-subscribe og direkte point-to-point kommunikationsmodeller.

Funktionen med distribuerede begivenheder i Ignite giver applikationer mulighed for at modtage underretninger om cachehændelser, der opstår i et distribueret gittermiljø. Udviklere kan bruge denne funktionalitet til at blive underrettet om udførelsen af ​​fjernopgaver eller ændringer i cachedata i klyngen. Begivenhedsmeddelelser kan grupperes og sendes i batcher og i rette tid. Batch-notifikationer hjælper med at opnå høj cache-ydeevne og lav latenstid.

Ignite giver mulighed for, at de fleste datastrukturer fra java.util.concurrent-rammen kan bruges distribueret. For eksempel kan du føje til en kø med dobbelt ende (java.util.concurrent.BlockingDeque) på en node og afstemme den fra en anden node. Eller du kan have en distribueret primærnøglegenerator, som garanterer unikhed på alle noder.

Ignite distribuerede datastrukturer inkluderer support til disse standard Java API'er: Samtidig kort, distribuerede køer og sæt, AtomicLong, AtomicSequence, AtomicReference og CountDownLatch.

Nøgleintegrationer

Apache Spark. Apache Spark er en hurtig motor til generel anvendelse til databehandling i stor skala. Ignite og Spark er komplementære computeløsninger i hukommelsen. De kan bruges sammen i mange tilfælde for at opnå overlegen ydeevne og funktionalitet.

Apache Spark og Apache Ignite adresserer noget forskellige brugssager og konkurrerer sjældent om den samme opgave. Tabellen nedenfor skitserer nogle af de vigtigste forskelle.

 
 Apache SparkApache Ignite
DatalagringIndlæser data til behandling fra eksternt lager, normalt diskbaseret, og kasserer data, når behandlingen er færdig. Ingen datalagring.Leverer en distribueret nøgleværdilager i hukommelsen (distribueret cache eller datagitter) med ACID-transaktioner og SQL-forespørgsel. Gemmer data i hukommelsen og kan skrive igennem til en underliggende database.
OLAP / OLTPTil ikke-transaktionelle, skrivebeskyttede data, så de bruges til OLAP. Gnistfjedrende distribuerede datasæt (RDD'er) understøtter ikke mutation på stedet.Understøtter ikke-transaktionelle (OLAP) nyttelast samt fuldt ACID-kompatible transaktioner (OLTP).
DatatyperBaseret på RDD'er. Fungerer kun på datadrevne nyttelast.Understøtter fuldt ud rene beregningsnyttelast (HPC / MPP), der kan være "dataløse."

Apache Spark leverer ikke delt lager, så data fra HDFS eller anden disklagring skal indlæses i Spark til behandling. Tilstand kan kun overføres fra Spark-job til job ved at gemme de behandlede data tilbage i eksternt lager. Ignite kan dele gnisttilstand direkte i hukommelsen uden at gemme tilstanden på disken.

En af de vigtigste integrationer for Ignite og Spark er Apache Ignite Shared RDD API. Ignite RDD'er er i det væsentlige wrappers omkring Ignite caches, der kan implementeres direkte inden for udførelse af Spark-job. Ignite RDDs kan også bruges med cache-side-mønsteret, hvor Ignite-klynger distribueres separat fra Spark, men stadig i hukommelsen. Der er stadig adgang til dataene ved hjælp af Spark RDD API'er.

Spark understøtter en ret rig SQL-syntaks, men den understøtter ikke dataindeksering, så den skal udføre fulde scanninger hele tiden. Sparkforespørgsler kan tage minutter, selv på moderat små datasæt. Ignite understøtter SQL-indekser, hvilket resulterer i meget hurtigere forespørgsler, så brug af Spark med Ignite kan fremskynde Spark SQL mere end 1.000 gange. Resultatsættet returneret af Ignite Shared RDD'er overholder også Spark Dataframe API, så det kan analyseres yderligere ved hjælp af standard Spark dataframes. Både Spark og Ignite integreres naturligt med Apache YARN og Apache Mesos, så det er lettere at bruge dem sammen.

Når du arbejder med filer i stedet for RDD'er, er det stadig muligt at dele tilstand mellem Spark-job og applikationer ved hjælp af Ignite In-Memory File System (IGFS). IGFS implementerer Hadoop FileSystem API og kan implementeres som et native Hadoop-filsystem, nøjagtigt som HDFS. Tænd stikkene indbygget i ethvert Hadoop- eller Spark-miljø. IGFS kan bruges med nul kodeændringer på plug-and-play måde.

Apache Cassandra. Apache Cassandra kan fungere som en højtydende løsning til strukturerede forespørgsler. Men dataene i Cassandra skal modelleres således, at hver foruddefineret forespørgsel resulterer i en række hentning. Således skal du vide, hvilke forespørgsler der kræves, før du modellerer dataene.