subrutin
a sequence of programmer life

Advertisement

Mengenal Tentang Reactive System

2 477

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. 

Advertisement

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.

Advertisement

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.

 

Advertisement

 

  • 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.

 

advertisement

Get real time updates directly on you device, subscribe now.

2 Komen
  1. AJI SETIAJI berkata

    Gak sabar jika ada tutorialnya mas saya penggemar java mas

  2. Sprd berkata

    Mantap mas penjelasannya

Tinggalkan pesanan

Alamat email anda tidak akan disiarkan.