Gambaran Umum Antrean

Bagian ini memperkenalkan konsep umum dan inti di balik komunikasi antrean. Bagian selanjutnya membahas detail tentang bagaimana konsep antrean yang dijelaskan di sini dimanifestasikan di Windows Communication Foundation (WCF).

Konsep Dasar Antrean

Saat merancang aplikasi terdistribusi, memilih transportasi yang tepat untuk komunikasi antara layanan dan klien adalah penting. Beberapa faktor memengaruhi jenis transportasi yang akan digunakan. Salah satu faktor penting—isolasi antara layanan, klien, dan transportasi—menentukan penggunaan transportasi yang diantrekan atau transportasi langsung, seperti TCP atau HTTP. Karena sifat transportasi langsung seperti TCP dan HTTP, komunikasi berhenti sama sekali jika layanan atau klien berhenti berfungsi atau jika jaringan gagal. Layanan, klien, dan jaringan harus berjalan pada saat yang sama agar aplikasi dapat bekerja. Transportasi antrean menyediakan isolasi, yang berarti bahwa jika layanan atau klien gagal atau jika hubungan komunikasi antara mereka gagal, klien dan layanan dapat terus berfungsi.

Antrean menyediakan komunikasi yang andal bahkan dengan kegagalan di pihak yang berkomunikasi atau jaringan. Antrean menangkap dan menyampaikan pesan yang dipertukarkan antara pihak-pihak yang berkomunikasi. Antrean biasanya didukung oleh beberapa jenis toko, yang dapat berubah-ubah atau tahan lama. Antrean menyimpan pesan dari klien atas nama layanan dan kemudian meneruskan pesan ini ke layanan. Antrean tidak langsung menyediakan isolasi kegagalan yang dipastikan oleh salah satu pihak, sehingga menjadikannya mekanisme komunikasi yang disukai untuk sistem ketersediaan tinggi dan layanan yang terputus. Indireksi datang dengan biaya latensi tinggi. Latensi adalah penundaan waktu antara waktu klien mengirim pesan dan waktu layanan menerimanya. Ini berarti bahwa sekali sebuah pesan dikirim, Anda tidak tahu kapan pesan itu dapat diproses. Sebagian besar aplikasi yang antri mengatasi latensi tinggi. Ilustrasi berikut menunjukkan model konseptual komunikasi antrean.

Model of queued communication

Model konseptual komunikasi antrean

Pada kenyataannya, antrean adalah konsep terdistribusi. Dengan demikian, mereka dapat bersifat lokal bagi salah satu pihak atau jarak jauh bagi kedua belah pihak. Biasanya, antrean bersifat lokal untuk layanan. Dalam konfigurasi ini, klien tidak dapat bergantung pada konektivitas ke antrean jarak jauh agar selalu tersedia. Demikian pula, antrean harus tersedia secara independen dari ketersediaan layanan membaca dari antrean. Manajer antrean mengelola kumpulan antrean. Ini bertanggung jawab untuk menerima pesan yang dikirim ke antreannya dari manajer antrean lainnya. Itu juga bertanggung jawab untuk mengelola konektivitas ke antrean jarak jauh dan mentransfer pesan ke antrean jarak jauh tersebut. Untuk memastikan ketersediaan antrean meskipun klien atau aplikasi layanan gagal, manajer antrean biasanya dijalankan sebagai layanan eksternal.

Ketika klien mengirim pesan ke antrean, alamat pesan ke antrean target, yang mana antrean dikelola oleh manajer antrean layanan. Manajer antrean pada klien mengirimkan pesan ke antrean transmisi (atau keluar). Antrean transmisi adalah antrean pada manajer antrean klien yang menyimpan pesan untuk transmisi ke antrean target. Manajer antrean kemudian menemukan jalur ke manajer antrean yang memiliki antrean target dan mentransfer pesan ke antrean tersebut. Untuk memastikan komunikasi yang andal, manajer antrean menerapkan protokol transfer yang andal untuk mencegah kehilangan data. Manajer antrean tujuan menerima pesan yang ditujukan ke antrean target yang dimilikinya dan menyimpan pesan tersebut. Layanan membuat permintaan untuk membaca dari antrean target, di mana manajer antrean kemudian mengirimkan pesan ke aplikasi tujuan. Ilustrasi berikut menunjukkan komunikasi antara empat pihak.

Queued Application Diagram

Komunikasi antrean dalam skenario penyebaran tipikal

Dengan demikian, manajer antrean menyediakan isolasi yang diperlukan sehingga pengirim dan penerima dapat secara independen gagal tanpa mempengaruhi komunikasi yang sebenarnya. Manfaat indireksi ekstra yang disediakan oleh antrean juga memungkinkan beberapa instans aplikasi untuk membaca dari antrean yang sama, sehingga pekerjaan farming di antara node mencapai throughput yang lebih tinggi. Oleh karena itu, tidak jarang melihat antrean digunakan untuk mencapai persyaratan skala dan throughput yang lebih tinggi.

Antrean dan Transaksi

Transaksi memungkinkan Anda untuk mengelompokkan satu set operasi bersama sehingga jika satu operasi gagal, semua operasi gagal. Contoh cara menggunakan transaksi adalah ketika seseorang menggunakan ATM untuk mentransfer $1.000 dari rekening tabungannya ke rekening gironya. Ini memerlukan operasi berikut:

  • Menarik $1.000 dari rekening tabungan.

  • Menyetorkan $1.000 ke rekening giro.

Jika operasi pertama berhasil dan $1.000 ditarik dari rekening tabungan tetapi operasi kedua gagal, $1.000 hilang karena sudah ditarik dari rekening tabungan. Untuk menjaga akun dalam status valid, jika satu operasi gagal, kedua operasi harus gagal.

Dalam pesan transaksional, pesan dapat dikirim ke antrean dan diterima dari antrean di bawah transaksi. Dengan demikian, jika sebuah pesan dikirim dalam suatu transaksi dan transaksi tersebut dibatalkan, maka hasilnya seolah-olah pesan tersebut tidak pernah dikirim ke antrean. Demikian pula jika suatu pesan diterima dalam suatu transaksi dan transaksi tersebut dibatalkan, maka hasilnya seolah-olah pesan tersebut tidak pernah diterima. Pesan tetap dalam antrean untuk dibaca.

Karena latensi tinggi, saat Anda mengirim pesan, Anda tidak tahu berapa lama waktu yang dibutuhkan untuk mencapai antrean targetnya, Anda juga tidak tahu berapa lama waktu yang dibutuhkan layanan untuk memproses pesan. Karena itu, Anda tidak ingin menggunakan satu transaksi pun untuk mengirim pesan, menerima pesan, dan kemudian memproses pesan. Ini menciptakan transaksi yang tidak dilakukan untuk waktu yang tidak ditentukan. Ketika klien dan layanan berkomunikasi melalui antrean menggunakan transaksi, dua transaksi terlibat: satu di klien dan satu di layanan. Ilustrasi berikut menunjukkan batas-batas transaksi dalam komunikasi antrean yang umum.

Queue with transactions

Komunikasi antrean menunjukkan transaksi terpisah untuk pengambilan dan pengiriman

Transaksi klien memproses dan mengirim pesan. Ketika transaksi dilakukan, pesan berada dalam antrean transmisi. Pada layanan, transaksi membaca pesan dari antrean target, memproses pesan, dan kemudian melakukan transaksi. Jika kesalahan terjadi selama pemrosesan, pesan digulung kembali dan ditempatkan di antrean target.

Komunikasi Asinkron Menggunakan Antrean

Antrean menyediakan sarana komunikasi yang tidak sinkron. Aplikasi yang mengirim pesan menggunakan antrean tidak bisa menunggu pesan diterima dan diproses oleh penerima karena latensi tinggi yang diperkenalkan oleh pengelola antrean. Pesan dapat tetap berada dalam antrean untuk waktu yang jauh lebih lama daripada yang dimaksudkan oleh aplikasi. Untuk menghindari hal ini, aplikasi dapat menentukan nilai Time-To-Live pada pesan. Nilai ini menentukan berapa lama pesan harus tetap berada dalam antrean transmisi. Jika nilai waktu ini terlampaui, dan pesan masih belum dikirim ke antrean target, pesan dapat ditransfer ke antrean surat gagal.

Ketika pengirim mengirim pesan, pengembalian dari operasi kirim menyiratkan bahwa pesan hanya sampai ke antrean transmisi pada pengirim. Dengan demikian, jika ada kegagalan dalam mengirimkan pesan ke antrean target, aplikasi pengirim tidak dapat segera mengetahuinya. Untuk mencatat kegagalan tersebut, pesan yang gagal ditransfer ke antrean surat gagal.

Kesalahan apa pun, seperti pesan yang gagal mencapai antrean target atau Time-To-Live kedaluwarsa, harus diproses secara terpisah. Oleh karena itu, tidak jarang aplikasi yang antri menulis dua set logika:

  • Logika klien dan layanan normal untuk mengirim dan menerima pesan.

  • Logika kompensasi untuk menangani pesan dari transmisi atau pengiriman yang gagal.

Bagian berikut membahas konsep-konsep ini.

Pemrograman Antrean Surat Gagal

Antrean surat gagal berisi pesan yang gagal mencapai antrean target karena berbagai alasan. Alasannya dapat berkisar dari pesan kedaluwarsa hingga masalah konektivitas yang mencegah transfer pesan ke antrean target.

Biasanya, aplikasi dapat membaca pesan dari antrean surat gagal di seluruh sistem, menentukan apa yang salah, dan mengambil tindakan yang sesuai, seperti memperbaiki kesalahan dan mengirim ulang pesan atau mencatatnya.

Pemrograman Antrean Pesan Racun

Setelah pesan masuk ke antrean target, layanan mungkin berulang kali gagal memproses pesan. Misalnya, aplikasi membaca pesan dari antrean di bawah transaksi dan memperbarui database mungkin menemukan database terputus sementara. Dalam hal ini, transaksi dibatalkan, transaksi baru dibuat, dan pesan dibaca ulang dari antrean. Upaya kedua mungkin berhasil atau gagal. Dalam beberapa kasus, tergantung pada penyebab kesalahan, pesan mungkin berulang kali gagal dikirim ke aplikasi. Dalam hal ini, pesan tersebut dianggap sebagai "racun". Pesan tersebut dipindahkan ke antrean racun yang dapat dibaca oleh aplikasi penanganan racun.

Lihat juga