ApsaraMQ for RabbitMQ adalah layanan messaging yang sepenuhnya dikelola (fully managed) berbasis arsitektur penyimpanan terdistribusi dengan ketersediaan tinggi. Layanan ini menerapkan protokol AMQP 0-9-1 dan kompatibel dengan klien RabbitMQ open-source. Dibandingkan dengan RabbitMQ open-source, ApsaraMQ for RabbitMQ mengatasi berbagai masalah stabilitas umum, seperti akumulasi pesan dan isu split-brain, serta menawarkan keunggulan layanan messaging cloud, termasuk konkurensi tinggi, penerapan terdistribusi, dan skalabilitas fleksibel.
Topik ini membandingkan ApsaraMQ for RabbitMQ dengan RabbitMQ open-source dari segi fitur, skalabilitas, keandalan, exchange, dan antrian.
Untuk daftar lengkap keunggulan, lihat Keunggulan.
Fitur
Feature | ApsaraMQ for RabbitMQ | Open-source RabbitMQ |
Protocol | AMQP 0-9-1 | AMQP 0-9-1, AMQP 1.0, STOMP, MQTT, HTTP(S), dan WebSocket |
Client SDK | Semua SDK klien RabbitMQ open-source (bahasa apa pun, versi apa pun) | SDK open-source |
Delayed messages | Presisi tingkat detik, kompatibel dengan Plugin x-delayed-message dan metode TTL. Lihat Pesan tertunda. | Memerlukan plug-in atau metode kedaluwarsa TTL dan transfer pesan |
Transactional messages | Tidak didukung | Didukung |
Ordered messages | Didukung. Lihat Konsumsi pesan terurut. | Didukung |
Message priority | Hanya untuk instans spesifikasi khusus | Didukung |
Message retry | Pengiriman ulang otomatis ketika pesan tidak diakui (acknowledged) dalam periode timeout. Lihat Kebijakan pengulangan. | Tidak ada mekanisme retry bawaan. Pesan yang tidak diakui akan memblokir antrian, yang dapat menyebabkan akumulasi dan gangguan layanan. |
Authentication | Username dan password kustom, atau kredensial yang dihasilkan dari Pasangan Kunci Akses (AccessKey pair) di Resource Access Management (RAM). Lihat Username dan password statis dan Kredensial RAM. | Username dan password kustom |
Access control | Model izin open-source dan otorisasi berbasis kebijakan RAM. Lihat Manajemen izin dan Kontrol akses RAM. | Model izin open-source |
Observability
Capability | ApsaraMQ for RabbitMQ | Open-source RabbitMQ |
Dashboard | Metrik bawaan pada level vhost, exchange, dan queue. Integrasi Prometheus dan Grafana telah dikonfigurasi sebelumnya. Lihat Dashboard. | Dua opsi: (1) Gunakan UI management untuk metrik, tetapi bangun sendiri lapisan penyimpanan dan visualisasi Anda. (2) Siapkan Prometheus dan Grafana secara manual. |
Message tracing | Tampilan jejak berbasis konsol yang menampilkan siklus hidup pesan secara lengkap. Lakukan kueri berdasarkan antrian, ID pesan, atau waktu pemrosesan. Lihat Jejak pesan. | Data jejak ditulis ke file log di sisi server, sehingga proses kueri dan analisis akar masalah menjadi lambat. |
Perintah AMQP
Tabel berikut membandingkan perilaku perintah AMQP BasicCancel antara ApsaraMQ for RabbitMQ dan RabbitMQ open-source.
Item | ApsaraMQ for RabbitMQ | Open-source RabbitMQ |
| Membatalkan langganan konsumen; pesan yang telah dikirimkan akan dimasukkan kembali ke antrian (requeued). | Membatalkan langganan konsumen; pesan yang telah dikirimkan tetap dalam status Unacked. |
Perbedaan ini penting dalam troubleshooting pengiriman pesan setelah pembatalan konsumen. Di ApsaraMQ for RabbitMQ, requeuing setelah BasicCancel memungkinkan pesan yang belum diakui dikirim ulang ke konsumen lain. Di RabbitMQ open-source, pesan tersebut tetap dalam status unacknowledged hingga channel ditutup atau timeout berakhir.
Skalabilitas dan keandalan
Dimension | ApsaraMQ for RabbitMQ | Open-source RabbitMQ |
Cluster throughput | Tidak memiliki batas atas tetap. Arsitektur terdistribusi tanpa master mendukung scale-out horizontal. | Dibatasi oleh kapasitas node tunggal. Scaling up memerlukan peningkatan perangkat keras. |
Single-queue throughput | Tidak memiliki batas atas tetap. Setiap antrian melakukan scaling horizontal di seluruh node. | Dibatasi oleh node yang meng-host antrian tersebut. |
Connections | Skala sesuai kluster. Menambahkan node meningkatkan kapasitas koneksi tanpa menurunkan performa. | Dibatasi oleh sumber daya mesin tunggal. |
Delayed messages | Presisi tingkat detik, throughput tinggi, siap pakai. | Memerlukan pengaturan plug-in. |
High availability | Penerapan multi-zona dengan pemisahan storage-compute. Node compute yang rusak dapat dengan cepat dihapus dan diisolasi. Data disimpan dalam bentuk triplikat. | Mengandalkan mirror queue atau quorum queue. Implementasi ini rentan terhadap isu split-brain. |
Message accumulation | Menjaga performa stabil bahkan dengan backlog besar. Operasi normal kluster tidak terganggu. | Backlog besar mengonsumsi memori node dan dapat memicu kegagalan kehabisan memori (out-of-memory), sehingga mengganggu layanan. |
Elastic scaling | Lakukan scale out atau scale in dengan menambah atau menghapus node kluster sesuai kebutuhan. Instans serverless ditagih berdasarkan volume pesan, sehingga menghilangkan kebutuhan perencanaan kapasitas di muka. | Kapasitas dibatasi oleh mesin terbesar dalam kluster. Scaling memerlukan peningkatan perangkat keras atau repartisi kluster. |
Self-healing | Sistem inspeksi bawaan secara otomatis mendeteksi dan menyelesaikan deadlock serta kegagalan node. | Tidak ada self-healing otomatis. Diperlukan intervensi manual. |
Exchanges
ApsaraMQ for RabbitMQ mendukung jenis dan properti exchange yang sama dengan RabbitMQ open-source.
Property | ApsaraMQ for RabbitMQ | Open-source RabbitMQ |
Types | direct, fanout, headers, topic, x-delayed-message, x-consistent-hash | direct, fanout, headers, topic, x-delayed-message, x-consistent-hash |
Persistence | Persistent dan non-persistent | Persistent dan non-persistent |
Auto-delete | Didukung | Didukung |
Internal | Didukung | Didukung |
Alternate exchange | Didukung | Didukung |
Consistent hash exchange | Didukung | Didukung |
Antrian
ApsaraMQ for RabbitMQ menyembunyikan keputusan infrastruktur tingkat antrian. Semua antrian berjalan di atas kluster ketersediaan tinggi terdistribusi, sehingga tidak perlu memilih antara jenis antrian classic dan quorum atau mengonfigurasi replikasi secara manual.
Property | ApsaraMQ for RabbitMQ | Open-source RabbitMQ |
Queue type | Kluster HA terdistribusi (tidak perlu konfigurasi) | Pemilihan manual diperlukan: classic (mirror queue) atau quorum queue |
Node assignment | Dikelola sepenuhnya, tidak perlu penugasan manual | Pemilihan node manual diperlukan |
Retry policy | Pengiriman ulang otomatis saat terjadi timeout konsumsi. Lihat Kebijakan pengulangan. | Tidak ada pengiriman ulang berbasis timeout |
Persistence | Persistent dan non-persistent | Persistent dan non-persistent |
Max length / max length bytes / max in-memory length / max in-memory bytes | Tidak perlu konfigurasi. Mendukung akumulasi pesan besar tanpa tekanan memori. | Harus dikonfigurasi untuk mencegah kegagalan kehabisan memori akibat akumulasi tak terbatas. |
Delivery limit | Nilai default 16 (statis). Lihat Kebijakan pengulangan. | Konfigurasi manual diperlukan |
Dead-letter exchange | Didukung | Didukung |
Dead-letter routing key | Didukung | Didukung |
Single active consumer | Didukung. Lihat Konsumsi pesan terurut. | Didukung |
Action
Tabel berikut membandingkan perilaku perintah AMQP BasicCancel antara ApsaraMQ for RabbitMQ dan RabbitMQ open-source.
Item | ApsaraMQ for RabbitMQ | Open-source RabbitMQ |
BasicCancel | Membatalkan langganan konsumen; pesan yang telah dikirimkan akan dimasukkan kembali ke antrian (requeued). | Membatalkan langganan konsumen; pesan yang telah dikirimkan tetap dalam status Unacked. |