Jalankan pemrosesan data besar dengan Apache Ignite

Apache Ignite adalah platform komputasi dalam memori yang dapat disisipkan secara mulus antara lapisan aplikasi pengguna dan lapisan data. Apache Ignite memuat data dari lapisan penyimpanan berbasis disk yang ada ke dalam RAM, meningkatkan kinerja sebanyak enam kali lipat (1 juta kali lipat).

Kapasitas data dalam memori dapat dengan mudah diskalakan untuk menangani petabyte data hanya dengan menambahkan lebih banyak node ke cluster. Selanjutnya, transaksi ACID dan kueri SQL didukung. Ignite menghadirkan kinerja, skala, dan kemampuan komprehensif yang jauh di atas dan melampaui apa yang dapat ditawarkan oleh database tradisional dalam memori, kisi data dalam memori, dan solusi titik berbasis memori lainnya.

Apache Ignite tidak mengharuskan pengguna untuk menyalin dan mengganti database yang ada. Ia bekerja dengan penyimpanan data RDBMS, NoSQL, dan Hadoop. Apache Ignite memungkinkan transaksi berkinerja tinggi, streaming waktu nyata, dan analitik cepat dalam satu lapisan akses dan pemrosesan data yang komprehensif. Ia menggunakan arsitektur paralel masif yang terdistribusi pada perangkat keras komoditas yang terjangkau untuk mendukung aplikasi yang sudah ada atau yang baru. Apache Ignite dapat berjalan di lokasi, di platform cloud seperti AWS dan Microsoft Azure, atau di lingkungan hybrid.

Apache Ignite unified API mendukung SQL, C ++, .Net, Java, Scala, Groovy, PHP, dan Node.js. API terpadu menghubungkan aplikasi skala cloud dengan beberapa penyimpanan data yang berisi data terstruktur, semi-terstruktur, dan tidak terstruktur. Ini menawarkan lingkungan data berkinerja tinggi yang memungkinkan perusahaan memproses transaksi ACID penuh dan menghasilkan wawasan berharga dari kueri seketika, interaktif, dan batch.

Pengguna dapat mempertahankan RDBMS yang ada dan menerapkan Apache Ignite sebagai lapisan antara RDBMS dan lapisan aplikasi. Apache Ignite secara otomatis terintegrasi dengan Oracle, MySQL, Postgres, DB2, Microsoft SQL Server, dan RDBMS lainnya. Sistem secara otomatis membuat model domain aplikasi berdasarkan definisi skema database yang mendasarinya, lalu memuat datanya. Database dalam memori biasanya hanya menyediakan antarmuka SQL, sedangkan Ignite mendukung kelompok paradigma akses dan pemrosesan yang lebih luas selain ANSI SQL. Apache Ignite mendukung penyimpanan kunci / nilai, akses SQL, MapReduce, pemrosesan HPC / MPP, pemrosesan streaming / CEP, pengelompokan, dan akselerasi Hadoop dalam satu platform komputasi dalam memori terintegrasi.

GridGain Systems mendonasikan kode asli untuk Apache Ignite ke Apache Software Foundation pada paruh kedua tahun 2014. Apache Ignite dengan cepat dipromosikan dari proyek inkubasi menjadi proyek Apache tingkat atas pada tahun 2015. Pada kuartal kedua tahun 2016, Apache Ignite menjadi diunduh hampir 200.000 kali. Ini digunakan oleh organisasi di seluruh dunia.

Arsitektur

Apache Ignite adalah middleware terdistribusi berbasis JVM yang didasarkan pada implementasi topologi cluster homogen yang tidak memerlukan node server dan klien terpisah. Semua node dalam cluster Ignite adalah sama, dan mereka dapat memainkan peran logis apa pun sesuai persyaratan aplikasi runtime.

Desain antarmuka penyedia layanan (SPI) merupakan inti dari Apache Ignite. Desain berbasis SPI membuat setiap komponen internal Ignite dapat disesuaikan sepenuhnya dan dapat dicolokkan. Hal ini memungkinkan konfigurasi sistem yang luar biasa, dengan kemampuan beradaptasi dengan infrastruktur server yang ada atau yang akan datang.

Apache Ignite juga menyediakan dukungan langsung untuk paralelisasi komputasi terdistribusi berdasarkan pemrosesan fork-join, MapReduce, atau MPP. Ignite menggunakan komputasi paralel terdistribusi secara ekstensif, dan mereka sepenuhnya terpapar di level API untuk fungsionalitas yang ditentukan pengguna.

Fitur utama

Kisi data dalam memori. Apache Ignite menyertakan kisi data dalam memori yang menangani manajemen data dalam memori terdistribusi, termasuk transaksi ACID, failover, load balancing lanjutan, dan dukungan SQL yang ekstensif. Kisi data Ignite adalah penyimpanan nilai kunci dalam memori, berbasis objek, ACID transaksional. Berbeda dengan sistem manajemen basis data tradisional, yang menggunakan disk sebagai mekanisme penyimpanan utama mereka, Ignite menyimpan data dalam memori. Dengan memanfaatkan memori daripada disk, Apache Ignite hingga 1 juta kali lebih cepat daripada database tradisional.

Dukungan SQL. Apache Ignite mendukung kueri yang sesuai ANSI SQL-99 bentuk bebas dengan hampir tidak ada batasan. Ignite dapat menggunakan fungsi, agregasi, atau pengelompokan SQL apa pun, dan mendukung gabungan SQL yang tidak terkolokasi dan terdistribusi serta gabungan lintas cache. Ignite juga mendukung konsep field queries untuk membantu meminimalkan overhead jaringan dan serialisasi.

Kisi komputasi dalam memori. Apache Ignite menyertakan grid komputasi yang memungkinkan pemrosesan paralel dalam memori dari tugas intensif CPU atau tugas intensif sumber daya lainnya seperti pemrosesan HPC, MPP, fork-join, dan MapReduce tradisional. Dukungan juga disediakan untuk pemrosesan asinkron Java ExecutorService standar.

Kisi layanan dalam memori. Kisi layanan Apache Ignite memberikan kontrol penuh atas layanan yang diterapkan di kluster. Pengguna dapat mengontrol berapa banyak contoh layanan yang harus diterapkan pada setiap node cluster, memastikan penerapan yang tepat dan toleransi kesalahan. Jaringan layanan menjamin ketersediaan berkelanjutan dari semua layanan yang diterapkan jika terjadi kegagalan node. Ini juga mendukung penyebaran otomatis beberapa contoh layanan, layanan sebagai tunggal, dan layanan pada permulaan node.

Streaming dalam memori. Pemrosesan aliran dalam memori menangani keluarga besar aplikasi yang metode pemrosesan tradisional dan penyimpanan berbasis disk, seperti database atau sistem file berbasis disk, tidak memadai. Aplikasi ini memperluas batasan infrastruktur pemrosesan data tradisional.

Dukungan streaming memungkinkan pengguna untuk menanyakan jendela bergulir dari data yang masuk. Ini memungkinkan pengguna untuk menjawab pertanyaan seperti "Apa 10 produk paling populer selama satu jam terakhir?" atau "Berapa harga rata-rata dalam kategori produk tertentu selama 12 jam terakhir?"

Kasus penggunaan pemrosesan aliran umum lainnya adalah pipelining alur kerja peristiwa terdistribusi. Saat peristiwa masuk ke sistem dengan kecepatan tinggi, pemrosesan peristiwa dibagi menjadi beberapa tahap, yang masing-masing harus diarahkan dengan benar dalam kluster untuk diproses. Alur kerja peristiwa yang dapat disesuaikan ini mendukung aplikasi pemrosesan peristiwa kompleks (CEP).

Akselerasi Hadoop dalam memori. Apache Ignite Accelerator untuk Hadoop memungkinkan pemrosesan data yang cepat di lingkungan Hadoop yang ada melalui alat dan teknologi yang sudah digunakan organisasi.

Akselerasi Hadoop dalam memori Ignite didasarkan pada sistem file dalam memori mode ganda berkinerja tinggi yang 100 persen kompatibel dengan Hadoop HDFS dan implementasi MapReduce yang dioptimalkan dalam memori. Memberikan kinerja hingga 100 kali lebih cepat, HDFS dalam memori dan MapReduce dalam memori menyediakan ekstensi yang mudah digunakan untuk HDFS berbasis disk dan MapReduce tradisional. Fitur plug-and-play ini membutuhkan minimal atau tanpa integrasi. Ia bekerja dengan sumber terbuka atau versi komersial Hadoop 1.x atau Hadoop 2.x, termasuk Cloudera, Hortonworks, MapR, Apache, Intel, dan AWS. Hasilnya adalah kinerja 100 kali lipat lebih cepat untuk pekerjaan MapReduce dan Hive.

Sistem file dalam memori yang terdistribusi. Fitur unik Apache Ignite adalah Ignite File System (IGFS), yang merupakan antarmuka sistem file ke data dalam memori. IGFS memberikan fungsionalitas yang mirip dengan Hadoop HDFS. Ini mencakup kemampuan untuk membuat sistem file yang berfungsi penuh dalam memori. IGFS adalah inti dari Apache Ignite In-Memory Accelerator untuk Hadoop.

Data dari setiap file dipisahkan pada blok data terpisah dan disimpan dalam cache. Data di setiap file dapat diakses dengan API streaming Java standar. Untuk setiap bagian file, pengembang dapat menghitung afinitas dan memproses konten file pada node yang sesuai untuk menghindari jaringan yang tidak perlu.

API Terpadu. API terpadu Apache Ignite mendukung berbagai macam protokol umum untuk lapisan aplikasi untuk mengakses data. Protokol yang didukung termasuk SQL, Java, C ++, .Net, PHP, MapReduce, Scala, Groovy, dan Node.js. Ignite mendukung beberapa protokol untuk konektivitas klien ke cluster Ignite, termasuk Ignite Native Clients, REST / HTTP, SSL / TLS, dan Memcached.SQL.

Pengelompokan lanjutan. Apache Ignite menyediakan salah satu teknologi pengelompokan paling canggih di JVM. Node Ignite dapat secara otomatis menemukan satu sama lain, yang membantu menskalakan cluster saat diperlukan tanpa harus memulai ulang seluruh cluster. Pengembang juga dapat memanfaatkan dukungan cloud hybrid Ignite, yang memungkinkan pengguna membuat koneksi antara cloud pribadi dan cloud publik seperti AWS atau Microsoft Azure.

Fitur tambahan. Apache Ignite menyediakan fungsionalitas perpesanan seluruh klaster berkinerja tinggi. Ini memungkinkan pengguna untuk bertukar data melalui model komunikasi publish-subscribe dan point-to-point langsung.

Fungsionalitas peristiwa terdistribusi di Ignite memungkinkan aplikasi menerima pemberitahuan tentang peristiwa cache yang terjadi di lingkungan grid terdistribusi. Pengembang dapat menggunakan fungsi ini untuk diberi tahu tentang pelaksanaan tugas jarak jauh atau perubahan data cache apa pun dalam kluster. Pemberitahuan acara dapat dikelompokkan dan dikirim dalam batch dan pada interval waktu yang tepat. Pemberitahuan batch membantu mencapai kinerja cache tinggi dan latensi rendah.

Ignite memungkinkan sebagian besar struktur data dari framework java.util.concurrent untuk digunakan secara terdistribusi. Misalnya, Anda dapat menambahkan antrean berujung ganda (java.util.concurrent.BlockingDeque) pada satu node dan mengumpulkannya dari node lain. Atau Anda dapat memiliki generator kunci primer terdistribusi, yang akan menjamin keunikan di semua node.

Struktur data terdistribusi Ignite menyertakan dukungan untuk Java API standar berikut: Peta serentak, antrean dan kumpulan terdistribusi, AtomicLong, AtomicSequence, AtomicReference, dan CountDownLatch.

Integrasi kunci

Apache Spark. Apache Spark adalah mesin tujuan umum yang cepat untuk pemrosesan data skala besar. Ignite dan Spark adalah solusi komputasi dalam memori yang saling melengkapi. Mereka dapat digunakan bersama dalam banyak hal untuk mencapai kinerja dan fungsionalitas yang unggul.

Apache Spark dan Apache Ignite menangani kasus penggunaan yang agak berbeda dan jarang bersaing untuk tugas yang sama. Tabel di bawah menguraikan beberapa perbedaan utama.

 
  Apache Spark Apache Ignite
Retensi data Memuat data untuk diproses dari penyimpanan eksternal, biasanya berbasis disk, dan membuang data saat pemrosesan selesai. Tidak ada penyimpanan data. Menyediakan penyimpanan nilai kunci dalam memori (cache atau kisi data terdistribusi) dengan transaksi ACID dan kemampuan kueri SQL. Mempertahankan data dalam memori dan dapat menulis ke database yang mendasarinya.
OLAP / OLTP Untuk data nontransaksional, read-only, sehingga digunakan untuk OLAP. Spark set data terdistribusi (RDD) yang tangguh tidak mendukung mutasi di tempat. Mendukung muatan nontransaksional (OLAP), serta transaksi yang sepenuhnya sesuai dengan ACID (OLTP).
Tipe data Berdasarkan RDD. Hanya berfungsi pada payload berdasarkan data. Mendukung sepenuhnya muatan komputasi murni (HPC / MPP) yang dapat "tanpa data".

Apache Spark tidak menyediakan penyimpanan bersama, jadi data dari HDFS atau penyimpanan disk lainnya harus dimuat ke Spark untuk diproses. Status dapat diteruskan dari tugas Spark ke pekerjaan hanya dengan menyimpan data yang diproses kembali ke penyimpanan eksternal. Ignite dapat membagikan status Spark langsung di memori, tanpa menyimpan status ke disk.

Salah satu integrasi utama untuk Ignite dan Spark adalah Apache Ignite Shared RDD API. RDD Ignite pada dasarnya adalah pembungkus di sekitar cache Ignite yang dapat diterapkan langsung di dalam menjalankan pekerjaan Spark. RDD Ignite juga dapat digunakan dengan pola selain cache, di mana kluster Ignite di-deploy secara terpisah dari Spark, tetapi masih dalam memori. Data tersebut masih diakses menggunakan Spark RDD API.

Spark mendukung sintaks SQL yang cukup kaya, tetapi tidak mendukung pengindeksan data, sehingga harus melakukan pemindaian penuh sepanjang waktu. Kueri percikan mungkin membutuhkan waktu beberapa menit bahkan pada kumpulan data yang cukup kecil. Ignite mendukung indeks SQL, menghasilkan kueri yang jauh lebih cepat, jadi menggunakan Spark dengan Ignite dapat mempercepat Spark SQL lebih dari 1.000 kali lipat. Kumpulan hasil yang dikembalikan oleh Ignite Shared RDDs juga sesuai dengan Spark Dataframe API, sehingga dapat dianalisis lebih lanjut menggunakan dataframe Spark standar. Baik Spark dan Ignite terintegrasi secara native dengan Apache YARN dan Apache Mesos, jadi lebih mudah untuk menggunakannya bersamaan.

Saat bekerja dengan file alih-alih RDD, masih dimungkinkan untuk berbagi status antara pekerjaan Spark dan aplikasi menggunakan Ignite In-Memory File System (IGFS). IGFS mengimplementasikan API FileSystem Hadoop dan dapat digunakan sebagai sistem file Hadoop asli, persis seperti HDFS. Nyalakan steker secara native ke lingkungan Hadoop atau Spark. IGFS dapat digunakan tanpa perubahan kode dalam mode plug-and-play.

Apache Cassandra. Apache Cassandra dapat berfungsi sebagai solusi berkinerja tinggi untuk kueri terstruktur. Tetapi data di Cassandra harus dimodelkan sedemikian rupa sehingga setiap kueri yang telah ditentukan menghasilkan dalam pengambilan satu baris. Dengan demikian, Anda harus mengetahui kueri apa yang akan diperlukan sebelum memodelkan data.