Saat ini, reactive adalah salah satu kata kunci yang trendi dalam pemrograman. Ini secara luas digunakan sebagai awalan untuk "sistem" dan "pemrograman," yang keduanya menggambarkan hal-hal yang sangat berbeda.
Namun, sebagai konsultan IT dan sponsor reaktif, saya memiliki banyak pengalaman dan percakapan di sekitarnya, tetapi pada dasarnya, pertanyaan utamanya selalu sama:
Apa artinya reactive?
Dan, langsung setelahnya:
Mengapa saya harus menggunakan reactive?
Meskipun ada banyak artikel yang berusaha menjelaskan - dengan cara yang mendalam - sistem reaktif, pemrograman reaktif, dan / atau kedua pertanyaan di atas, pertanyaan-pertanyaan ini masih tetap ada.
Sebagaimana disebutkan di atas, sistem reaktif tidak sama dengan pemrograman reaktif. Selain itu, mengenai sistem reaktif, manifesto reaktif menyatakan bahwa sistem reaktif lebih memperhatikan konsep-konsep klasik "sistem terdistribusi" yang didasarkan pada arsitektur "pesan-driven" (yaitu sistem reaktif adalah gaya arsitektur).
Setelah itu, pertanyaan telah dipindahkan ke pemrograman reaktif dan, lebih khusus lagi, bagaimana kerangka reaktif berkaitan dengan eksekusi asynchronous dan (famigerate) utas.
Di sini, masalahnya menjadi sedikit lebih rumit. Pertanyaan-pertanyaan ini didasarkan pada lingkungan implementasi yang berbeda dari loop pesan dan bagaimana cara kerjanya, misalnya, di node.js daripada di JVM.
Untuk menjawab pertanyaan-pertanyaan ini, saya memutuskan untuk menggambar komik sederhana menggunakan metafora restoran yang saya temukan berselancar di laut reaktif online yang saya beri nama "Melayani Reaktif." Mari kita lihat lebih dekat.
Reactive Serving
Mari kita bayangkan bahwa Anda baru saja menjadi pemilik sebuah restoran kecil yang hanya memiliki beberapa meja (tiga, misalnya), dan Anda harus menyewa seluruh staf. Apa pilihanmu? Dengan asumsi bahwa Anda hanya membutuhkan satu koki, berapa banyak pelayan yang perlu Anda sewa?
Pendekatan 1
Dalam pendekatan pertama ini, mari kita coba untuk memecahkan masalah ini dengan menggunakan lingkungan eksekusi klasik (non-reaktif) yang hanya mensponsori satu - thread - per - request. Coba lihat di bawah ini:
Solusi ini terlihat menarik, terutama jika kami ingin menyarankan restoran kami sebagai favorit lokal, tetapi sementara itu, kami harus mempertimbangkan biaya (jumlah pelayan) dan fakta bahwa, sebagian besar waktu, pelayan tidak melakukan apa-apa.
Pada catatan skalabilitas, mudah untuk memahami bahwa Anda memiliki peningkatan linear dalam biaya dan sumber daya yang dibutuhkan.
Mari kita mundur dari metafora ini. Dengan mengganti pelayan dengan benang, koki memiliki kemampuan pemrosesan dan permintaan pelanggan yang kami peroleh. Ini termasuk apa yang terjadi di dalam lingkungan eksekusi klasik di mana setiap utas didedikasikan untuk satu permintaan.
Pendekatan 2
Sekarang, mari kita coba untuk memecahkan masalah ini menggunakan pendekatan yang berbeda terhadap lingkungan eksekusi reaktif yang mensponsori loop tunggal - kejadian - loop. Coba lihat di bawah ini:
Pada gambar di atas, kami mendemonstrasikan satu pelayan untuk semua pelanggan - satu utas untuk semua permintaan. Pendekatan ini mengasumsikan bahwa kita memiliki satu pelayan "reaktif" yang bekerja keras dan tidak sinkron untuk memenuhi kebutuhan semua pelanggan yang berinteraksi dengan koki.
Solusi ini mungkin terlihat kurang menarik daripada yang sebelumnya, tetapi itu benar-benar lebih efisien karena mengandung biaya lebih rendah dan menggunakan kemampuan maksimal pelayan Anda. Karena itu:
Semakin "reaktif" pelayan dan koki ... semakin efektif layanan Anda!
Catatan singkat tentang skalabilitas: jika Anda membutuhkan yang lain, Anda harus mencari pelayan reaktif lain. Ini berarti bahwa biaya dan sumber daya yang dibutuhkan bergantung pada kemampuan Anda untuk mengelola masalah tersebut.
Sekarang, mari kita melangkah menjauh dari metafora restoran. Sementara benang memainkan peran pelayan - kemampuan pemrosesan koki dan permintaan pelanggan, Anda (sebagai pemilik) memainkan peran manajer sumber daya sistem
Kesimpulan
Pertanyaannya adalah, dalam kasus Anda, model layanan apa yang akan Anda pilih untuk restoran Anda? Pendekatan 1 atau 2?
Saya harap metafora ini membantu Anda memahami bagaimana kerangka kerja reaktif menangani eksekusi asynchronous dan utas.
Sementara sistem non-reaktif mencoba mengelola sumber daya dengan menggunakan model prediktif (jumlah maksimal utas, jumlah permintaan maksimum per waktu), sistem reaktif bergantung pada kapasitas sistem yang melibatkan lebih sedikit sumber daya yang lebih baik digunakan, membuat keseluruhan keluaran sistem . tidak dapat diprediksi (untuk itu, kita harus menggunakan pendekatan empiris).
Nikmati dunia reactive!
Source: https://dzone.com/articles/my-experience-trying-to-explain-reactive-word-mean
Source: https://dzone.com/articles/my-experience-trying-to-explain-reactive-word-mean
No comments :
Post a Comment
Terimakasih sudah berkomentar