Blog AWS Indonesia

Integrasi Aplikasi Menggunakan Antrian dan Pesan

Dalam tulisan blog sebelumnya dalam seri olahpesan (messaging) ini, kami memberikan tinjauan tentang olahpesan dan juga menjelaskan karakteristik umum yang harus dipertimbangkan ketika mengevaluasi teknologi kanal olahpesan. Dalam tulisan ini, kami akan menjelaskan beberapa makna terkait pemrosesan berbasis antrian, diantaranya terkait penggunaannya dalam perancangan sistem yang fleksibel, dan bagaimana penerapan pada kasus Anda. AWS menawarkan dua layanan berbasis antrian yaitu Amazon Simple Queue Service (SQS) dan Amazon MQ. Kami akan fokus pada SQS di tulisan ini.

Blok-blok Pembangun Sistem

Dalam dunia digital, bahkan dalam desain yang paling dasar dari suatu sistem berbasis web memerlukan penggunaan antrian (queue) untuk mengintegrasikan aplikasi. SQS adalah layanan antrian pesan yang aman, serverless, tahan lama (durable), dan memiliki ketersediaan tinggi (high available). SQS menyediakan REST API yang mudah untuk membuat queue, dan juga mengirim, menerima, serta menghapus pesan.

Memproduksi Pesan

Pembuat pesan (produsen) adalah proses yang melakukan pemanggilan API SendMessage dari SQS. SQS mendukung dua jenis queue: standar dan first-in-first-out (FIFO). Queue standar menyediakan pengurutan pesan secara best effort sementara FIFO queue menyediakan pengurutan pesan degan mekasisme masuk pertama keluar pertama (first in first out). Pesan dapat dikirim baik sebagai pesan tunggal atau dalam batch. Antrian standar dapat mendukung throughput tanpa batas dengan menambahkan sebanyak mungkin produsen bersamaan, sedangkan antrian FIFO dapat mendukung hingga 300 TPS tanpa batching dan 3000 TPS dengan batching.

Dalam hal pengiriman pesan, standar SQS mendukung pengiriman “setidaknya-sekali” (“at-least-once”), yang berarti bahwa pesan akan dikirimkan setidaknya sekali, tetapi kadang-kadang lebih dari satu salinan pesan akan dikirimkan. SQS FIFO menyediakan pengiriman “tepat hanya sekali” (“exactly once”), yang berarti dapat mendeteksi pesan duplikat.

Mengkonsumsi Pesan

Konsumen pesan adalah proses yang membuat panggilan API ReceiveMessage di SQS. Pesan dari antrian dapat diproses baik dalam batch maupun satu pesan dalam satu waktu. Setiap pendekatan memiliki kelebihan dan kekurangan.

  • Pemrosesan batch (batch processing): Ini adalah di mana setiap pesan dapat diproses secara independen, dan kesalahan pada satu pesan tidak akan mengganggu seluruh batch. Pemrosesan batch memberikan throughput terbanyak untuk pemrosesan, dan juga yang paling optimal dalam hal sumber daya yang diperlukan dalam membaca pesan.
  • Pemrosesan pesan tunggal (single message processing): Pemrosesan pesan tunggal biasanya digunakan dalam skenario di mana setiap pesan dapat memicu beberapa proses di sisi konsumen. Jika terjadi kesalahan, pencobaan ulang (retry) hanya dilakukan pada satu pesan.

Untuk menjaga urutan pemrosesan, antrian FIFO biasanya dikonsumsi oleh satu proses. Pesan lintas message groups masih dapat diproses secara paralel. Namun, batas throughput keseluruhan masih akan berlaku untuk antrian FIFO.

SQS mendukung polling dengan durasi panjang (long polling) dan singkat (short polling) pada antrian. Polling singkat akan mengambil sampel sejumlah server dan akan mengembalikan pesan atau memberikan respon kosong jika tidak ada pesan di server tersebut. Polling dengan durasi panjang akan mengkueri semua server dan segera kembali jika ada pesan. Polling durasi panjang dapat mengurangi biaya dengan mengurangi jumlah panggilan dengan respon kosong. Dapatkan lebih banyak detail dan contoh kode untuk mengirim dan menerima pesan.

Sangat mudah untuk melakukan polling pesan tetapi cara ini memiliki overhead karena menjalankan proses secara terus menerus. Dalam beberapa situasi mungkin sulit untuk memantau proses tersebut dan memecahkan masalah jika terjadi kesalahan. Integrasi SQS dengan AWS Lambda akan menghindarkan Anda dari rumitnya pembuatan logika polling karena ditangani oleh Lambda agent.

Dapatkan detail lebih lanjut untuk SQS sebagai sumber kejadian untuk Lambda di tulisan blog ini: AWS Lambda Adds Amazon Simple Queue Service to Supported Event Sources. Sumber kejadian untuk Lambda ini mendukung antrian standar maupun FIFO.

Manfaat

Pemrosesan berbasis antrian dapat melindungi sistem backend seperti basisdata relasional dari lonjakan lalu lintas yang tak terduga di sisi front-end. Anda dapat memisahkan (decouple) logika pemrosesan dengan menggunakan antrian ditengah (intermediate queue).

Sebagai contoh sebuah skenario yang melibatkan aplikasi web untuk memesan produk yang terkait dengan acara TV. Sangat mungkin sebuah sistem pemesanan dan pembayaran akan bergantung pada sebuah database relasional tradisional. Selama sesi puncak acara, antrian dapat digunakan untuk mengontrol lalu lintas ke sistem pemesanan dan pembayaran tersebut. Dalam diagram berikut ini kami tunjukkan bagaimana permintaan aplikasi web dibuat bertahap dalam suatu antrian, sementara konsumsi pengguna di backend didasarkan pada kapasitas basisdata.

Penanganan Kesalahan

Pemrosesan pesan asinkron memberikan tantangan unik dalam hal penanganan kesalahan sebab kesalahan hanya termanifestasi sebagai entri log di sisi produsen atau konsumen dan menghasilkan timbunan (backlog) dalam pemrosesan. Untuk menangani kesalahan secara elegan, persyaratan pertama adalah dengan mengatasi sifat natural kesalahan tersebut. Dalam hal kesalahan bersifat sementara, mungkin akan membantu jika dilakukan pencobaan ulang (retry) setelah menunggu dalam waktu singkat dan kemudian akhirnya dipindah ke antrian surat mati (dead letter queue) jika pencobaan berulang tetap gagal. Skenario kesalahan lainnya dapat berupa kasus di mana data itu sendiri memang buruk dan kesalahan tidak bisa diperbaiki, bahkan setelah upaya beberapa kali. Dalam kasus seperti itu, proses di konsumen perlu membuat ketetapan dan dapat langsung memindahkan pesan ke antrian kesalahan (error queue).

Dalam beberapa kasus, karena arsitekturnya yang sangat terdistribusi, Standard SQS dapat mengirimkan pesan duplikat, yang dapat mengakibatkan duplicate key errors di konsumen. Cara terbaik untuk mengurangi hal tersebut adalah dengan membuat konsumen idempoten sehingga pemrosesan pesan yang sama beberapa kali menghasilkan hasil yang sama.

Kesimpulan

Di tulisan ini, kami menjelaskan pentingnya olahpesan dalam membangun aplikasi terdistribusi, berbagai aspek pemrosesan berbasis antrian menggunakan SQS seperti mengirim dan menerima pesan, SQS Standar versus FIFO , dan skenario penanganan kesalahan umum. Kami juga membahas menggunakan SQS sebagai sumber kejadian untuk AWS Lambda. Silakan merujuk ke tulisan blog berikut untuk menggunakan pesan dalam berbagai pola integrasi:

Dalam seri olahpesan ini

Sekarang setelah Anda memahami integrasi aplikasi menggunakan antrian dan pesan, pastikan untuk membaca dua posting pertama dalam seri ini:

Berikutnya: Pemrosesan berbasis-Stream yang untuk Wawasan Waktu-nyata.


Tulisan ini berasal dari artikel Application Integration Using Queues and Messages yang ditulis oleh Mithun Mallick dan diterjemahkan oleh Eryan Ariobowo.

Petra Barus

Petra Barus

Petra Novandi Barus is Developer Advocate at Amazon Web Services based in Jakarta. He is passionate in helping startups and developers in Indonesia to reinvent on behalf their customers. Prior to AWS, Petra co-founded UrbanIndo.com as CTO. The startup became the largest real-estate portal in Indonesia and then was acquired by 99.co. During that time Petra had been a happy AWS customer for 8 years. Petra is also very active in local tech communities