Sunday, December 16, 2018

Building Reactive Rest API using Spring Webflux Part 1

Pada blog ini, saya akan membahas tentang bagaimana membuat reactive rest api menggunakan Spring WebFlux, blog akan dibagi menjadi 2 bagian, part pertama membahas teori dan part kedua membuat api menggunakan spring webflux.

Spring 5 telah merilis reactive framework baru yang mengadopsi paradigma reactive programming yang disebut Spring WebFlux dan menjadi salah satu topik paling hot didunia spring. Sebelum lebih jauh mari kita bahas satu per satu :D

Blocking vs Non-Blocking


Gambar 1. Blocking I/O

Pada saat membuat aplikasi, pada umumnya hanya menembak database atau service lain jadi hanya I/O Operation saja, Masalahya adalah operasi I/O kebanyakan blocking (Proses dilakukan jika proses sebelumnya telah diselesai dilakukan). Jika kita hanya menggunakan 1 thread (1 thread per request),  dan ketika ada 500 request yang masuk secara bersamaan ke aplikasi kita maka request pertama akan dieksekusi terlabih dahulu dan request kedua dan selajutnya akan menunggu hingga request pertama selesai dilaksanakan. Jika seperti ini kita dapat menambah thread pada aplikasi kita misalkan maksimal 200 thread, jika ada 500 request masuk maka 200 request akan di proses terlebih dahulu, dan 300 request sisanya akan menunggu hingga 200 request pertama selesai dilakukan, tetapi masalahnya semakin banyak thread maka semakin banyak pula memori yang dibutuhkan. 


Gambar 2. Non-Blocking I/O



Untuk mengatasi masalah ini, kita membutuhkan single thread dan event loop seperti pada NodeJS. Ini akan menjamin operasi non-blocking I/O (asynchronous). Spring boot mengimplementasi solusi ini memalui Project Reactor dan Paradigma Reactive Programming.

Reactive Programming

Reactive programming mengelola aliran data asynchronous antara produsen data dan konsumen yang perlu bereaksi terhadap data tersebut dengan cara non-blocking. Reactive programming dibangun berdasarkan 4 prinsip, bisa dilihat dalam reactive manifesto dan materi tentang ini pernah dibahas pada postingan sebelumnya oleh mba antin.


Project Reactor

Spring WebFlux menggunakan library yang dinamakan Reactor untuk membuat aplikasi web non-blocking. Reactor merupakan implementasi dari spesifikasi Reactive Streams. Reactor menyediakan 2 tipe yang disebut Mono dan Flux, kedua jenis mengimplementasi interface Publisher yang disediakan oleh Reactive Systems.

  • Mono digunakan untuk mengembalikan 0 atau 1 elemen
  • Flux digunakan untuk mengembalikan 0 atau banyak elemen
Contohnya :
Using non-reactor (traditional)

Using reactor



Why Was Spring WebFlux Created ?

Spring WebFlux diciptakan karena kebutuhun akan non-blocking web stack yang bertujuan untuk menghandle concurency (proses-proses yang dilakukan secara bersamaan) dengan jumlah thread yang kecil. 

How to Build Reactive Rest API using Spring WebFlux  ?

Untuk membuat reactive api menggunakan Spring WebFlux digunakan beberapa library yang berbeda dari yang biasa, karena library yang digunakan haruslah mensupport non-blocking, tidak boleh ada salah satu yang blocking. Pada blog selanjutnya akan dijelaskan bagaimana membuat project reactive api menggunakan Spring WebFlux . Terimakasih

No comments:

Post a Comment