Gambaran ringkas mengenai sistem reaktif

Terdapat banyak keributan mengenai sistem reaktif sejak beberapa tahun kebelakangan ini. Bersama-sama dengan buzz terdapat koleksi salad kata kunci yang relevan seperti aliran reaktif, peluasan reaktif, pengaturcaraan reaktif, pengaturcaraan reaktif fungsional, dan lain-lain. Sekiranya anda sudah lama berada di industri teknologi, anda telah melihat naik turunnya kata kunci dan akronim dari semasa ke semasa. Jadi, adakah semua itu satu lagi gembar-gembur yang akan segera ditangguhkan?

Saya pernah mendengar jurutera perisian menolak sistem reaktif sebagai alias untuk sistem berasaskan acara tidak segerak, seperti cara sesetengah orang menolak perkhidmatan mikro kerana SOA (seni bina berorientasikan perkhidmatan) kurang ESB (bas perkhidmatan perusahaan). Walaupun kata kunci teknologi dengan makna yang diciptakan semula seringkali muncul, saya melihat ciri khas yang cukup dalam sistem reaktif untuk berfikir bahawa nama itu bukan sekadar alias lain.

Apa itu sistem reaktif?

Manifesto Reaktif menerangkan ciri-ciri penting sistem reaktif: responsif, berdaya tahan, elastik dan didorong oleh mesej. Itu memberikan gambaran tahap tinggi dan kedengaran sedikit generik. Khususnya, daya tindak, ketahanan, keanjalan yang dijelaskan dalam manifesto adalah keperluan standard bagi banyak aplikasi dunia nyata dewasa ini.

Mungkin "didorong oleh mesej" adalah syarat yang benar-benar membezakan sistem reaktif dari yang lain. Di bawahnya, sistem reaktif bergantung pada interaksi melalui penyampaian mesej tak segerak yang menetapkan batas antara komponen individu. Model interaksi seperti itu membantu membuka jalan ke arah penggabungan longgar baik mengikut masa dan lokasi sesuai untuk kesesuaian dan pengagihan masing-masing. Di samping itu, ia membolehkan sistem dilengkapi secara bersepadu dengan beberapa mekanisme tanpa penyekat untuk mengatur aliran data (lebih lanjut mengenai ini di bawah).

Aliran reaktif

Dalam membangun sistem reaktif, tampaknya ada pendekatan yang menonjol di mana operasi pemprosesan data, bila perlu, diformulasikan sebagai aliran aliran komposisi. Itu bukan sebahagian daripada syarat dalam Manifesto Reaktif, tetapi ia boleh menjadi model interaksi berdasarkan mesej yang wujud dalam sistem reaktif yang secara semula jadi menyukai pendekatan pemodelan aliran-sentris.

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

Tekanan belakang

Salah satu mekanisme peraturan yang tidak menyekat yang disebutkan sebelumnya adalah tekanan balik. Ini mungkin fungsi yang paling dicari untuk sistem yang melaksanakan aliran reaktif. Ini adalah mekanisme maklum balas tak segerak yang beroperasi di arah aliran yang berlawanan ke arah komponen hulu untuk peraturan beban.

Dengan tekanan belakang terpasang yang mengatur aliran aliran dengan cara yang tidak menyekat, sistem ini dapat beroperasi dengan penggunaan memori yang lebih stabil. Fungsi seperti ini menghilangkan masalah limpahan timbunan yang berpotensi menghancurkan (misalnya disebabkan oleh sink data yang perlahan) yang biasanya harus diatasi oleh mekanisme penyangga data bangunan khas sepanjang aliran aliran.

Bagaimana dengan pengaturcaraan reaktif?

Sebagai paradigma pengaturcaraan untuk membangun sistem reaktif, pengaturcaraan reaktif menekankan merumuskan logik pengaturcaraan asinkron sebagai aliran data, dan penyebaran perubahan automatik terhadap nilai pemboleh ubah berkorelasi dalam sistem. Bahasa yang digunakan untuk paradigma pengaturcaraan seperti itu akan menyediakan fungsi komposisi yang sesuai untuk beroperasi pada aliran yang diformulasikan.

Dengan reka bentuk, pengaturcaraan reaktif menyukai gaya pengaturcaraan fungsional yang mengekspresikan dan menyelesaikan masalah komputasi menggunakan fungsi komposit. Walaupun begitu, kewujudan istilah pengaturcaraan reaktif fungsional mendahului "pergerakan" reaktif ini lebih dari satu dekad. FRP mempunyai fokus yang sangat berbeza dan berpusat di sekitar penggunaan fungsi untuk mengekspresikan tingkah laku dari masa yang berterusan dengan semantik denotasi sederhana. Namun, sekarang seringkali dilihat sebagai pengaturcaraan reaktif dengan penekanan eksplisit dalam pengaturcaraan fungsional.

Sekiranya ilustrasi dengan kod berfungsi dengan lebih baik, saya cadangkan membaca catatan tutorial Andre Staltz yang meneliti inti pati pengaturcaraan reaktif dalam JavaScript menggunakan RxJS.

ReaktifX

ReactiveX, aka Reactive Extensions, adalah perpustakaan API yang membolehkan penggunaan operasi komposisi untuk menangani aliran peristiwa tak segerak. Melanjutkan dari corak pemerhati, pemerhati dan pemerhati (yang merupakan pelanggan kepada yang dapat dilihat) merupakan bahan utama di perpustakaan dengan sekumpulan pengendali komposit untuk penapisan, transformasi, pengagregatan, dll. RxJS dan RxJava adalah dua pelaksanaan yang paling popular ReactiveX dalam JavaScript dan Java masing-masing.

Pelakon Akka

Akka adalah perpustakaan berasaskan pelakon yang disasarkan untuk membangun aplikasi serentak dan diedarkan berskala di JVM (Java Virtual Machine). Pada intinya adalah primitif komputasi yang disebut pelakon yang mengekalkan keadaan dan tingkah laku, dan berkomunikasi sesama mereka melalui penyampaian mesej yang tidak segerak.

Ditulis di Scala, pelakon Akka secara semula jadi ringan dan digabungkan secara longgar. Itu, ditambah dengan ciri penghalaan, peleraian, dan pub-sub Akka yang kuat untuk sistem diedarkan berskala seperti IoT, menjadikannya platform yang bagus untuk membina sistem reaktif.

Aliran Akka

Pelari depan (dan ahli pengasas) inisiatif aliran reaktif ialah Akka Streams. Ia dibina berdasarkan pelakon Akka dan menyediakan rangkaian API yang luas untuk membina topologi aliran dan memproses aliran dengan cara yang sangat komposisi. Satu catatan blog baru-baru ini mengenai pusat lombong di sekitar aliran Akka dan bagaimana ia dapat digunakan untuk melakukan beberapa perlombongan teks asas.

Nampaknya, aliran Akka sebagai inisiatif reaktif telah berusaha selama ini. Pemacu berasaskan Akka-Streams seperti Reactive Rabbit dan ReactiveMongo for RabbitMQ dan MongoDB telah mula mendapat momentum dalam industri teknologi. Selain itu, Akka HTTP, yang merupakan generasi berikutnya dari toolkit Spray REST / HTTP, juga dibangun untuk diaktifkan aliran dengan aliran Akka sebagai mesin pendasarnya.

Semua aliran berorientasikan - dalam beberapa cara

Dengan momentum yang semakin meningkat dalam menerapkan inisiatif sistem reaktif, ini nampaknya telah melampaui tahap menjadi gembar-gembur semata-mata. Ini juga jelas lebih daripada kata kunci dari sistem berasaskan acara tidak segerak. Dari perspektif kelebihan teknikal, saya tidak melihat sebab mengapa ia tidak akan menjadi lebih menonjol. Walaupun begitu, inisiatif teknologi sumber terbuka seperti produk komersial - masa yang tepat dapat menarik perhatian dengan cepat pada tahap awal dan pemasaran yang sesuai dapat membantu mendapatkan momentum berterusan yang diperlukan untuk mempopularkan ke pangkalan pengguna yang lebih luas.

Pengaturcaraan fungsional yang sesuai dengan masa telah meningkat, jadi saya katakan ia adalah masa yang tepat, kerana gaya pengaturcaraan diterima baik dalam membangun sistem reaktif. Mengenai pemasaran, saya percaya penamaan inisiatif yang lebih intuitif dan menarik akan menjual lebih baik kepada industri teknologi. Seseorang tidak dapat memahami sesuatu yang bermakna ketika mendengar istilah "sistem reaktif" untuk pertama kalinya. Walaupun istilah "reaktif" membahas beberapa aspek dari penyebaran perubahan yang diterima dalam sistem seperti itu, kata ini tidak menjadi perhatian penonton sebagai ciri khas.

Dengan sistem reaktif, aliran reaktif dan pengaturcaraan reaktif yang terutama berorientasi di sekitar aliran, saya rasa istilah "aliran" adalah kata kunci yang lebih menarik daripada "reaktif." Dagangan umum dengan kesederhanaan dan intuisi, saya akan menggabungkan sistem reaktif dan aliran reaktif sebagai inisiatif tunggal, dan menggantikan "reaktif" dengan sesuatu yang berpusat di sekitar "aliran."