Protokol Komunikasi Microsoft SQL Server Service Broker

Berlaku untuk: SQL Server Azure SQL Managed Instance

Service Broker menggunakan protokol khusus broker untuk berkomunikasi dengan broker jarak jauh. Broker mengelola koneksi secara terpisah dari kumpulan koneksi klien normal. Agar dua instans SQL Server bertukar pesan Service Broker, setiap instans harus dapat mengirim lalu lintas TCP/IP ke port yang digunakan instans lain untuk komunikasi Service Broker. Berdasarkan konvensi, Service Broker sering menggunakan port 4022 untuk komunikasi broker-ke-broker. Namun, port yang tepat ditentukan ketika titik akhir dibuat.

Lapisan Protokol

Service Broker mengambil pendekatan berlapis untuk komunikasi. Setiap lapisan dibangun pada lapisan yang mendasar untuk membantu memastikan pengiriman yang andal. Pendekatan ini memungkinkan aplikasi untuk beroperasi tanpa mengetahui lokasi layanan jarak jauh atau transportasi fisik yang digunakan broker untuk berkomunikasi. Dalam kebanyakan kasus, protokol ini transparan untuk aplikasi. Namun, memahami peran yang dimainkan setiap lapisan protokol dapat membantu dalam memecahkan masalah dengan aplikasi.

Protokol tingkat tertinggi yang digunakan broker adalah protokol dialog. Lapisan protokol dialog menangani transmisi pesan yang andal dan berurutan. Lapisan protokol dialog menghasilkan nomor urut untuk pesan, menghasilkan pesan pengakuan, mengirimkan pesan ke antrean yang tepat, dan fragmen dan menyusun ulang pesan. Protokol dialog menangani autentikasi dan enkripsi untuk dialog.

Protokol dialog menggunakan protokol broker yang berdekatan untuk mengirimkan fragmen pesan. Protokol broker yang berdekatan menangani transmisi jaringan yang dipertukarkan antara dua instans broker.

Protokol broker yang berdekatan menggunakan protokol transportasi, seperti TCP/IP, untuk memindahkan pesan dari broker ke broker.

Protokol Dialog

Protokol dialog mengelola pola pengiriman tepat sekali dalam urutan (EOIO) untuk pesan pada percakapan. Protokol ini tidak menjelaskan format yang digunakan pesan Service Broker pada jaringan. Sebaliknya, protokol menentukan langkah-langkah logis yang diperlukan untuk percakapan yang dapat diandalkan. Protokol dialog menangani tugas yang diperlukan untuk pengiriman yang andal, termasuk menghasilkan dan memproses pesan pengakuan.

Setiap sisi percakapan adalah titik akhir dalam lapisan protokol dialog Tampilan katalog sys.conversation_endpoints memperlihatkan informasi tentang titik akhir protokol dialog. Titik akhir percakapan ada selama masa percakapan.

Protokol Broker yang Berdekatan

Lapisan protokol broker yang berdekatan menangani mekanisme komunikasi antara dua instans SQL Server. Lapisan ini mengodekan setiap fragmen pesan ke dalam format standar yang cocok untuk transmisi melalui jaringan. Tidak seperti lapisan protokol dialog, lapisan protokol yang berdekatan mengetahui transportasi jaringan yang digunakan, dan memformat fragmen pesan dengan tepat. Efeknya, lapisan protokol broker yang berdekatan menyediakan lapisan abstraksi antara lapisan protokol dialog dan lapisan protokol transportasi.

Setiap koneksi jaringan Service Broker adalah titik akhir di lapisan protokol yang berdekatan. Tampilan manajemen dinamis sys.dm_broker_connections menunjukkan informasi tentang koneksi jaringan Service Broker. Service Broker mempertahankan koneksi jaringan saat pesan dipertukarkan secara aktif. Service Broker menutup koneksi jaringan ketika tidak ada pesan yang dikirim atau diterima melalui koneksi jaringan untuk waktu yang singkat.

Protokol Transportasi

Lapisan protokol transportasi menangani transmisi jaringan yang sebenarnya. Lapisan ini berada di luar Service Broker. Misalnya, pesan ke broker yang berjalan dalam instans SQL Server yang berbeda menggunakan TCP/IP sebagai lapisan protokol transportasi.

Titik akhir Service Broker menetapkan opsi untuk protokol transportasi. SQL Server tidak berisi titik akhir Service Broker secara default. Untuk informasi selengkapnya tentang membuat titik akhir Service Broker, lihat Cara: Mengaktifkan Jaringan Broker Layanan (Transact-SQL).

Pemrosesan Pesan Broker Layanan

Service Broker menggunakan dua kategori pesan yang berbeda. Pesan berurutan adalah pesan yang harus dikirimkan ke aplikasi tepat sekali, secara berurutan. Pesan yang tidak berurutan adalah pesan yang dapat segera diproses, terlepas dari urutan di mana pesan tiba.

Service Broker menggunakan pesan berurutan untuk semua jenis pesan yang ditentukan pengguna, pesan dialog akhir, dan pesan kesalahan yang dibuat oleh aplikasi. Setiap pesan berurutan memiliki nomor urut. Instans yang berasal dari pesan membuat nomor urutan pesan dan menetapkan nomor urut ke pesan. Broker penerima menggunakan nomor urutan pesan untuk memesan pesan yang disediakannya ke aplikasi. Untuk dialog tertentu, aplikasi selalu menerima pesan dengan nomor urut terendah terlebih dahulu. Service Broker juga menggunakan nomor urutan pesan untuk mendeteksi pesan duplikat. Ketika lapisan protokol dialog menerima dua pesan pada dialog yang sama dengan nomor urutan yang sama, lapisan protokol dialog menganggap pesan akan diduplikasi dan membuangnya.

Service Broker menggunakan pesan yang tidak berurut untuk pesan pengakuan khusus dan pesan kesalahan yang dibuat oleh Service Broker. Service Broker tidak mengambil tindakan pencegahan khusus untuk mengirimkan pesan yang tidak berurut. Namun, perhatikan bahwa Service Broker membuat pesan yang tidak berurut sebagai respons terhadap pesan masuk. Oleh karena itu, jika pesan yang tidak berurut hilang, pengirim akan mencoba kembali pesan asli; penerima kemudian menghasilkan pesan lain yang tidak berurut.

Fragmentasi Pesan

Service Broker membagi pesan keluar menjadi fragmen, dan menggabungkan fragmen masuk ke dalam pesan asli. Untuk pesan kecil, seluruh pesan terkandung dalam satu fragmen. Untuk pesan besar, Service Broker membuat banyak fragmen.

Pesan fragmentasi memiliki beberapa keuntungan. Mengirim pesan besar dalam fragmen kecil meningkatkan kecepatan dan keandalan keseluruhan saat berkomunikasi melalui jaringan yang relatif lambat dan tidak dapat diandalkan seperti Wide-Area Networks (WAN). Jika fragmen pesan hilang, protokol hanya mengirimkan ulang satu fragmen alih-alih pesan lengkap. Memfragmentasi pesan besar juga dapat mengurangi waktu yang diperlukan pesan kecil untuk mencapai tujuan. Service Broker dapat mengirim fragmen yang berisi pesan kecil lengkap antara fragmen pesan besar. Ini memperlambat pesan besar sedikit untuk mengurangi waktu pesan kecil menunggu untuk dikirimkan.

Saat pesan sedang disusun ulang, pesan parsial disimpan dalam antrean tujuan. Jika antrean tujuan tidak tersedia, antrean tersebut disimpan dalam antrean transmisi. Pesan parsial tidak dapat diterima oleh aplikasi. Kolom status untuk pesan parsial diatur ke 2 (Dinonaktifkan). Nilai ini juga digunakan untuk pesan yang diterima di luar urutan.

Pengakuan Pesan

Service Broker mengakui setiap pesan yang diterima. Pengakuan dapat mengakui satu atau beberapa fragmen pesan. Jika memungkinkan, pengakuan disertakan dalam header pesan yang dikembalikan pada percakapan yang sama. Jika tidak ada pesan lain yang siap dikirim, Service Broker mengembalikan pesan pengakuan khusus. Pengakuan pesan ditangani sepenuhnya oleh Service Broker; aplikasi yang menggunakan Service Broker tidak menerima pesan ini.

Pengirim mempertahankan fragmen pesan yang belum diakui penerima. Jika tidak ada pengakuan yang diterima dalam waktu tunggu yang ditentukan sistem, pengirim mengirim fragmen pesan lagi. Jika tidak ada pengakuan yang diterima selama waktu tunggu, Service Broker secara eksponensial meningkatkan jumlah waktu sebelum coba lagi berikutnya, hingga waktu tunggu maksimum. Waktu tunggu awal untuk coba lagi adalah beberapa detik. Waktu tunggu maksimum adalah sekitar satu menit. Perhatikan bahwa waktu tunggu tidak dimaksudkan untuk menjadi tepat; tergantung pada lalu lintas jaringan dan aktivitas lain dalam instans SQL Server, fragmen pesan mungkin tidak dicoba kembali selama beberapa detik setelah waktu tunggu berakhir.

Jika pengakuan hilang atau tertunda, penerima mungkin menerima pesan duplikat. Dalam hal ini, penerima mengakui penerimaan pesan duplikat, tetapi tidak mengirimkan pesan duplikat ke antrean.

Service Broker menggunakan pengakuan pesan untuk memberikan pesan yang andal tanpa transaksi terdistribusi. Penerima mengirimkan pengakuan hanya setelah menambahkan fragmen pesan atau pesan ke antrean. Pengirim menyimpan pesan dalam antrean transmisi sampai pengakuan untuk pesan tersebut tiba. Meskipun pengirim dan penerima tidak pernah berbagi transaksi, protokol menjamin bahwa pengirim tidak menghapus pesan dari antrean transmisi sampai penerima berhasil menerima pesan.

Pemeriksaan Integritas Pesan

Format yang digunakan Service Broker untuk mengirimkan pesan mencakup pemeriksaan integritas pesan untuk menentukan apakah pesan tertentu telah diubah atau rusak selama transportasi.

Pemeriksaan integritas pesan adalah tanda tangan MD5 untuk konten pesan. SQL Server mengenkripsi tanda tangan dengan kunci sesi untuk pesan, dan menyertakan tanda tangan di header pesan.

Tujuan untuk pesan mendekripsi pesan, lalu membandingkan tanda tangan dalam pesan dengan tanda tangan baru yang dihitung atas konten aktual yang diterima. Jika tanda tangan tidak cocok, pesan telah rusak atau diubah selama transmisi. Pesan gagal dalam pemeriksaan integritas pesan. SQL Server membuang pesan dan tidak mengakui pesan kepada pengirim. Kelas peristiwa Broker:Corrupted Message melaporkan informasi saat pesan gagal dalam pemeriksaan integritas pesan.

Objek Transmisi Broker Layanan

Objek transmisi Service Broker adalah objek dalam memori yang mengelola dan merekam status transmisi pesan untuk dialog. Setiap titik akhir percakapan memiliki satu objek transmisi.

Dialog meminta objek transmisi saat melakukan hal berikut:

  • Mengirim pesan melalui antrean transmisi. Ini termasuk yang berikut:

    • Semua pesan yang dikirim ke instans jarak jauh Mesin Database

    • Pesan untuk mengirim antrean dalam instans lokal jika pesan tidak dapat langsung dimasukkan ke dalam antrean tujuan

  • Menerima pesan jarak jauh atau pesan yang berasal dari antrean transmisi lokal.

Objek transmisi dibuat pertama kali dialog memintanya. Service Broker menggunakan objek transmisi yang sama untuk permintaan berikutnya dari dialog tersebut. Objek transmisi dimodifikasi setiap kali Service Broker harus merekam perubahan status transmisi untuk dialog. Objek transmisi sekitar 1 KB.

Untuk membebaskan memori, Service Broker secara berkala menyimpan batch objek transmisi yang tidak aktif dalam tabel kerja tempdb . Ketika objek transmisi pertama kali dimodifikasi dalam memori, objek tersebut ditandai sebagai kotor. Objek transmisi tetap ditandai sebagai kotor sampai dibersihkan ke tabel kerja.

Objek transmisi tidak digunakan untuk mengirim atau menerima pesan lokal yang dapat dimasukkan langsung ke dalam antrean tujuan.

Alur Komunikasi Jaringan

Ilustrasi berikut menyajikan tampilan komunikasi jaringan Service Broker tingkat tinggi antara dua instans SQL Server.

Komunikasi jaringan broker antara dua instans

Perhatikan bahwa percakapan adalah koneksi logis yang persisten. Percakapan dapat terjadi selama periode waktu apa pun, dan selama periode waktu tersebut, percakapan dapat menggunakan sejumlah koneksi jaringan.

Koneksi jaringan terjadi di antara dua titik akhir Service Broker. Koneksi ini menggunakan TCP/IP. Jika koneksi tidak aktif untuk waktu yang singkat, SQL Server menutup koneksi jaringan.

Untuk mengirimkan pesan, Service Broker menyimpan pesan dalam antrean transmisi untuk database yang mengirim pesan. Penerima mengirimkan pesan langsung ke antrean untuk layanan tujuan. Jika antrean tersebut NONAKTIF, pesan disimpan sementara dalam antrean transmisi untuk database penerima. Antrean untuk layanan pengirim tidak terlibat dalam operasi. Antrean transmisi untuk database yang menghosting layanan penerima hanya terlibat jika antrean tujuan NONAKTIF.

Lihat juga