Tinjauan singkat tentang sistem reaktif

Ada banyak desas-desus tentang sistem reaktif selama beberapa tahun terakhir. Seiring dengan desas-desus datang koleksi salad kata kunci yang relevan seperti aliran reaktif, ekstensi reaktif, pemrograman reaktif, pemrograman reaktif fungsional, dll. Jika Anda sudah cukup lama berada di industri teknologi, Anda telah melihat siklus naik turun dari kata kunci dan akronim dari waktu ke waktu. Jadi, apakah semua itu akan segera menjadi hype lainnya?

Saya pernah mendengar insinyur perangkat lunak menolak sistem reaktif sebagai tidak lebih dari alias untuk sistem berbasis peristiwa asinkron, seperti cara beberapa mengabaikan layanan mikro sebagai SOA (arsitektur berorientasi layanan) tanpa ESB (bus layanan perusahaan). Sementara kata kunci teknologi dengan makna yang diciptakan kembali sering kali muncul, saya melihat cukup banyak ciri khas dalam sistem reaktif untuk berpikir bahwa nama itu bukan sekadar alias lain.

Apa itu sistem reaktif?

Manifesto Reaktif menggambarkan karakteristik penting dari sistem reaktif: responsif, ulet, elastis dan didorong oleh pesan. Itu memberikan gambaran tingkat tinggi dan terdengar sedikit umum. Secara khusus, daya tanggap, ketahanan, elastisitas yang dijelaskan dalam manifesto hampir merupakan persyaratan standar dari banyak aplikasi dunia nyata saat ini.

Mungkin "berbasis pesan" adalah persyaratan yang benar-benar membedakan sistem reaktif dari yang lain. Di balik terpal, sistem reaktif mengandalkan interaksi melalui penyampaian pesan asinkron yang menetapkan batasan di antara komponen individu. Model interaksi seperti itu membantu membuka jalan menuju kopling-longgar baik dari segi waktu maupun lokasi untuk konkurensi dan distribusi, masing-masing. Selain itu, memungkinkan sistem dilengkapi secara integral dengan beberapa mekanisme non-pemblokiran untuk mengatur aliran data (lebih lanjut tentang ini di bawah).

Aliran reaktif

Dalam membangun sistem reaktif, tampaknya ada pendekatan yang menonjol di mana operasi pemrosesan data, jika memungkinkan, diformulasikan sebagai aliran aliran komposisi. Itu bukan bagian dari persyaratan dalam Manifesto Reaktif, tetapi bisa jadi model interaksi berbasis pesan yang melekat dalam sistem reaktif yang secara alami lebih menyukai pendekatan pemodelan yang berpusat pada aliran.

Tampaknya muncul sebagai inisiatif terpisah, aliran reaktif dapat dilihat sebagai jenis sistem reaktif tertentu yang berpusat di sekitar pemrosesan aliran, mengekspresikan aliran komposisi sebagai grafik yang diarahkan.

Tekanan balik

Salah satu mekanisme regulasi non-blocking yang disebutkan sebelumnya adalah tekanan balik. Ini mungkin fungsionalitas yang paling dicari untuk sistem yang mengimplementasikan aliran reaktif. Ini adalah mekanisme umpan balik asinkron yang beroperasi dalam arah yang berlawanan dari aliran menuju komponen hulu untuk pengaturan beban.

Dengan tekanan balik bawaan yang mengatur aliran aliran dalam mode non-pemblokiran, sistem dapat beroperasi dengan pemanfaatan memori yang relatif lebih stabil. Fungsionalitas tersebut menghilangkan masalah stack overflow yang berpotensi merusak (misalnya disebabkan oleh data sink yang lambat) yang biasanya harus diatasi dengan mekanisme buffering data yang dibuat secara kustom di seluruh aliran aliran.

Bagaimana dengan pemrograman reaktif?

Sebagai paradigma pemrograman untuk membangun sistem reaktif, pemrograman reaktif menekankan perumusan logika pemrograman asinkron sebagai aliran data, dan propagasi otomatis perubahan ke nilai variabel berkorelasi dalam sistem. Bahasa yang digunakan untuk paradigma pemrograman seperti itu akan menyediakan fungsi yang dapat disusun yang sesuai untuk beroperasi pada aliran yang dirumuskan.

Secara desain, pemrograman reaktif mendukung gaya pemrograman fungsional yang mengekspresikan dan menyelesaikan masalah komputasi menggunakan fungsi yang dapat disusun. Namun demikian, keberadaan istilah pemrograman reaktif fungsional mendahului "gerakan" reaktif ini lebih dari satu dekade. FRP memiliki fokus yang sangat berbeda dan berpusat di sekitar penggunaan fungsi untuk mengekspresikan perilaku dari waktu ke waktu terus menerus dengan semantik denotasi sederhana. Namun, sekarang ini seringkali dipandang sebagai pemrograman reaktif dengan penekanan eksplisit dalam pemrograman fungsional.

Jika ilustrasi dengan kode bekerja lebih baik, saya sarankan membaca posting tutorial Andre Staltz yang menjelaskan esensi pemrograman reaktif di JavaScript menggunakan RxJS.

ReactiveX

ReactiveX, alias Reactive Extensions, adalah pustaka API yang memungkinkan penggunaan operasi komposisi untuk menangani aliran peristiwa asinkron. Memperluas dari pola pengamat, yang dapat diamati dan pengamat (yang merupakan pelanggan dari yang dapat diamati) merupakan bahan utama di perpustakaan dengan satu set operator yang dapat disusun untuk pemfilteran, transformasi, agregasi, dll. RxJS dan RxJava adalah dua implementasi paling populer dari ReactiveX di JavaScript dan Java.

Akka aktor

Akka adalah pustaka berbasis aktor yang ditargetkan untuk membangun aplikasi serentak dan terdistribusi yang dapat diskalakan di JVM (Java Virtual Machine). Pada intinya adalah komputasi primitif yang disebut aktor yang mempertahankan keadaan dan perilaku, dan berkomunikasi di antara mereka sendiri melalui penyampaian pesan yang tidak sinkron.

Ditulis dalam Scala, aktor Akka pada dasarnya ringan dan berpasangan secara longgar. Hal itu, ditambah dengan fitur perutean, sharding, dan pub-sub yang kuat dari Akka untuk sistem terdistribusi yang dapat diskalakan seperti IoT, menjadikannya platform yang hebat untuk membangun sistem reaktif.

Aliran Akka

Pelari terdepan (dan anggota pendiri) dari inisiatif aliran reaktif adalah Akka Streams. Itu dibangun di atas aktor Akka dan menyediakan serangkaian API yang luas untuk membangun topologi aliran dan memproses aliran dengan cara yang sangat komposisi. Sebuah posting blog baru-baru ini tentang tambang berpusat di sekitar aliran Akka dan bagaimana ini dapat digunakan untuk melakukan beberapa penambangan teks dasar.

Ternyata, aliran Akka sebagai inisiatif reaktif telah diupayakan akhir-akhir ini. Driver berbasis Akka-Streams seperti Reactive Rabbit dan ReactiveMongo untuk RabbitMQ dan MongoDB sudah mulai mendapatkan momentum di industri teknologi. Selain itu, Akka HTTP, yang merupakan generasi berikutnya dari toolkit Spray REST / HTTP, juga dibuat agar dapat melakukan streaming dengan aliran Akka sebagai mesin dasarnya.

Semua aliran berorientasi - dalam beberapa cara

Dengan momentum yang terus tumbuh dalam mengadopsi inisiatif sistem reaktif, tampaknya hal itu telah melampaui tahap menjadi sekadar hype. Ini juga jelas lebih dari sekedar kata kunci yang diciptakan kembali dari sistem berbasis peristiwa asinkron. Dari perspektif manfaat teknis, saya tidak melihat alasan mengapa itu tidak akan menjadi lebih menonjol. Namun demikian, bahkan inisiatif teknologi sumber terbuka seperti produk komersial - pengaturan waktu yang tepat dapat dengan cepat menarik perhatian pada tahap awal dan pemasaran yang sesuai dapat membantu mendapatkan momentum yang sedang berlangsung yang diperlukan untuk mempopulerkan ke basis pengguna yang lebih luas.

Dari segi waktu, pemrograman fungsional telah meningkat, jadi menurut saya ini adalah waktu yang tepat, karena gaya pemrograman dianut dengan baik dalam membangun sistem reaktif. Mengenai pemasaran, saya percaya penamaan inisiatif yang lebih intuitif dan wahyu akan menjual lebih baik ke industri teknologi. Seseorang hampir tidak dapat memahami sesuatu yang berarti ketika mendengar istilah "sistem reaktif" untuk pertama kalinya. Meskipun istilah "reaktif" merujuk pada beberapa aspek dari penyebaran perubahan yang dianut dalam sistem semacam itu, istilah itu tidak menarik perhatian penonton sebagai karakteristik tanda tangan.

Dengan sistem reaktif, aliran reaktif, dan pemrograman reaktif yang sebagian besar berorientasi di sekitar aliran, menurut saya istilah "aliran" adalah kata kunci yang lebih mengungkapkan daripada "reaktif". Perdagangan umum dengan kesederhanaan dan intuisi, saya akan menggabungkan sistem reaktif dan aliran reaktif sebagai satu inisiatif, dan mengganti "reaktif" dengan sesuatu yang berpusat di sekitar "aliran."