Storm atau Spark: Pilih senjata real-time Anda

Ide kecerdasan bisnis real-time telah ada sejak lama (lihat halaman Wikipedia tentang topik yang dimulai tahun 2006). Tetapi sementara orang telah membicarakan ide tersebut selama bertahun-tahun, saya belum melihat banyak perusahaan yang benar-benar merangkul visi tersebut, apalagi menyadari manfaat yang dimungkinkannya.

Setidaknya sebagian alasannya adalah kurangnya peralatan untuk mengimplementasikan BI dan analitik secara real time. Lingkungan pergudangan data tradisional sangat berorientasi pada operasi batch dengan latensi yang sangat tinggi, sangat mahal, atau keduanya.

Sejumlah platform open source yang kuat dan mudah digunakan telah muncul untuk mengubah ini. Dua yang paling menonjol adalah Apache Storm dan Apache Spark, yang menawarkan kemampuan pemrosesan waktu nyata ke lebih banyak pengguna potensial. Keduanya adalah proyek dalam Apache Software Foundation, dan meskipun kedua alat tersebut memberikan kemampuan yang tumpang tindih, masing-masing memiliki fitur dan peran yang berbeda untuk dimainkan.

Storm: Hadoop pemrosesan waktu nyata

Storm, kerangka kerja komputasi terdistribusi untuk pemrosesan aliran acara, dimulai sebagai proyek BackType, sebuah perusahaan intelijen pemasaran yang dibeli oleh Twitter pada tahun 2011. Twitter segera membuka proyek tersebut dan meletakkannya di GitHub, tetapi Storm akhirnya pindah ke Apache Incubator dan menjadi proyek tingkat atas Apache pada September 2014.

Storm terkadang disebut sebagai Hadoop pemrosesan waktu nyata. Dokumentasi Storm tampaknya setuju: "Storm membuatnya mudah untuk memproses aliran data tanpa batas secara andal, melakukan pemrosesan waktu nyata seperti yang dilakukan Hadoop untuk pemrosesan batch."

Untuk memenuhi tujuan ini, Storm dirancang untuk skalabilitas besar-besaran, mendukung toleransi kesalahan dengan pendekatan "gagal cepat, restart otomatis" untuk proses, dan menawarkan jaminan kuat bahwa setiap tupel akan diproses. Secara default, Storm menggunakan jaminan "setidaknya sekali" untuk pesan, tetapi juga menawarkan kemampuan untuk menerapkan pemrosesan "tepat sekali".

Storm ditulis terutama dalam Clojure dan dirancang untuk mendukung "spouts" kabel (pikirkan aliran masukan) dan "baut" (modul pemrosesan dan keluaran) bersama-sama sebagai grafik asiklik terarah (DAG) yang disebut topologi. Topologi badai berjalan pada cluster dan penjadwal Storm mendistribusikan pekerjaan ke node di sekitar cluster, berdasarkan konfigurasi topologi.

Anda dapat menganggap topologi secara kasar analog dengan pekerjaan MapReduce di Hadoop, kecuali bahwa fokus Storm pada pemrosesan waktu nyata, berbasis aliran, topologi default untuk berjalan selamanya atau hingga dihentikan secara manual. Setelah topologi dimulai, spouts membawa data ke dalam sistem dan menyerahkan data ke baut (yang mungkin pada gilirannya data tangan ke baut berikutnya) di mana pekerjaan komputasi utama dilakukan. Saat pemrosesan berlangsung, satu atau lebih baut dapat menulis data ke database atau sistem file, mengirim pesan ke sistem eksternal lain, atau membuat hasil penghitungan tersedia bagi pengguna.

Salah satu kekuatan ekosistem Storm adalah beragam spout yang tersedia khusus untuk menerima data dari semua jenis sumber. Meskipun Anda mungkin harus menulis spout khusus untuk aplikasi yang sangat terspesialisasi, ada kemungkinan besar Anda dapat menemukan cerat yang ada untuk berbagai sumber yang sangat besar - dari API streaming Twitter hingga Apache Kafka hingga broker JMS hingga segala sesuatu di antaranya.

Adaptor ada untuk membuatnya mudah diintegrasikan dengan sistem file HDFS, yang berarti Storm dapat dengan mudah beroperasi dengan Hadoop jika diperlukan. Kekuatan lain dari Storm adalah dukungannya untuk pemrograman multibahasa. Sementara Storm sendiri didasarkan pada Clojure dan berjalan pada JVM, spouts dan bolts dapat ditulis dalam hampir semua bahasa, termasuk bahasa non-JVM yang memanfaatkan protokol untuk berkomunikasi antar komponen menggunakan JSON melalui stdin / stdout.

Singkatnya, Storm adalah sistem open source yang sangat skalabel, cepat, dan toleran terhadap kesalahan untuk komputasi terdistribusi, dengan fokus khusus pada pemrosesan streaming. Storm unggul dalam pemrosesan acara dan komputasi inkremental, menghitung metrik bergulir secara real time melalui aliran data. Sementara Storm juga menyediakan primitif untuk mengaktifkan RPC terdistribusi generik dan secara teoritis dapat digunakan untuk merakit hampir semua pekerjaan komputasi terdistribusi, kekuatannya jelas adalah pemrosesan aliran peristiwa.

Spark: Pemrosesan terdistribusi untuk semua

Spark, proyek lain yang cocok untuk komputasi terdistribusi waktu nyata, dimulai sebagai proyek AMPLab di Universitas California di Berkeley sebelum bergabung dengan Apache Incubator dan akhirnya lulus sebagai proyek tingkat atas pada Februari 2014. Seperti Storm, Spark mendukung streaming pemrosesan berorientasi, tetapi ini lebih merupakan platform komputasi terdistribusi untuk tujuan umum.

Dengan demikian, Spark dapat dilihat sebagai pengganti potensial untuk fungsi MapReduce dari Hadoop, sementara Spark memiliki kemampuan untuk berjalan di atas klaster Hadoop yang ada, mengandalkan YARN untuk penjadwalan sumber daya. Selain Hadoop YARN, Spark dapat melapisi di atas Mesos untuk penjadwalan atau dijalankan sebagai cluster yang berdiri sendiri menggunakan penjadwal bawaannya. Perhatikan bahwa jika Spark tidak digunakan dengan Hadoop, beberapa jenis sistem file jaringan / terdistribusi (NFS, AFS, dan sebagainya) masih diperlukan jika berjalan di kluster, sehingga setiap node akan memiliki akses ke data pokok.

Spark ditulis dalam Scala dan, seperti Storm, mendukung pemrograman multibahasa, meskipun Spark menyediakan dukungan API khusus hanya untuk Scala, Java, dan Python. Spark tidak memiliki abstraksi spesifik dari "cerat", tetapi menyertakan adaptor untuk bekerja dengan data yang disimpan di berbagai sumber yang berbeda, termasuk file HDFS, Cassandra, HBase, dan S3.

Di mana Spark bersinar dalam dukungannya untuk beberapa paradigma pemrosesan dan pustaka pendukung. Ya, Spark mendukung model streaming, tetapi dukungan ini hanya disediakan oleh satu dari beberapa modul Spark, termasuk modul yang dibuat khusus untuk akses SQL, operasi grafik, dan pembelajaran mesin, bersama dengan pemrosesan streaming.

Spark juga menyediakan shell interaktif yang sangat berguna yang memungkinkan pembuatan prototipe cepat dan kotor serta analisis data eksplorasi secara real time menggunakan Scala atau Python API. Bekerja di shell interaktif, Anda dengan cepat melihat perbedaan utama lainnya antara Spark dan Storm: Spark memiliki lebih banyak ragam "fungsional", di mana bekerja dengan API lebih didorong dengan merangkai panggilan metode berurutan untuk menjalankan operasi primitif - sebagai kebalikan dari Model badai, yang cenderung didorong dengan membuat kelas dan mengimplementasikan antarmuka. Tidak ada pendekatan yang lebih baik atau lebih buruk, tetapi gaya yang Anda sukai dapat memengaruhi keputusan Anda tentang sistem mana yang lebih sesuai dengan kebutuhan Anda.

Seperti Storm, Spark dirancang untuk skalabilitas besar-besaran, dan tim Spark telah mendokumentasikan pengguna sistem yang menjalankan cluster produksi dengan ribuan node. Selain itu, Spark memenangkan kontes Daytona GraySort 2014 baru-baru ini, menghasilkan waktu terbaik untuk beban kerja yang memikul yang terdiri dari pengurutan 100TB data. Tim Spark juga mendokumentasikan operasi ETL Spark dengan beban kerja produksi dalam beberapa kisaran Petabyte.

Spark adalah platform komputasi terdistribusi open source yang cepat, dapat diskalakan, dan fleksibel, kompatibel dengan Hadoop dan Mesos, yang mendukung beberapa model komputasi, termasuk streaming, operasi grafik-sentris, akses SQL, dan pembelajaran mesin terdistribusi. Spark telah didokumentasikan dengan skala yang sangat baik dan, seperti Storm, adalah platform yang sangat baik untuk membangun analitik waktu nyata dan sistem intelijen bisnis.

Membuat keputusan Anda

Bagaimana Anda memilih antara Storm dan Spark?

Jika kebutuhan Anda terutama difokuskan pada pemrosesan aliran dan pemrosesan gaya CEP dan Anda memulai proyek greenfield dengan kluster yang dibuat khusus untuk proyek tersebut, saya mungkin akan menyukai Storm - terutama ketika ada spout Storm yang sesuai dengan persyaratan integrasi Anda. . Ini sama sekali bukan aturan yang keras dan cepat, tetapi faktor-faktor seperti itu setidaknya akan menyarankan dimulai dengan Storm.

Di sisi lain, jika Anda memanfaatkan cluster Hadoop atau Mesos yang ada dan / atau jika kebutuhan pemrosesan Anda melibatkan persyaratan substansial untuk pemrosesan grafik, akses SQL, atau pemrosesan batch, Anda mungkin ingin melihat Spark terlebih dahulu.

Faktor lain yang perlu dipertimbangkan adalah dukungan multibahasa dari kedua sistem. Misalnya, jika Anda perlu memanfaatkan kode yang ditulis dalam R atau bahasa lain yang tidak didukung oleh Spark, maka Storm memiliki keuntungan dari dukungan bahasa yang lebih luas. Dengan cara yang sama, jika Anda harus memiliki shell interaktif untuk eksplorasi data menggunakan panggilan API, Spark menawarkan fitur yang tidak dimiliki Storm.

Pada akhirnya, Anda mungkin ingin melakukan analisis mendetail dari kedua platform sebelum membuat keputusan akhir. Saya merekomendasikan menggunakan kedua platform untuk membangun bukti konsep kecil - kemudian jalankan tolok ukur Anda sendiri dengan beban kerja yang mencerminkan beban kerja yang Anda antisipasi sedekat mungkin sebelum sepenuhnya berkomitmen untuk keduanya.

Tentu saja, Anda tidak perlu membuat salah satu / atau keputusan. Bergantung pada beban kerja, infrastruktur, dan persyaratan Anda, Anda mungkin menemukan bahwa solusi ideal adalah campuran Storm dan Spark - bersama dengan alat lain seperti Kafka, Hadoop, Flume, dan sebagainya. Disitulah letak keindahan open source.

Rute mana pun yang Anda pilih, alat ini menunjukkan bahwa permainan BI real-time telah berubah. Opsi-opsi hebat yang dulunya hanya tersedia bagi segelintir orang elit kini berada dalam jangkauan sebagian besar, jika tidak semua, organisasi menengah hingga besar. Manfaatkan mereka.