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 Proksi RDS memiliki ketersediaan tinggi dan di-deploy pada berbagai Zona Ketersediaan (AZ). 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 terhubung ke titik akhir baca/tulis yang terhubung langsung ke instans . Untuk klaster DB RDS, Anda juga dapat membuat titik akhir baca/tulis dan hanya-baca tambahan. Untuk informasi selengkapnya, lihat Ikhtisar titik akhir proksi.

Misalnya, Anda masih dapat terhubung ke titik akhir klaster untuk koneksi baca/tulis tanpa pengumpulan 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

Setiap proksi melakukan pengumpulan koneksi untuk instans penulis dari basis data RDS terkaitnya. 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 meliputi jabat tangan Keamanan Lapisan Pengangkutan/Lapisan Soket Aman (TLS/SSL), autentikasi, 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

Proksi RDS menggunakan mekanisme keamanan RDS yang sudah 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 proksi menggunakan peran IAM. Hal ini terjadi bahkan jika proksi terhubung ke basis data menggunakan pengguna native dan metode autentikasi 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 menyimpan kredensyal database yang digunakan oleh RDS Proxy di. AWS Secrets Manager Setiap pengguna basis data untuk sebuah instans DB RDS yang diakses oleh proksi harus memiliki rahasia yang sesuai di Secrets Manager. Anda juga dapat menyiapkan autentikasi IAM untuk pengguna Proksi RDS. Dengan melakukannya, Anda dapat menerapkan autentikasi IAM untuk akses basis data meskipun basis data menggunakan autentikasi kata sandi native. Sebaiknya gunakan fitur keamanan ini, alih-alih menyematkan kredensial basis data dalam kode aplikasi Anda.

Penggunaan TLS/SSL dengan Proksi RDS

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

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 AWS Management Console.

Proksi RDS juga dapat memastikan agar sesi Anda menggunakan TLS/SSL antara klien Anda dan titik akhir Proksi RDS. 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 file .pem yang akan digunakan, unduh semua CA PEM root dari Amazon Trust Services dan tempatkan ke dalam satu file .pem.

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 penyematan.