Baru-baru ini saya mulai mempelajari nuansa arsitektur komputer yang dapat diskalakan dan perusahaan, dan salah satu komponen utama adalah antrian pengiriman pesan. Untuk mempelajari semaksimal mungkin dari paradigma pemrograman apa pun, saya mencoba mengimplementasikan versi saya sendiri dari layanan antrian perpesanan.
Sejauh ini, desain awal saya berjalan pada pendengar soket berulir, tetapi untuk mencegah pesan yang sama diunduh dua kali oleh dua node pemrosesan yang terpisah, register indeks antrian pesan dikunci saat pembacaan dimulai, dan dibuka kuncinya setelah register dilakukan. diperbarui. Dengan demikian, ini meniadakan perlunya untuk berulir, dan berarti bahwa ada batas untuk ukuran sistem yang dapat diskalakan berdasarkan kecepatan pemrosesan server yang digunakan layanan antrian pengiriman pesan.
Cara menyiasatinya adalah menjalankan layanan antrian pesan pada beberapa server, tetapi ini akan meningkatkan kemungkinan pesan yang sama diunduh dua kali. Satu-satunya cara untuk mencegah masalah seperti itu terjadi adalah dengan menyertakan panggilan balik pencabutan yang (setelah server, atau bahkan utas pada server tunggal, telah menyinkronkan informasi mereka dan mendeteksi penerbitan ulang seperti itu) akan memerintahkan node pemrosesan untuk menghentikannya. pekerjaan saat ini, dan permintaan ulang antrian pesan untuk pesan berikutnya, tetapi sekali lagi, akan ada langit-langit di mana sebagian besar lalu lintas yang dikirim adalah sinkronisasi, dan pencabutan panggilan balik, menyebabkan kemacetan dan memperlambat pemrosesan informasi sehingga banyak node pemrosesan akan melakukan operasi nol dan membuang-buang waktu.
Cara terakhir yang dapat saya pikirkan untuk mengatasi masalah ini adalah memiliki setiap server antrian pesan (dan setiap utas di setiap server) akan memiliki offset spesifik ke mana dalam antrian yang dicari, tetapi mungkin memiliki masalah berdasarkan pada jenis aplikasi, terutama jika pemrosesan diperlukan untuk dilakukan dalam urutan tertentu.
Jadi, semua yang dikatakan, apakah ada desain arsitektur antrian pesan yang dapat menunjukkan kepada saya bagaimana layanan antrian pesan tingkat perusahaan yang ada menghindari masalah ini?