Mengenal Tentang Reactive System
Akhir – akhir ini pembaca akan sering menemui banyak istilah reactive begitu sering disebut di banyak artikel hingga seminar kekinian yang membahas tentang perancangan dan pengembangan software, bahkan begitu seringnya digunakan, kata reactive akhirnya menjadi terkesan overuse dan malah membingungkan. Sebut saja istilah reactive system, reactive programming, reactive extension, reactive messaging. Semua istilah tersebut menggunakan kata reactive.
Apa definisi dan konteks dari terminologi reactive yang sekarang ini sedang ngetren? Lalu Apakah istilah reactive yang disebut dalam banyak terminologi tersebut merujuk kepada definisi “reactive” yang sama? Kemudian, mengapa terminologi “reactive” menjadi begitu populer ? Pertanyaan – pertanyaan tersebut pasti akan muncul di benak anda, ketika pertama kali mempelajari atau menemui istilah tersebut.
Jangan kuatir, karena pada artikel kali ini, penulis akan menjawab pertanyaan – pertanyaan tersebut untuk anda.
- Definisi
Terlebih dahulu mari lepaskan sejenak tentang terminologi reactive dari konteks software dan IT dan mundur beberapa langkah ke belakang untuk memahami istilah dasar dari reactive yang ada pada kamus bahasa inggris Oxford.
reactive (adjective)
Showing a response to a stimulus. 1.1 Acting in response to a situation rather than creating or controlling it. 1.2 Having a tendency to react chemically. 1.3 (Physiology) Showing an immune response to a specific antigen. 1.4 (Of a disease or illness) Caused by a reaction to something. 1.5 (Physics) Relating to reactance.
Jika anda masih bingung, mari flashback sejenak, saat mata pelajaran Fisika di Sekolah Menengah yang membahas tentang hukum 3 Newton, tentang Aksi Reaksi. Dimana dalam hukum tersebut disebutkan bahwa ketika seseorang memberikan sebuah gaya aksi terhadap benda. Maka seketika itu juga, benda tersebut akan memberikan gaya reaksi, dengan besaran yang sama dengan gaya aksi, namun dengan arah berlawanan
Ok, dari beberapa definisi tersebut, akan ditemukan beberapa keyword yang dapat menjadi benang merah dari yang menjelaskan definisi reactive secara umum, seperti misalnya pada definisi pertama yaitu kata response, dan stimulus. Dimana sesuatu yang bersifat reactive, berarti akan selalu memberikan response atau reaksi dari stimulus yang didapatkan, terlepas apakah bentuk stimulus tersebut. Lalu dalam konteks pada hukum ketiga newton, dapat ditemukan satu keyword penting lagi yaitu waktu. dimana sesuatu yang bersifat reactive, akan memberikan respon, (reaction) dari action dalam waktu yang sangat cepat (atau seketika) begitu action diterima.
Jika pengertian tersebut diperluas di dalam konteks software development, maka reactive dapat didefinisikan sebagai berikut
1.6 (Software) An application reacting to stimuli, such as user events, requests, and failures.
- Reactive Manifesto
Untuk membangun sebuah sistem yang reactive, diperlukan sebuah pendekatan dalam perancangan aplikasi dengan menggunakan prinsip – prinsip yang sama sekali berbeda. Prinsip – prinsip inilah yang kemudian dikenal sebagai reactive manifesto, yang dimana manifesto tersebut mendefinisikan beberapa unsur yang saling terkait satu sama lain, yang diperlukan dalam membangun sebuah sistem yang reactive, yang diilustrasikan di dalam diagram berikut.
- Responsive
Unsur pertama dari reactive manifesto adalah responsive, yang artinya sistem tersebut harus memberikan reaksi terhadap user yang memberikan aksi (request) kepada user. Ini adalah unsur yang bisa dibilang sebagai value dari sebuah sistem yang reactive.
Untuk memahami mengenai konsep responsive dan bagaimana pentingnya unsur tersebut dari suatu sistem, mari misalkan sebuah perusahaan fiksi bernama PT Subrutin Travel, hendak membangun sebuah aplikasi yang dapat melayani secara online pemesanan tiket kereta api dan pesawat terbang. Untuk keperluan tersebut, kemudian dikembangkan sebuah aplikasi yang dibangun dengan menggunakan bahasa pemrograman Java dan Spring Framework.
Untuk mendeploy aplikasi yang telah dibangun tersebut, digunakan sebuah server on-premis yang menjalankan sebuah servlet container seperti Apache Tomcat dengan thread pool yang dikonfigurasi agar mengalokasikan 500 thread.
Jika waktu response yang diinginkan untuk sebuah request di aplikasi ticketing tersebut sekitar 250ms, maka dengan melakukan sebuah perhitungan sederhana, perancang dapat memperkirakan kapasitas dari aplikasi tersebut dapat melayani 2000 request di tiap detiknya. Anggaplah jumlah ini lebih dari cukup untuk melayani traffic di sebagian besar hari, karena berdasarkan statistik, beban dari aplikasi tersebut hanyalah setengah dari kemampuan maksimalnya, katakanlah 1000 request di tiap detiknya.
Namun bagaimana jika pada suatu hari traffic ke aplikasi melonjak secara tiba – tiba. misalnya saat menjelang musim lebaran atau hari libur sekolah dimana tentu aplikasi pemesanan tiket kereta dan pesawat akan kebanjiran pemesanan secara mendadak. Jika ternyata beban request yang masuk ke dalam server melebihi dari beban yang mampu ditangani, (misalnya 4000 request di tiap detik), maka tentu sistem akan mengalami failure. Akibatnya tentu akan sangat merugikan, karena calon customer akan menjadi kecewa dan kemudian berpindah ke aplikasi kompetitor
- Elastic
Unsur berikutnya dari reactive manifesto adalah elastic, yang merupakan salah satu cara yang dilakukan (bersama dengan resilient, yang nanti akan diulas) agar sistem dapat tetap mempertahankan unsur responsive (seperti yang dibahas pada poin pertama). Sistem yang elastic memungkinkan sistem akan tetap responsif di dalam beban kerja yang berubah – ubah secara bervariasi.
Jika suatu saat traffic kepada sistem meningkat, sistem dapat secara otomatis menambah kapasitas komputasinya agar tetap responsif terhadap request dari user, hal tersebut dapat dicapai dengan menambah resource komputasi secara vertikal (misal upgrade RAM) atau menambah cluster/instance baru secara horisontal.
- Resilient
Agar suatu sistem tetap responsive, selain elastic, diperlukan satu unsur lagi yaitu resilient. Suatu sistem yang memenuhi unsur resilient berarti sistem tersebut haruslah mampu tetap responsive pada kondisi apapun, bahkan saat sebagian dari sistem tersebut mengalami kegagalan (fault tollerance)
Misalnya dalam kasus aplaiksi ticketing yang telah dibahas sebelumnya jika salah satu fitur, misalnya fitur komentar atau review mengalami failure, hal tersebut tidak menganggu keseluruhan sistem yang lain. Dalam artian sistem secara umum masih dapat beroperasi normal, dan customer masih dapat melakukan pemesanan tiket melalui aplikasi.
Salah satu cara yang dapat ditempuh untuk membangun sebuah sistem yang resilient misalnya adalah dengan membangun sebuah sistem terdistribusi yang terdiri dari berbagai komponen fungsional yang masing -masing komponenya terisolasi satu dengan yang lain sehingga operasional dari masing – masing komponen relatif bersifat independen.
- Message Driven
Message driven adalah unsur terakhir yang diperlukan untuk merekatkan ketiga unsur di awal, dimana sebuah sistem yang reactive haruslah mengandalkan pengiriman message asinkron agar masing – masing komponen yang independen tersebut dapat saling berkomunikasi. Salah satu implementasi untuk mencapai komunikasi message-driven adalah dengan menggunakan message broker, seperti Kafka, RabbitMQ, AMQP.
- Reactive System vs Reactive Programming
Kemudian akan muncul pertanyaaan. Apakah pebedaan reactive system yang berdasarkan reactive manifesto sebagaimana yang telah dibahas sebelumnya, dengan bahasa pemrograman reaktif (reactive programming)? Apakah dalam membangun sebuah sistem yang reaktif diperlukan bahasa pemrograman yang mendukung reactive programming?
Jawabannya adalah tidak.
Reactive manifesto hanya menjelaskan tentang unsur- unsur dari sebuah sistem yang reaktif, namun tidak mengharuskan untuk dibangun dengan bahasa pemrograman reaktif (reactive programmng) ataupun reactive library. Perancang dapat saja membangun sebuah sistem yang responsive, scalable, resilient dan message driven tanpa menggunakan reactive library. Namun penggunaan reactive library dapat mempermudah programmer dalam membangun sebuah sistem yang reactive.
Gak sabar jika ada tutorialnya mas saya penggemar java mas
Mantap mas penjelasannya