Punya dengan Apache Storm? Heron menukik untuk menyelamatkan

Tahun lalu, Twitter menjatuhkan dua bom. Pertama, tidak lagi menggunakan Apache Storm dalam produksi. Kedua, telah menggantinya dengan sistem pemrosesan data yang tumbuh di dalam negeri, Heron.

Meskipun merilis makalah yang merinci arsitektur Heron, alternatif Twitter untuk Storm tetap tersembunyi di pusat data Twitter. Itu semua berubah minggu lalu ketika Twitter merilis Heron di bawah lisensi open source. Jadi, apa itu Heron, dan di mana tempatnya dalam dunia pemrosesan data dalam skala besar?

Mesin pemroses data grafik asiklik terarah (DAG), Heron adalah entri lain di bidang yang sangat ramai saat ini. Tapi Heron bukanlah "lihat, aku juga!" solusi atau upaya untuk mengubah mesin DAG menjadi data besar yang setara dengan FizzBuzz.

Heron tumbuh dari kekhawatiran nyata yang dialami Twitter dengan penyebaran topologi Storm-nya. Ini termasuk kesulitan dengan pembuatan profil dan penalaran tentang pekerja Storm ketika diskalakan di tingkat data dan di tingkat topologi, sifat statis alokasi sumber daya dibandingkan dengan sistem yang berjalan di Mesos atau YARN, kurangnya dukungan tekanan balik, dan banyak lagi.

Meskipun Twitter bisa saja mengadopsi Apache Spark atau Apache Flink, itu akan melibatkan penulisan ulang semua kode Twitter yang ada. (Jangan lupa, Twitter telah menggunakan Storm lebih lama dari siapa pun, memperoleh BackType, pembuat Storm, pada tahun 2011 sebelum menjadi open source.) Sebaliknya, Twitter mengambil pendekatan yang berbeda: kerangka pemrosesan aliran baru dengan API yang kompatibel dengan Storm .

Pada titik ini dalam perjalanan kita melalui kerangka baru, saya biasanya akan melalui beberapa contoh untuk menunjukkan kepada Anda seperti apa pengkodean dalam kerangka itu, tetapi ada gunanya dengan Heron - Anda menulis baut dan tupel Storm dengan cara yang persis sama seperti Anda akan melakukannya dengan Storm. Yang perlu Anda lakukan untuk menjalankan kode Storm Anda di Heron adalah menambahkan bagian ini ke dependensi pom.xml Anda:

 com.twitter.heron

 heron-api

 SNAPSHOT

 compile

 com.twitter.heron

 heron-storm

 SNAPSHOT

 compile

Kemudian Anda menghapus dependensi kode badai dan clojure-plugin. Kompilasi ulang, dan kode Anda akan berjalan di Heron tanpa perlu perubahan lebih lanjut. Sederhana! (Sebagian besar, bagaimanapun, tapi kami akan kembali ke itu.)

Secara operasional, implementasi Heron saat ini berjalan di atas Apache Mesos, menggunakan Apache Aurora, kerangka kerja penjadwalan Mesos yang dikembangkan oleh Twitter (kejutan!). Sejak mengalihkan semua topologi Storm-nya ke Heron, Twitter berhasil mengurangi sumber daya perangkat keras yang didedikasikan untuk topologi tersebut dengan faktor tiga sekaligus meningkatkan throughput dan mengurangi latensi dalam pemrosesan - lumayan.

Mungkin salah satu aspek yang paling menarik tentang Heron adalah bahwa sementara kode untuk itu akan ditulis dalam Java (atau Scala), dan komponen UI berbasis web ditulis dengan Python, bagian penting dari kerangka kerja, kode yang mengatur topologi. dan komunikasi jaringan sama sekali tidak ditulis dalam bahasa JVM.

Memang, di jantung Heron, Anda akan menemukan kode dalam bahasa yang mungkin tidak Anda duga: C ++. Saya pikir ini adalah aspek dari dunia data besar yang akan kita lihat lebih banyak di tahun-tahun mendatang. 

Pemelihara Apache Storm telah menghapus banyak elemen dari kode Clojure aslinya demi implementasi ulang Java, dan proyek Apache Spark saat ini membuat kode Java secara langsung untuk mempercepat pemrosesan DataFrame-nya. Namun keduanya masih terikat dengan JVM - dan JVM memiliki masalah dalam skala besar. Jangan salah paham, JVM adalah kreasi luar biasa yang telah bertahan dalam ujian waktu selama 20 tahun, tetapi ketika dijalankan pada mesin dengan RAM dalam jumlah besar dan memproses data dalam jumlah besar, masalah dengan pengumpulan sampah muncul, apa pun yang terjadi. skema kolektor mewah yang Anda gunakan.

Pada titik mana, kembali ke bahasa seperti C ++ mulai terlihat menarik. Sebagai contoh, Scylla, implementasi ulang C ++ dari Apache Cassandra, memiliki 10 kali throughput Cassandra dengan tidak ada jeda GC yang membuat Cassandra terkenal karena penerapannya secara besar-besaran. Saya cukup yakin kita akan melihat pendekatan Heron menyebar ke kerangka lain segera. Hal ini dapat dibantu oleh upaya Project Panama untuk meningkatkan antarmuka antara Java dan bahasa lain.

Mengingat Heron membutuhkan lebih sedikit sumber daya dan memberikan lebih banyak throughput dan latensi lebih sedikit daripada Apache Storm, Anda harus memindahkan semua topologi Anda ke Heron sekarang, ya? Ya, mungkin. Heron saat ini terikat dengan Mesos, jadi jika Anda tidak memiliki infrastruktur Mesos, Anda harus mengaturnya juga, yang bukan pekerjaan kecil. Selain itu, jika Anda menggunakan fitur DRPC Storm, fitur tersebut tidak digunakan lagi di Heron.

Sisi positifnya, Heron telah menjalankan semua kebutuhan pemrosesan Twitter dalam produksi selama lebih dari setahun, jadi harus dapat menangani apa pun yang dapat Anda lakukan. Selain itu, Twitter menunjukkan bahwa Heron digunakan di Microsoft dan perusahaan Fortune 500 lainnya, sehingga Anda dapat secara relatif yakin bahwa Heron akan bertahan.

Di sisi lain, Storm belum berdiri diam. Tim Apache Storm mungkin berdalih dengan deskripsi Twitter tentang Heron sebagai "generasi Apache Storm berikutnya". Sementara Twitter sedang mengerjakan Heron, Apache Storm mencapai 1.0 - yang mencakup dukungan untuk tekanan balik, opsi debugging dan profil yang lebih baik, penurunan latensi 60 persen, dan peningkatan kecepatan hingga 16 kali lipat.

Selain itu, Storm 1.0 menambahkan alat pacu jantung, daemon untuk menurunkan lalu lintas detak jantung dari Zookeeper, membebaskan topologi yang lebih besar dari kemacetan ZooKeeper yang terkenal. Peningkatan kecepatan Heron diukur dari kode Storm 0.8.x yang menyimpang darinya, bukan versi saat ini; jika Anda telah bermigrasi ke Storm 1.0, Anda mungkin tidak melihat lebih banyak peningkatan dari topologi Storm Anda saat ini, dan Anda mungkin mengalami ketidakcocokan antara penerapan fitur-fitur baru seperti dukungan tekanan balik antara Storm dan Heron.

Secara keseluruhan, saya tidak percaya bahwa Heron cenderung menyebabkan banyak penyok dalam penggunaan kerangka kerja pemrosesan data seperti Apache Spark, Apache Flink, atau Apache Beam. Abstraksi dan API tingkat yang lebih tinggi memberikan pengalaman yang jauh lebih ramah pengembang daripada API Storm / Trident tingkat yang lebih rendah. Namun, saya yakin perpaduan kode JVM dengan modul non-JVM untuk jalur kritis akan menjadi pendekatan yang lebih populer di masa mendatang, dan dalam aspek ini, Heron menunjukkan kepada kita semua arah yang akan kita tempuh dalam beberapa bulan dan tahun. datang.