Wednesday, June 15, 2016

Functional Reactive Programming

Saya mengenal konsep Functional reactive programming (selanjutnya akan saya tulis FRP) di pertengahan tahun ini, mungkin bisa dibilang telat, tapi lebih baik terlambat daripada tidak sama sekali kan? :D


Dalam hemat saya, FRP merupakan perspektif baru dalam menyelesaikan permasalahan-permasalahan programming di masa yang sekarang. Mengapa sekarang? Karena permasalahan programming di masa lalu dan masa sekarang berbeda. Jika permasalahan masa lalu adalah hardware dan internet, maka salah satu permasalahan sekarang adalah bagaimana mengatasi traffic yang sangat besar dalam satu website.
1*HAoewX140mJ8JnogRGPr5g.png

Dalam gambar tersebut bisa dilihat bahwa, facebook dan twitter memiliki jumlah user sangat banyak, hal ini jelas menjadi permasalahan penting yang harus dihadapi.


Prinsip Reactive
Secara singkat mengutip dari Bob reactive programming bisa di ibaratkan, applikasi reactive sebagai spread sheet, dan  variable-variable nya sebagai cell nya, jika salah satu cell berubah maka yang lain berubah. Yang sudah lama kenal konsep object oriented programming (oop) mungkin pernah denger observer pattern, konsepnya sama :)


Reactive programming sendiri dibangun berdasarkan 4 prisip, bisa dilihat dalam reactive manifesto.
1*DoL5xCZLLf35Z1xVWBRqjw.png


Gambar diatas menunjukan guidance dalam membangun applikasi dengan konsep reactive. Mengutip dari Kevin Webber :
  • Responsive application merupakan goal
  • Responsive application tidak mungkin terwujud tanpa resilient dan scalability
  • Message driven architecture merupakan pondasi dari scalable, resilient dan ultimate responsive sistem.

Responsive
A responsive system is quick to react to all users — under blue skies and grey skies — in order to ensure a consistently positive user experience. (Kevin Webber, 2014)


Sebuah sistem bisa dikatakan responsive jika sistem tersebut mampu merespon dengan cepat (baik sukses maupun error) terhadap segala kondisi user. Dalam kasus sukses maupun error, sistem harus konsisten terhadap user experience nya.
Singkat nya, ketika ada error process, user harus dihadapkan pada pilihan yang menyenangkan seperti ketika sukses process. Sebagai contoh mungkin, saat user merequest uber saat peak hour (yg notabene traffic nya sangat banyak) dan saat bukan peak hour, user harus mendapatkan response time yg sama.


Resilient
A resilient system applies proper design and architecture principles in order to ensure responsiveness under grey skies as well as blue. (Kevin Webber, 2014)


Resilient sistem harus menyediakan design dan arsitektur error handle yang benar. Dalam hal ini, yang dinaksud benar adalah, ketika terjadi error, maka experience user haruslah sama ketika mengalamin proses yang sukses.


Scalable
A scalable system is easily upgraded on demand in order to ensure responsiveness under various load conditions. (Kevin Webber, 2014)


Reactive mudah di scale up maupun di scale out karena pemodelan arsitektur nya yang mengimplementasi asynchronous, non-blocking, dan parallelism.


Message Driven
A message-driven architecture merupakan pondasi dari reactive applications. Sebuah message-driven application mungkin dapat berupa event-driven, actor-based, maupun kombinasi keduanya.
Gambar di bawah ini menjelaskan bahwa komunikasi dilakukan antar node (atau actor jika menggunakan Actor model) melalui message. Dan message ini menjadi trigger untuk menentukan langkah selanjutnya.


actors.png


Actor model bisa juga digambarkan seperti gambar di bawah ini. Coordinator, player1 dan player2 merupakan actor, coordinator bisa bertindak sebagai router, dan player sebagai worker.
actors2-fig1-100159427-orig.jpg
Sumber http://images.techhive.com/images/idge/imported/article/jvw/2009/03/actors2-fig1-100159427-orig.jpg

Terkait implementasinya mungkin bisa ditilik disini. Dalam source code tersebut menggunakan akka, namun intinya adalah pemodelan nya. Dimana paradigma arsitektur nya bukan lagi MVC, namun reactive.

Kesimpulan :
Scalability dan resilient merupakan prioritas utama dalam memenuhi ekspektasi user, untuk itu diperlukan paradigma reactive programming dalam membangun arsitektur sistem.


Happy coding dan reactive :)


Sumber :


No comments:

Post a Comment