IMPLEMENTASI RABBITMQ SEBAGAI KOMUNIKASI ASINKRON PADA SISTEM LAYANAN MIKRO (MICROSERVICE)
Arum Tri Iswari Purwanti
Jurusan Teknik Informatika, Fakultasi Teknologi Industri Universitas Gunadarma 1
[email protected] ABSTRAK
Aplikasi modern saat ini kerap mengadaptasi dua arsitektur berkembang yakni Monolitik dan Layanan Mikro. Pada arsitektur Monolitik, aplikasi disusun sebagai satu entitas sehingga memudahkan untuk pengembangan, pengujian sampai penerapan. Arsitektur ini merupakan pilihan yang baik untuk aplikasi kecil yang tidak mengantisipasi banyak perubahan. Namun untuk aplikasi besar, arsitektur Monolitik terbukti sulit dipelihara karena komponen-komponen yang membentuk arsitektur ini sangat erat hubungannya satu sama lain. Perubahan kecil pada satu bagian dapat mempengaruhi sistem jika tidak diterapkan dengan tepat. Sebaliknya, layanan mikro memisahkan berbagai fungsi sistem menjadi layanan mandiri. Layanan ini berinteraksi satu sama lain menggunakan panggilan jaringan yang mengikuti RPC, REST, ataupun komunikasi asinkron menggunakan RabbitMQ dengan metode pesan berbasis antrian. RabbitMQ adalah perangkat lunak perantara pesan sumber terbuka yang awalnya menerapkan Advanced Message Queuing Protocol (AMQP) dan sejak itu telah diperluas dengan arsitektur plug-in untuk mendukung Streamplug-ing Text Oriented Messagplug-ing Protocol (STOMP), Message Queuing Telemetry Transport (MQTT), dan protokol lainnya. Pada penelitian ini, RabbitMQ dijadikan sebagai komunikasi asinkron pada sistem layanan mikro yang memfasilitasi pengiriman pesan terdistribusi ke beberapa layanan.
Kata kunci: RabbitMQ, Asinkron, Layanan Mikro ABSTRACT
Modern applications often adapt two developing architectures, namely Monolithic and Microservices. In Monolithic architecture, applications are structured as one entity to make it easier for development, testing to implementation. This architecture is a good choice for small applications that do not anticipate many changes. However, for large applications, Monolithic architectures can be proven difficult to maintain because the components that make up this architecture are closely related to one another. Small changes to one part can affect the entire system if it is not implemented properly. In contrast, Microservices separate the various system functions into self-service. These services interact with one another using network calls that follow RPC, REST, or asynchronous communication using RabbitMQ with the queue-based message method. RabbitMQ is an open source message intermediary software that originally implemented the Advanced Message Queuing Protocol (AMQP) and has since expanded with a plug-in architecture to support Streamplug-ing Text Oriented Messagplug-ing Protocol (STOMP), Message Queuing Telemetry Transport (MQTT), and other protocols. In this study, RabbitMQ is used as asynchronous communication in a micro service system that facilitates the sending of distributed messages to several services.
PENDAHULUAN
RabbitMQ adalah sistem perpesanan sumber terbuka yang memungkinkan untuk mengintegrasikan aplikasi bersama-sama dengan menggunakan pesan dan antrian. RabbitMQ mengimplementasikan AMQP. Server RabbitMQ dibuat dalam bahasa pemrograman Erlang yang awalnya dirancang untuk industri telekomunikasi oleh Ericsson. Erlang mendukung aplikasi terdistribusi dan toleran terhadap kesalahan, oleh karena itu, merupakan bahasa yang ideal untuk digunakan untuk membangun sistem antrian pesan. Meskipun RabbitMQ dibangun dengan Erlang, RabbitMQ juga mendukung banyak platform pengembangan lain melalui klien perpustakaan. Karena warisan Erlang dalam bekerja dengan jaringan telekomunikasi, ini adalah platform yang ideal untuk menangani pesan untuk aplikasi perusahaan.
Server RabbitMQ adalah perantara pesan yang bertindak sebagai koordinator pesan untuk aplikasi yang ingin diintegrasikan. Ini berarti bahwa itu dapat memberi sistem platform yang sama untuk mengirim dan menerima pesan. Rabbit MQ berisi banyak fitur untuk membuat integrasi sistem Anda semudah mungkin. Ini termasuk:
• Keandalan: Dengan RabbitMQ dibangun di atas Erlang, broker pesan sudah dibangun di atas fondasi yang kokoh, berkinerja tinggi, andal, dan tahan lama. Pesan dapat disimpan ke disk untuk menjaga dari pesan yang hilang jika server di-restart, dan dapat mengirim pemberitahuan pengiriman pesan ke pengirim sehingga dapat memastikan bahwa pesan telah diterima dan disimpan.
• Routing: RabbitMQ bekerja dengan meneruskan pesan Anda melalui pertukaran sebelum disimpan dalam antrian. Ada berbagai jenis pertukaran yang memungkinkan Anda melakukan perutean, tetapi kami juga dapat bekerja dengan skenario perutean yang lebih kompleks dengan mengikat pertukaran bersama. • Pengelompokan dan Ketersediaan Tinggi: Untuk meningkatkan keandalan dan
ketersediaan RabbitMQ, ini dapat mengelompokkan beberapa server bersama-sama di jaringan lokal yang membentuk satu perantara pesan logis. Antrian juga dapat dicerminkan di beberapa server dalam sebuah cluster sehingga, jika terjadi kegagalan server, Anda tidak akan kehilangan pesan apa pun.
• Management Web User Interface (UI): RabbitMQ hadir dengan UI berbasis browser yang memungkinkan kita untuk mengelola pengguna dan izin mereka, pertukaran, antrian, dan banyak lagi. Alat ini adalah jendela luar biasa ke server RabbitMQ Anda.
• Antarmuka Baris Perintah: Selain UI Manajemen, terdapat alat baris perintah yang disebut "rabbitmqctrl" dan "rabbitmqadmin". Alat baris perintah ini menawarkan tingkat administrasi yang sama dengan UI web, dengan keuntungan tambahan yang memungkinkan kita untuk menggabungkan administrasi RabbitMQ dalam skrip.
• Manfaat utama penggunaan RabbitMQ adalah kenyataan bahwa ini adalah sistem lintas platform. Ini dapat menjalankan server Erlang dan RabbitMQ di berbagai platform termasuk Server Windows, Linux dan sistem Unix seperti (Debian / Ubuntu, Fedora, dan Solaris), Mac OS X, dan di berbagai platform cloud seperti Amazon EC2 dan Microsoft Azure. Rabbit MQ juga memiliki pustaka klien yang mendukung banyak lingkungan pemrograman yang berbeda seperti Microsoft .NET, Java, Erlang, Ruby, Python, PHP, Perl, C / C ++, Node.JS, Lisp, dan banyak lagi.
• Sifat lintas platform RabbitMQ ini berarti kami dapat memiliki klien yang ditulis dalam bahasa pemrograman yang berbeda dengan mudah mengirim dan
menerima pesan dari server RabbitMQ yang dihosting di salah satu lingkungan yang didukung.
• RabbitMQ dibangun dengan AMQP Versi 0-9-1. AMQP adalah protokol jaringan yang memungkinkan aplikasi klien untuk berkomunikasi dengan server broker middleware pengiriman pesan. Dalam kasus kami, klien akan menjadi aplikasi .NET kami dan servernya adalah server RabbitMQ atau cluster server.
Sistem Berbasis Pesan
Sistem berbasis pesan bekerja secara berbeda. Dalam sistem seperti ini, komponen tambahan diperkenalkan sebagai perantara daripada mengizinkan dua aplikasi / layanan untuk berkomunikasi secara langsung satu sama lain. Komponen tambahan ini dikenal sebagai Broker Pesan. Broker Pesan dikonfigurasi untuk meneruskan pesan dengan benar dari pengirim ke penerima yang dituju, seperti pada gambar 1.
Gambar 1. Broker Pesan
Pesan hanyalah sepotong informasi yang dikirim antara dua komponen. Memperkenalkan Pesan Broker memberikan beberapa keuntungan utama. Ini membantu dalam aplikasi decoupling. Karena aplikasi berinteraksi dengan menggunakan Perantara Pesan, mereka dapat berkomunikasi tanpa langsung terhubung satu sama lain. Setiap aplikasi hanya perlu mengikuti format data dari Pesan Broker dan tidak perlu menangani nuansa interaksi dengan layanan yang berbeda. Ini menyederhanakan penggabungan aplikasi heterogen dalam sistem.
Selain itu, ini menyediakan fungsionalitas antrian pesan yang sangat membantu saat memicu layanan intensif komputasi dengan waktu pemrosesan permintaan yang signifikan. Pengirim tidak lagi diblokir untuk menjalankan tugas lain. Menambahkan pesan ke antrian perantara memastikan bahwa permintaan tidak hilang bahkan jika penerima sedang down. Ini meningkatkan toleransi kesalahan sistem. Ini juga memfasilitasi dalam menangani lonjakan beban yang memungkinkan layanan penerima diskalakan secara proporsional untuk mengonsumsi sejumlah besar pesan. Dari perspektif yang lebih luas, Pesan Broker meningkatkan fleksibilitas sistem.
Namun, sangat penting untuk tidak mengabaikan fakta bahwa layanan pengiriman tidak mendapatkan respons yang sesuai dibandingkan dengan sistem respons-permintaan. Pengirim dapat tetap yakin bahwa permintaannya telah diterima dan dapat terus memproses tugas lain tanpa diblokir. Akibatnya, komunikasi menjadi tidak sinkron dan sering dibandingkan dengan email karena pengirim tidak mengharapkan tanggapan segera. Hal lain yang perlu diperhatikan adalah bahwa sistem sekarang sangat bergantung pada Pesan Broker. Jika Pesan Broker mati, sistem dikompromikan. Ini diatasi dengan menyebarkan cluster Pesan Broker.
RabbitMQ adalah Pesan Broker open-source yang sangat populer yang digunakan untuk membangun sistem berbasis pesan. Elemen kunci yang membentuk RabbitMQ - Produser, Konsumen, Bursa, Bindings, dan Antrean seperti pada gambar 2.
Gambar 2. Elemen pada RabbitMQ
Aplikasi yang menghasilkan pesan disebut Produser. Pesan-pesan ini dipublikasikan ke RabbitMQ Exchange . Exchange, bergantung pada konfigurasinya, meneruskan pesan ke satu atau beberapa Queue yang bertindak sebagai buffer untuk menyimpan pesan. Link antara Exchange dan Queue disebut Binding . Aplikasi yang mengkonsumsi dari Antrian disebut Konsumen. Penting untuk diperhatikan bahwa setelah Produser memublikasikan pesan ke Exchange, ia tidak menunggu tanggapan, yaitu tidak diblokir. Bentuk komunikasi ini difasilitasi oleh Advanced Message Queuing Protocol atau AMQP.
Advanced Message Queuing Protocol (AMQP)
AMQP [3] (Advanced Message Queuing Protocol) adalah protokol pengiriman pesan yang memungkinkan aplikasi klien yang sesuai untuk berkomunikasi dengan broker middleware pengiriman pesan yang sesuai. Model AMQP 0-9-1 memiliki pandangan dunia berikut: pesan diterbitkan ke bursa, yang sering dibandingkan dengan kantor pos atau kotak surat. Pertukaran kemudian mendistribusikan salinan pesan ke antrian menggunakan aturan yang disebut binding. Kemudian broker AMQP menyampaikan pesan kepada konsumen berlangganan antrian, atau konsumen mengambil / menarik pesan dari antrian sesuai permintaan.
Saat menerbitkan pesan, penerbit dapat menentukan berbagai atribut pesan. Beberapa dari meta-data ini dapat digunakan oleh broker, namun, sisanya tidak jelas bagi broker dan hanya digunakan oleh aplikasi yang menerima pesan tersebut.
Jaringan tidak dapat diandalkan, dan aplikasi mungkin gagal untuk memproses pesan oleh karena itu model AMQP memiliki gagasan tentang pengakuan pesan: ketika pesan dikirim ke konsumen, konsumen memberi tahu broker, baik secara otomatis atau segera setelah pengembang aplikasi memilih untuk melakukannya. Ketika pengakuan pesan digunakan, broker hanya akan menghapus pesan sepenuhnya dari antrian ketika menerima pemberitahuan untuk pesan itu (atau sekelompok pesan).
Dalam situasi tertentu, ketika pesan tidak dapat dirutekan, pesan dapat dikembalikan ke penerbit, dibuang, atau, jika broker menerapkan ekstensi, ditempatkan ke dalam apa yang disebut "antrian surat mati". Penerbit memilih cara menangani situasi
seperti ini dengan menerbitkan pesan menggunakan parameter tertentu. Antrian, pertukaran dan pengikatan secara kolektif disebut sebagai entitas AMQP.
Penggunaan RabbitMQ pada Layanan Mikro
Ini dirilis untuk umum dan menggabungkan Advanced Message Queuing Protocol (AMQP). Ini memberdayakan korespondensi berbasis pesan yang tidak bersamaan antar aplikasi. Ide inti dalam model perpesanan di RabbitMQ adalah bahwa produsen tidak pernah mengirim pesan apa pun secara langsung ke antrean. Produser hanya dapat mengirim pesan ke pertukaran. Exchange menerima pesan dari produsen di satu sisi dan di sisi lain itu mendorong mereka ke antrian. Pesan yang dikirim kira-kira digabungkan, misalnya kerangka kerja pengirim dan kolektor tidak perlu beroperasi penuh secara bersamaan.
Gambar 3. Implementasi RabbitMQ pada Layanan Mikro
AMQP memiliki beberapa sorotan yang membuatnya berbicara kepada desainer aplikasi. Sorotan paling dasar termasuk keputusan jenis pertukaran, kecerdikan pesan, dan spesialis yang disebarluaskan. Ada empat jenis pertukaran yang dicirikan dalam AMQP, termasuk pertukaran langsung, pertukaran topik, pertukaran fanout, dan pertukaran header. Jenis pertukaran pada RabbitMQ diantaranya adalah sebagai berikut:
• Pertukaran langsung mengirim pesan ke berbagai jalur / antrian seperti yang ditunjukkan oleh kunci perutean. Pesan dimuat disesuaikan antara konsumen daripada baris.
• Pertukaran topik mengirim pesan ke setiap baris / antrian yang kunci tautan / pengikatnya cocok dengan kunci perutean. Ini digunakan untuk menyebarkan model mempublikasikan / berlangganan.
• Pertukaran fanout bertindak seperti penyiar dan tidak mempertimbangkan kunci perutean. Pertukaran hanya mengirim pesan yang diterima ke semua antrian yang terikat ke bursa.
• Pertukaran header menggunakan header pesan untuk merutekan pesan ke antrian alih-alih kunci perutean.
Di RabbitMQ, exchange menyediakan mekanisme untuk mendukung logika perutean, yaitu produser mengirim pesan ke bursa dan kemudian ke antrian berdasarkan algoritma perutean. Kegagalan urutan paket dapat mengganggu efisiensi dan faktor throughput sistem. Dalam mekanisme pengakuan RabbitMQ diperkenalkan dengan menggunakan paling banyak sekali dan setidaknya sekali metode penyampaian. Dalam RabbitMQ ketika metode pengiriman dalam mode setidaknya sekali maka antrian mungkin terkuras jika pesan tidak dikonsumsi oleh konsumen dan tidak diakui. Dengan demikian, menghasilkan eksekusi RabbitMQ ke beban maksimum, yang akan menurunkan latensi.
KESIMPULAN
Sistem berbasis pesan merupakan bagian integral dari sistem terdistribusi. Hal ini memungkinkan komponen heterogen untuk berinteraksi dengan mulus melalui jaringan. Pada penelitian ini, terlihat bagaimana mengembangkan sistem berbasis pesan dengan RabbitMQ dapat memfasilitasi integrasi tugas-tugas asinkron seperti integrase sistem ke sistem lain. Di sistem integrasi, sisi klien dapat menerima respons dengan pengenal yang memungkinkannya melacak permintaan saat permintaan dijalankan secara asinkron di backend.
DAFTAR PUSTAKA
AMQP, https://www.cloudamqp.com/docs/amqp.html.
Bhat, Poojya, et al. 2020. Modern Messaging Queues - RabbitMQ, NATS and NATS Streaming. International Journal of Recent Technology and Engineering (IJRTE) ISSN: 2277-3878.
Ichi.pro. RabbitMQ: Mengembangkan Aplikasi Berbasis Pesan, https://ichi.pro/id/rabbitmq-mengembangkan-aplikasi-berbasis-pesan.
Madhu, M P, at al. 2019. Distributing Messages Using Rabbitmq with Advanced Message Exhanges. International Journal of Research Studies in Computer Science and Engineering (IJRSCSE). ISSN 2349-4840.
Pathak, Abhishek, at al. 2019. Internet of Things: Quality of Services of RABBITMQ & KAFKA. International Journal of Innovative Technology and Exploring Engineering (IJITEE) ISSN: 2278-3075.
Udhayashankar. S, at al. 2013. A Novel Security Technique in Message Passing Interface Systems. International Journal of Computer Science and Mobile Computing.