Apache Ignite - Apache Ignite
| Autori originali | Sisteme GridGain |
|---|---|
| Dezvoltatori | Apache Software Foundation |
| Eliberarea inițială | 24 martie 2015 |
| Versiune stabila | 2.10.0 / 15 martie 2021
|
| Previzualizare lansare | 3.0.0 (alfa 2) / 29 iunie 2021
|
| Repertoriu | Aprindeți depozitul |
| Scris in | Java , C # , C ++ , SQL |
| Sistem de operare | Cross-platform |
| Platformă | IA-32 , x86-64 , PowerPC , SPARC , platformă Java , .NET Framework |
| Tip | Baza de date , platforma de calcul |
| Licență | Licență Apache 2.0 |
| Site-ul web | aprinde |
Apache Ignite este o bază de date distribuită pentru calcul de înaltă performanță cu viteză în memorie.
Ignite a fost deschis de GridGain Systems la sfârșitul anului 2014 și a fost acceptat în programul Apache Incubator în același an. Proiectul Ignite a absolvit pe 18 septembrie 2015.
Baza de date Apache Ignite utilizează RAM ca nivel implicit de stocare și procesare, aparținând astfel clasei de platforme de calcul în memorie . Nivelul de disc este opțional, dar, odată activat, va păstra setul de date complet, în timp ce nivelul de memorie va memora în cache setul de date complet sau parțial în funcție de capacitatea sa.
Indiferent de API-ul utilizat, datele din Ignite sunt stocate sub formă de perechi cheie-valoare. Componenta bazei de date scalează orizontal, distribuind perechi cheie-valoare în cluster, astfel încât fiecare nod să dețină o porțiune din setul de date global. Datele sunt reechilibrate automat ori de câte ori un nod este adăugat sau eliminat din cluster.
Pe lângă fundația sa distribuită, Apache Ignite acceptă o varietate de API-uri, inclusiv API-uri cheie-valoare compatibile JCache, SQL ANSI-99 cu îmbinări, tranzacții ACID , precum și calcule similare MapReduce .
Clusterul Apache Ignite poate fi implementat la fața locului pe un hardware de marfă, în cloud (de exemplu, Microsoft Azure , AWS , Google Compute Engine ) sau într-un mediu containerizat și de aprovizionare, cum ar fi Kubernetes , Docker , Apache Mesos , VMWare .
Clustering
Componenta de clusterizare Apache Ignite se bazează pe arhitectura nimic partajat . Nodurile sunt împărțite în două categorii principale - server și client. Nodurile de server sunt unități de stocare și de calcul ale clusterului care dețin atât date, cât și indici și procesează cererile primite împreună cu calculele. Nodurile de server sunt, de asemenea, cunoscute sub numele de noduri de date.
Nodurile client sunt puncte de conexiune de la aplicații și servicii la baza de date distribuită reprezentată ca un cluster de noduri de server. Nodurile clientului sunt de obicei încorporate în codul aplicației scrise în Java , C # sau C ++ care au dezvoltate biblioteci speciale.
În plus, Apache Ignite oferă drivere ODBC , JDBC și REST ca o modalitate de a lucra cu baza de date din alte limbaje sau instrumente de programare. Driverele utilizează fie noduri client, fie conexiuni de socket de nivel scăzut intern pentru a comunica clusterului.
Partiționare și replicare
Baza de date Ignite organizează date sub formă de perechi cheie-valoare în „cache” distribuite (noțiunea de cache este utilizată din motive istorice, deoarece inițial, baza de date suporta nivelul de memorie). În general, fiecare cache reprezintă un tip de entitate, cum ar fi un angajat sau o organizație.
Fiecare cache este împărțit într-un set fix de „partiții” care sunt distribuite uniform între nodurile cluster folosind algoritmul de hash de întâlnire . Există întotdeauna o copie primară și zero sau mai multe copii de rezervă ale unei partiții. Numărul de copii este configurat cu un parametru al factorului de replicare. Dacă este configurat modul de replicare completă, atunci fiecare nod de cluster va stoca copia unei partiții. Partițiile sunt reechilibrate automat dacă un nod este adăugat sau eliminat din cluster pentru a realiza o distribuție uniformă a datelor și a răspândi volumul de lucru.
Perechile cheie-valoare sunt păstrate în partiții. Apache Ignite mapează o pereche la o partiție luând valoarea cheii și trecând-o la o funcție hash specială .
Arhitectura memoriei
Arhitectura de memorie din Apache Ignite constă din două niveluri de stocare și se numește „memorie durabilă”. Pe plan intern, folosește paginarea pentru gestionarea spațiului de memorie și referința datelor, similar cu memoria virtuală a sistemelor precum Unix . Cu toate acestea, o diferență semnificativă între arhitecturile de memorie durabilă și virtuală este că prima păstrează întotdeauna întregul set de date cu indexuri pe disc (presupunând că nivelul discului este activat), în timp ce memoria virtuală folosește discul când rămâne fără memorie RAM, numai în scop de schimb.
Primul nivel al arhitecturii de memorie, nivelul de memorie, păstrează datele și indexurile în RAM în afara heap-ului Java în așa-numitele „regiuni off-heap”. Regiunile sunt prealocate și gestionate singure de baza de date, ceea ce împiedică utilizarea heap-ului Java pentru nevoile de stocare, ca urmare, contribuind la evitarea pauzelor lungi de colectare a gunoiului. Regiunile sunt împărțite în pagini de dimensiuni fixe care stochează date, indici și metadate de sistem.
Apache Ignite este pe deplin operațional din nivelul de memorie, dar este întotdeauna posibil să se utilizeze al doilea nivel, nivelul discului, din motive de durabilitate . Baza de date vine cu propria sa persistență nativă și, în plus, poate folosi bazele de date RDBMS , NoSQL sau Hadoop ca nivel de disc.
Persistența nativă
Persistența nativă Apache Ignite este un magazin de discuri distribuit și puternic consistent care deține întotdeauna un superset de date și indexuri pe disc. Nivelul de memorie va memora în cache cât mai multe date în funcție de capacitatea sa. De exemplu, dacă există 1000 de intrări și nivelul de memorie se pot potrivi doar 300 dintre ele, atunci toate cele 1000 vor fi stocate pe disc și doar 300 vor fi stocate în memoria cache.
Persistența utilizează tehnica de înregistrare în avans (WAL) pentru păstrarea modificărilor imediate ale datelor pe disc. În fundal, magazinul rulează „procesul de verificare” care are ca scop copierea paginilor murdare din nivelul de memorie în fișierele de partiție. O pagină murdară este o pagină care este modificată în memorie cu modificarea înregistrată în WAL, dar care nu este scrisă într-un fișier de partiție respectiv. Punctul de verificare permite eliminarea segmentelor WAL învechite de-a lungul timpului și reduce timpul de repornire a clusterului redând doar acea parte a WAL care nu a fost aplicată fișierelor de partiție.
Persistența terților
Persistența nativă a devenit disponibilă începând cu versiunea 2.1. Înainte de aceasta, Apache Ignite suporta numai bazele de date terțe ca nivel de disc.
Apache Ignite poate fi configurat ca nivel de memorie în partea de sus a bazelor de date RDBMS , NoSQL sau Hadoop, accelerând acestea din urmă. Cu toate acestea, există unele limitări în comparație cu persistența nativă. De exemplu, interogările SQL vor fi executate numai pe datele din RAM, necesitând astfel preîncărcarea tuturor seturilor de date de pe disc în memorie în prealabil.
Schimbați spațiul
Atunci când utilizați stocarea de memorie pură, este posibil ca dimensiunea datelor să depășească dimensiunea fizică a RAM-ului, ducând la erori în afara memoriei (OOMEs). Pentru a evita acest lucru, abordarea ideală ar fi să permită Ignite persistence native sau să utilizeze persistence terță parte. Cu toate acestea, dacă nu doriți să utilizați persistența nativă sau terță parte, puteți activa swap-ul, caz în care Ignite in-memory data va fi mutat în spațiul de swap situat pe disc. Rețineți că Ignite nu oferă propria implementare a spațiului swap. În schimb, profită de funcționalitatea de schimb oferită de sistemul de operare (SO). Când spațiul de swap este activat, Ignites stochează date în fișiere cartografiate în memorie (MMF) al căror conținut va fi schimbat pe disc de către sistemul de operare în funcție de consumul actual de RAM
Coerență
Apache Ignite este o platformă puternic consistentă care implementează protocolul de comitere în două faze . Garanțiile de consistență sunt îndeplinite atât pentru nivelurile de memorie, cât și pentru disc. Tranzacțiile în Apache Ignite sunt compatibile cu ACID și pot acoperi mai multe noduri și cache-uri de cluster. Baza de date suportă modurile de concurenta pesimiste și optimiste, impas tranzacțiile -free și tehnici de detectare impas.
În scenariile în care garanțiile tranzacționale sunt opționale, Apache Ignite permite executarea interogărilor în modul atomic care oferă performanțe mai bune.
SQL distribuit
Apache Ignite poate fi accesat folosind API-urile SQL expuse prin driverele JDBC și ODBC și biblioteci native dezvoltate pentru limbaje de programare Java , C # , C ++ . Atât sintaxa limbajelor de manipulare a datelor, cât și definirea datelor sunt conforme cu specificațiile ANSI-99 .
Fiind o bază de date distribuită, Apache Ignite acceptă atât îmbinările distribuite colocate, cât și cele necolocate . Când datele sunt colocate, asocierile sunt executate pe datele locale ale nodurilor cluster, evitând deplasarea datelor prin rețea. Îmbinările necolocate pot muta seturile de date în jurul rețelei pentru a pregăti un set de rezultate consecvent.
Învățare automată
Apache Ignite oferă formare de învățare automată și funcționalități de deducție, precum și preprocesarea datelor și estimarea calității modelului. Suportă în mod nativ algoritmi de antrenament clasici, cum ar fi Regresia Liniară , Arborii de Decizie , Pădurea Aleatorie , Gradient Boosting , SVM , K-Means și altele. În plus, Apache Ignite are o integrare profundă cu TensorFlow . Această integrare permite instruirea rețelelor neuronale pe datele stocate în Apache Ignite într-un singur nod sau distribuite.
Ideea cheie a setului de instrumente Apache Ignite Machine Learning este abilitatea de a efectua instruire distribuită și inferență instantaneu fără transmisiuni masive de date. Se bazează pe abordarea MapReduce , rezistentă la eșecurile nodurilor și la reechilibrarea datelor, permite evitarea transferurilor de date, astfel încât să accelereze preprocesarea și formarea modelelor.