Mode konektivitas Azure Cosmos DB SQL SDK
BERLAKU UNTUK: NoSQL
Cara klien terhubung ke Azure Cosmos DB memiliki implikasi performa penting, terutama untuk latensi sisi klien yang diamati. Azure Cosmos DB menawarkan model pemrograman RESTful terbuka sederhana melalui HTTPS yang disebut mode gateway. Selain itu, ia menawarkan protokol TCP efisien, yang juga RESTful dalam model komunikasinya dan menggunakan TLS untuk autentikasi awal dan enkripsi lalu lintas, yang disebut mode langsung.
Mode konektivitas yang tersedia
Dua mode konektivitas yang tersedia adalah:
Mode gateway
Mode gateway didukung di semua platform SDK. Jika aplikasi Anda berjalan dalam jaringan perusahaan dengan pembatasan firewall ketat, mode gateway adalah pilihan terbaik karena menggunakan port HTTPS standar dan satu titik akhir DNS. Namun, tradeoff performanya adalah mode gateway melibatkan hop jaringan tambahan setiap kali data dibaca dari atau ditulis ke Azure Cosmos DB. Kami juga merekomendasikan mode koneksi gateway saat Anda menjalankan aplikasi di lingkungan yang memiliki koneksi soket dalam jumlah terbatas.
Saat Anda menggunakan SDK di Azure Functions, terutama dalam Rencana konsumsi, ketahui batasan koneksi saat ini.
Mode langsung
Mode langsung mendukung konektivitas melalui protokol TCP, menggunakan TLS untuk autentikasi awal dan mengenkripsi lalu lintas, dan menawarkan performa yang lebih baik karena ada sangat sedikit jaringan. Aplikasi terhubung langsung ke replika backend. Mode langsung saat ini hanya didukung pada platform .NET dan Java SDK.
Mode konektivitas ini pada dasarnya mengondisikan rute yang diminta bidang data - dokumen membaca dan menulis - dari komputer klien Anda ke partisi di back-end Azure Cosmos DB. Mode langsung adalah opsi yang disukai untuk performa terbaik - memungkinkan klien Anda untuk membuka koneksi TCP langsung ke partisi di back-end Azure Cosmos DB dan mengirim permintaan secara langsung tanpa perantara. Sebaliknya, dalam mode Gateway, permintaan yang dibuat oleh klien Anda dirutekan ke server "Gateway" di front end Azure Cosmos DB, yang pada gilirannya menyebarkan permintaan Anda ke partisi yang sesuai di back-end Azure Cosmos DB.
Rentang port sumber
Saat Anda menggunakan mode langsung, Anda perlu memastikan bahwa klien Anda dapat mengakses port berkisar antara 10000 dan 20000 karena Azure Cosmos DB menggunakan port TCP dinamis. Ini selain port gateway. Saat menggunakan mode langsung pada titik akhir privat, berbagai port TCP - dari 0 hingga 65535 dapat digunakan oleh Azure Cosmos DB. Jika port ini tidak terbuka pada klien Anda dan Anda mencoba menggunakan protokol TCP, Anda mungkin menerima kesalahan 503 Layanan Tidak Tersedia.
Tabel berikut menunjukkan ringkasan mode konektivitas yang tersedia untuk berbagai API dan port layanan yang digunakan untuk setiap API:
Mode koneksi | Protokol yang didukung | SDK yang didukung | Port API/Layanan |
---|---|---|---|
Gateway | HTTPS | Semua SDK | SQL (443), MongoDB (10255), Tabel (443), Cassandra (10350), Grafik (443) |
Langsung | TCP (Dienkripsi melalui TLS) | .NET SDK Java SDK | Saat menggunakan titik akhir publik/layanan: port dalam rentang 10000 hingga 20000 Saat menggunakan titik akhir privat: port dalam rentang 0 hingga 65535 |
Arsitektur koneksi mode langsung
Seperti yang dijelaskan dalam Pengantar, klien Mode langsung akan langsung terhubung ke simpul backend melalui protokol TCP. Setiap simpul backend mewakili replika dalam set replika yang termasuk dalam partisi fisik.
Perutean
Jika Azure Cosmos DB SDK pada Mode langsung melakukan operasi, ini harus menyelesaikan replika backend mana yang akan dihubungkan. Langkah pertama adalah mengetahui partisi fisik mana yang harus digunakan operasi, dan untuk itu, SDK mendapatkan informasi kontainer yang menyertakan definisi kunci partisi dari simpul Gateway. Ini juga membutuhkan informasi perutean yang berisi alamat TCP replika. Informasi perutean tersedia juga dari simpul Gateway dan keduanya dianggap sebagai metadata Sarana Kontrol. Setelah mendapatkan informasi perutean, SDK dapat melanjutkan untuk membuka koneksi TCP ke replika yang termasuk dalam partisi fisik target dan menjalankan operasi.
Setiap set replika berisi satu replika utama dan tiga replika sekunder. Operasi tulis selalu dirutekan ke simpul replika utama sementara operasi baca dapat dilayani dari simpul primer atau sekunder.
Karena informasi kontainer dan perutean tidak sering berubah, informasi ini di-cache secara lokal di SDK sehingga operasi berikutnya dapat memperoleh manfaat dari informasi ini. Koneksi TCP yang sudah dibuat juga digunakan kembali di seluruh operasi. Kecuali dikonfigurasi lain melalui opsi SDK, koneksi dipertahankan secara permanen selama masa pakai instans SDK.
Seperti halnya arsitektur terdistribusi, mesin yang memegang replika mungkin mengalami peningkatan atau pemeliharaan. Layanan ini akan memastikan set replika mempertahankan konsistensinya akan tetapi pergerakan replika apa pun akan menyebabkan alamat TCP yang ada menjadi berubah. Dalam kasus ini, SDK perlu merefresh informasi perutean dan menyambungkan kembali ke alamat baru melalui permintaan Gateway baru. Peristiwa ini seharusnya tidak memengaruhi SLA P99 secara keseluruhan.
Volume koneksi
Setiap partisi fisik memiliki set replika empat replika, untuk memberikan kemungkinan performa terbaik, SDK pada akhirnya akan membuka koneksi ke semua replika untuk beban kerja yang menggabungkan operasi tulis dan baca. Operasi bersamaan diseimbangkan beban di seluruh koneksi yang ada untuk memanfaatkan throughput yang disediakan setiap replika.
Ada dua faktor yang menentukan jumlah koneksi TCP yang akan dibuka SDK:
Jumlah partisi fisik
Dalam status stabil, SDK akan memiliki satu koneksi per replika per partisi fisik. Semakin besar jumlah partisi fisik dalam kontainer, semakin besar jumlah koneksi terbuka. Karena operasi dirutekan di berbagai partisi, koneksi dibuat sesuai permintaan. Jumlah rata-rata koneksi kemudian akan menjadi jumlah partisi fisik sebanyak empat kali.
Volume permintaan bersamaan
Setiap koneksi yang dibuat dapat melayani sejumlah operasi bersamaan yang dapat dikonfigurasi. Jika volume operasi bersamaan melebihi ambang ini, koneksi baru akan terbuka untuk melayaninya, dan ada kemungkinan bahwa untuk partisi fisik, jumlah koneksi terbuka melebihi nomor status stabil. Perilaku ini diharapkan untuk beban kerja yang mungkin memiliki lonjakan volume operasionalnya. Untuk .NET SDK, konfigurasi ini diatur oleh CosmosClientOptions.MaxRequestsPerTcpConnection, dan untuk Java SDK, Anda dapat menyesuaikan menggunakan DirectConnectionConfig.setMaxRequestsPerConnection.
Secara default, koneksi dipertahankan secara permanen untuk memanfaatkan performa operasi mendatang (membuka koneksi memiliki overhead komputasi). Mungkin ada beberapa skenario saat Anda mungkin ingin menutup koneksi yang tidak digunakan untuk beberapa waktu memahami bahwa ini mungkin sedikit memengaruhi operasi di masa depan. Untuk .NET SDK, konfigurasi ini diatur oleh CosmosClientOptions.IdleTcpConnectionTimeout, dan untuk Java SDK, Anda dapat menyesuaikan menggunakan DirectConnectionConfig.setIdleConnectionTimeout. Sebaiknya jangan mengatur konfigurasi ini ke nilai rendah karena dapat menyebabkan koneksi sering ditutup dan memengaruhi performa keseluruhan.
Detail implementasi khusus bahasa
Untuk detail implementasi lebih lanjut mengenai bahasa, lihat:
Langkah berikutnya
Untuk pengoptimalan performa platform SDK tertentu:
Mencoba melakukan perencanaan kapasitas untuk migrasi ke Azure Cosmos DB? Anda dapat menggunakan informasi tentang kluster database Anda yang ada saat ini untuk membuat perencanaan kapasitas.
- Jika Anda hanya mengetahui jumlah vcore dan server di kluster database yang ada, baca tentang memperkirakan unit permintaan menggunakan vCore atau vCPU
- Jika Anda mengetahui rasio permintaan umum untuk beban kerja database Anda saat ini, baca memperkirakan unit permintaan menggunakan perencana kapasitas Azure Cosmos DB