Konsep dan terminologi Proksi RDS - Layanan Basis Data Relasional Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konsep dan terminologi Proksi RDS

Anda dapat menyederhanakan manajemen koneksi untuk instans DB Amazon RDS dengan menggunakan Proksi RDS.

Proksi RDS menangani lalu lintas jaringan antara aplikasi klien dan basis data. Tindakan ini dilakukan secara aktif terlebih dahulu dengan memahami protokol basis data. Lalu perilakunya disesuaikan berdasarkan operasi SQL dari aplikasi Anda dan serangkaian hasil dari basis data.

Proksi RDS mengurangi overhead memori dan CPU untuk manajemen koneksi pada basis data Anda. Basis data membutuhkan lebih sedikit sumber daya memori dan CPU saat aplikasi membuka banyak koneksi secara bersamaan. Logika juga tidak dibutuhkan dalam aplikasi Anda untuk menutup dan membuka kembali koneksi yang idle dalam waktu yang lama. Demikian pula, logika aplikasi yang dibutuhkan untuk membangun kembali koneksi juga lebih sedikit jika terjadi masalah pada basis data.

Infrastruktur untuk RDS Proxy sangat tersedia dan digunakan di beberapa Availability Zones ()AZs. Komputasi, memori, dan penyimpanan untuk Proksi RDS tidak bergantung pada instans DB RDS. Independensi ini membantu menurunkan overhead pada server basis data Anda, sehingga dapat mencurahkan sumber dayanya untuk melayani beban kerja basis data. Sumber daya komputasi Proksi RDS bersifat nirserver, yang diskalakan secara otomatis berdasarkan beban kerja basis data Anda.

Ikhtisar konsep Proksi RDS

Proksi RDS menangani infrastruktur untuk melakukan pengumpulan koneksi dan fitur lain yang dijelaskan di bagian berikutnya. Anda melihat proksi ditampilkan dalam konsol RDS pada halaman Proksi.

Setiap proksi menangani koneksi ke instans DB RDS tunggal. Proksi tersebut secara otomatis menentukan instans penulis saat ini untuk instans atau klaster DB RDS Multi-AZ.

Koneksi yang dibiarkan terbuka dan disediakan oleh proksi untuk digunakan oleh aplikasi basis data Anda akan membentuk kumpulan koneksi.

Secara default, Proksi RDS dapat menggunakan ulang koneksi setelah setiap transaksi dalam sesi Anda. Penggunaan kembali tingkat transaksi ini disebut multiplexing. Jika Proksi RDS secara temporer menghapus satu koneksi dari kumpulan koneksi untuk menggunakannya kembali, operasi tersebut disebut borrowing koneksi. Jika aman dilakukan, Proksi RDS akan mengembalikan koneksi tersebut ke kumpulan koneksi.

Dalam beberapa kasus, Proksi RDS tidak dapat memastikan keamanan penggunaan ulang sebuah koneksi basis data di luar sesi saat ini. Untuk kasus seperti ini, Proksi RDS akan tetap mempertahankan sesi pada koneksi yang sama hingga sesi berakhir. Perilaku fallback ini disebut pinning.

Proksi memiliki titik akhir default. Anda terhubung ke titik akhir ini saat menggunakan instans DB Amazon RDS. Anda melakukannya alih-alih menghubungkan ke read/write titik akhir yang terhubung langsung ke instance. Untuk cluster RDS DB, Anda juga dapat membuat endpoint tambahan dan read-only. read/write Untuk informasi selengkapnya, lihat Ikhtisar titik akhir proksi.

Misalnya, Anda masih dapat terhubung ke titik akhir cluster untuk read/write koneksi tanpa penyatuan koneksi. Anda masih dapat terhubung ke titik akhir pembaca untuk koneksi keseimbangan beban hanya-baca. Anda masih dapat terhubung ke titik akhir instans untuk melakukan diagnosis dan memecahkan masalah instans DB tertentu dengan klaster. Jika Anda menggunakan AWS layanan lain seperti AWS Lambda untuk terhubung ke database RDS, ubah pengaturan koneksi mereka untuk menggunakan titik akhir proxy. Misalnya, tentukan titik akhir proksi untuk mengizinkan fungsi Lambda mengakses basis data Anda sekaligus memanfaatkan fungsionalitas Proksi RDS.

Setiap proksi berisi sebuah grup target. Grup target ini berisi instans DB RDS yang menjadi tujuan koneksi proksi. Instans DB RDS yang terkait dengan proksi disebut sebagai target proksi tersebut. Untuk kemudahan, saat Anda membuat proksi melalui konsol, Proksi RDS juga membuat grup target yang sesuai dan mendaftarkan target terkait ini secara otomatis.

Keluarga mesin adalah serangkaian mesin basis data terkait yang menggunakan protokol DB yang sama. Anda dapat memilih keluarga mesin untuk setiap proksi yang Anda buat.

Pengumpulan koneksi

Pengumpulan koneksi adalah pengoptimalan yang menurunkan overhead yang terkait dengan pembukaan dan penutupan koneksi dan dengan menjaga banyak koneksi terbuka secara bersamaan. Overhead ini mencakup memori yang diperlukan untuk menangani setiap koneksi baru. Ini juga melibatkan overhead CPU untuk menutup setiap koneksi dan membuka koneksi yang baru. Contohnya termasuk jabat tangan Transport Layer Security/Secure Sockets Layer (TLS/SSL), otentikasi, kemampuan negosiasi, dan sebagainya. Pengumpulan koneksi menyederhanakan logika aplikasi Anda. Anda tidak perlu menulis kode aplikasi untuk meminimalkan jumlah koneksi terbuka secara bersamaan.

Setiap proksi juga melakukan multipleks koneksi, yang juga dikenal sebagai penggunaan ulang koneksi. Dengan multiplexing, Proksi RDS melakukan semua operasi untuk transaksi menggunakan satu koneksi basis data acuan. RDS kemudian dapat menggunakan koneksi yang berbeda untuk transaksi berikutnya. Anda dapat membuka banyak koneksi ke proksi secara bersamaan, dan proksi akan mempertahankan koneksi terbuka dalam jumlah yang lebih kecil ke instans atau klaster DB. Tindakan ini akan lebih meminimalkan overhead memori untuk koneksi di server basis data. Teknik ini juga mengurangi kemungkinan kesalahan "terlalu banyak koneksi".

Keamanan Proksi RDS

RDS Proxy menggunakan mekanisme keamanan RDS yang ada seperti TLS/SSL dan AWS Identity and Access Management (IAM). Untuk informasi umum tentang fitur keamanan tersebut, lihat Keamanan dalam Amazon RDS. Selain itu, pastikan Anda benar-benar mengetahui bagaimana cara kerja RDS dengan autentikasi, otorisasi, dan bidang keamanan lainnya.

Proksi RDS dapat bertindak sebagai lapisan keamanan tambahan antara aplikasi klien dan basis data acuan. Misalnya, Anda dapat terhubung ke proxy menggunakan TLS 1.3, meskipun instans DB yang mendasarinya mendukung versi TLS yang lebih lama. Anda dapat terhubung ke proxy menggunakan peran IAM bahkan jika proxy terhubung ke database menggunakan pengguna database dan metode otentikasi kata sandi. Dengan menggunakan teknik ini, Anda dapat menerapkan persyaratan autentikasi yang kuat untuk aplikasi basis data tanpa sebuah upaya migrasi yang mahal untuk instans DB itu sendiri.

Anda dapat menggunakan metode otentikasi berikut dengan RDS Proxy:

  • Kredensyal basis data

  • Otentikasi IAM standar

  • End-to-end Autentikasi IAM

Menggunakan IAM dengan RDS Proxy

RDS Proxy menawarkan dua metode otentikasi IAM:

  • Otentikasi IAM standar: Menerapkan autentikasi IAM untuk koneksi ke proxy Anda saat proxy terhubung ke database menggunakan kredensyal yang disimpan di Secrets Manager. Ini memberlakukan otentikasi IAM untuk akses database bahkan jika database menggunakan otentikasi kata sandi asli. Proxy mengambil kredensi database dari Secrets Manager dan menangani otentikasi ke database atas nama aplikasi Anda.

  • End-to-end Autentikasi IAM: Menerapkan otentikasi IAM untuk koneksi langsung dari aplikasi Anda ke database Anda melalui proxy. End-to-end Autentikasi IAM menyederhanakan konfigurasi keamanan Anda dan menghindari manajemen kredensi database di Secrets Manager. Lapisan keamanan tambahan ini memberlakukan kontrol akses berbasis IAM dari aplikasi klien ke database.

Untuk menggunakan otentikasi IAM standar, konfigurasikan proxy Anda untuk menggunakan rahasia Secrets Manager untuk otentikasi dan aktifkan autentikasi IAM untuk koneksi klien. Aplikasi Anda mengautentikasi ke proxy menggunakan IAM, sedangkan proxy mengautentikasi ke database menggunakan kredensyal yang diambil dari Secrets Manager.

Untuk menggunakan autentikasi end-to-end IAM, konfigurasikan proxy Anda untuk menggunakan otentikasi IAM saat mengatur skema otentikasi default saat membuat atau memodifikasi proxy Anda.

Untuk autentikasi end-to-end IAM, Anda harus memperbarui peran IAM yang terkait dengan proxy untuk memberikan izin. rds-db:connect Dengan otentikasi end-to-end IAM, ini menghilangkan kebutuhan untuk mendaftarkan pengguna database individu dengan proxy melalui rahasia Secrets Manager.

Menggunakan TLS/SSL dengan RDS Proxy

Anda dapat terhubung ke RDS Proxy menggunakan TLS/SSL protokol.

catatan

Proxy RDS menggunakan sertifikat dari AWS Certificate Manager (ACM). Jika Anda menggunakan Proksi RDS, Anda tidak perlu mengunduh sertifikat Amazon RDS atau memperbarui aplikasi yang menggunakan koneksi Proksi RDS.

Untuk menerapkan TLS untuk semua koneksi antara proksi dan basis data, Anda dapat menentukan pengaturan Wajibkan Keamanan Lapisan Pengangkutan saat membuat atau mengubah sebuah Konsol Manajemen AWS.

Proxy RDS juga dapat memastikan bahwa sesi Anda menggunakan TLS/SSL antara klien Anda dan titik akhir RDS Proxy. Untuk membuat Proksi RDS melakukannya, tentukan persyaratan pada sisi klien. Variabel sesi SSL tidak diatur untuk koneksi SSL ke basis data menggunakan Proksi RDS.

  • Untuk RDS for MySQL, tentukan persyaratan pada sisi klien dengan parameter --ssl-mode saat Anda menjalankan perintah mysql.

  • Untuk Amazon RDS PostgreSQL, tentukan sslmode=require sebagai bagian dari string conninfo saat Anda menjalankan perintah psql.

RDS Proxy mendukung protokol TLS versi 1.0, 1.1, 1.2, dan 1.3. Anda dapat terhubung ke proksi menggunakan versi TLS yang lebih tinggi daripada yang digunakan dalam basis data acuan.

Secara default, program klien membangun koneksi terenkripsi dengan Proksi RDS, dengan ketersediaan kontrol lebih lanjut melalui opsi --ssl-mode. Dari sisi klien, Proksi RDS mendukung semua mode SSL.

Untuk klien, mode SSL adalah sebagai berikut:

PREFERRED

SSL adalah pilihan pertama, tetapi tidak diharuskan.

DISABLED

Tidak ada SSL yang diperbolehkan.

REQUIRED

Menerapkan SSL.

VERIFY_CA

Menerapkan SSL dan memverifikasi otoritas sertifikat (CA).

VERIFY_IDENTITY

Menerapkan SSL dan memverifikasi CA dan nama host CA.

Saat menggunakan sebuah klien dengan --ssl-mode VERIFY_CA atau VERIFY_IDENTITY, tentukan opsi --ssl-ca yang menunjuk ke CA dalam format .pem. Untuk .pem file yang akan digunakan, unduh semua root CA PEMs dari Amazon Trust Services dan tempatkan ke dalam satu .pem file.

Proksi RDS menggunakan sertifikat wildcard, yang berlaku untuk domain dan subdomainnya. Jika Anda menggunakan klien mysql untuk terhubung dengan mode SSL VERIFY_IDENTITY, Anda kini harus menggunakan perintah mysql yang kompatibel dengan MySQL 8.0.

Failover

Failover adalah fitur ketersediaan tinggi yang menggantikan instans basis data dengan yang lain saat instans asli tidak tersedia. Failover dapat terjadi karena sebuah masalah pada instans basis data. Bisa juga bagian dari prosedur pemeliharaan normal, seperti saat peningkatan basis data. Failover berlaku untuk instans DB RDS dengan konfigurasi Multi-AZ.

Terhubung melalui proksi membuat aplikasi Anda lebih tangguh menghadapi failover basis data. Saat instans DB asli tidak tersedia, Proksi RDS akan terhubung ke basis data siaga tanpa kehilangan koneksi aplikasi yang idle. Hal ini dapat membantu mempercepat dan menyederhanakan proses failover. Dampaknya terhadap aplikasi juga lebih kecil dibandingkan masalah boot ulang atau basis data pada umumnya.

Tanpa Proksi RDS, failover dapat menyebabkan pemadaman singkat. Selama pemadaman, Anda tidak dapat melakukan operasi tulis pada basis data dengan failover. Koneksi semua basis data yang ada akan terganggu, dan aplikasi Anda harus membuka ulang koneksi tersebut. Basis data akan tersedia untuk koneksi dan operasi tulis baru saat instans DB hanya-baca dipromosikan menggantikan yang tidak tersedia.

Selama failover DB, Proksi RDS terus menerima koneksi di alamat IP yang sama dan secara otomatis mengarahkan koneksi ke instans DB primer baru. Klien yang terhubung melalui Proksi RDS tidak rentan terhadap hal berikut:

  • Penundaan propagasi Sistem Nama Domain (DNS) saat failover.

  • Caching DNS lokal.

  • Waktu koneksi habis.

  • Ketidakpastian tentang instans DB mana yang merupakan instans penulis saat ini.

  • Menunggu respons kueri dari penulis sebelumnya yang menjadi tidak tersedia tanpa menutup koneksi.

Untuk aplikasi yang mempertahankan kumpulan koneksinya sendiri, melewati Proksi RDS berarti sebagian besar koneksi tetap aktif selama failover atau gangguan lainnya. Hanya koneksi yang berada di tengah transaksi atau pernyataan SQL yang dibatalkan. Proksi RDS segera menerima koneksi baru. Saat penulis basis data tidak tersedia, Proksi RDS akan mengantrekan permintaan masuk.

Untuk aplikasi yang tidak mempertahankan kumpulan koneksinya sendiri, Proksi RDS menawarkan tingkat koneksi yang lebih cepat dan lebih banyak koneksi terbuka. Hal ini menyebabkan overhead yang mahal dikarenakan seringnya koneksi ulang dari basis data. Hal ini dilakukan dengan menggunakan kembali koneksi basis data yang dipertahankan dalam kumpulan koneksi Proksi RDS. Pendekatan ini sangatlah penting untuk koneksi TLS, yang memerlukan biaya penyiapan yang sangat besar.

Transaksi

Semua pernyataan dalam satu transaksi selalu menggunakan koneksi basis data acuan yang sama. Koneksi akan dapat digunakan oleh sesi yang berbeda saat transaksi berakhir. Penggunaan transaksi sebagai unit granularitas memiliki konsekuensi sebagai berikut:

  • Penggunaan ulang koneksi bisa terjadi setelah setiap pernyataan jika pengaturan autocommit RDS for MySQL diaktifkan.

  • Sebaliknya, jika pengaturan autocommit dinonaktifkan, pernyataan pertama yang Anda terbitkan dalam sesi akan memulai transaksi baru. Misalnya, Anda memasukkan urutan pernyataan SELECT, INSERT, UPDATE, dan bahasa manipulasi data (DML) lainnya. Dalam hal ini, penggunaan kembali koneksi tidak terjadi hingga Anda mengeluarkan COMMIT, ROLLBACK, atau mengakhiri transaksi.

  • Memasukkan pernyataan bahasa definisi data (DDL) akan menyebabkan transaksi berakhir setelah pernyataan tersebut selesai.

Proksi RDS mendeteksi waktu saat transaksi berakhir melalui protokol jaringan yang digunakan oleh aplikasi klien basis data. Deteksi transaksi tidak bergantung pada kata kunci seperti COMMIT atau ROLLBACK yang muncul dalam teks pernyataan SQL.

Dalam beberapa kasus, Proksi RDS dapat mendeteksi permintaan basis data yang membuatnya tidak praktis untuk memindahkan sesi Anda ke koneksi yang berbeda. Dalam kasus ini, multiplexing dinonaktifkan untuk koneksi tersebut hingga sesi Anda berakhir. Aturan serupa berlaku jika Proksi RDS tidak dapat memastikan apakah multiplexing praktis untuk sesi ini. Operasi ini disebut pinning. Untuk mendeteksi dan meminimalkan pinning, lihat Menghindari menyematkan Proxy RDS.