
Sementara platform cloud lainnya telah lama memiliki solusi database sendiri, Digital Ocean belum menawarkan apa pun di segmen ini hingga saat ini. Tetapi pada 14 Februari, hari semua kekasih, perusahaan memutuskan untuk memberikan hadiah kepada pelanggannya dan meluncurkan layanan Managed Databases dalam mode Ketersediaan Terbatas.
Karena Digital Ocean sekarang merupakan platform yang cukup populer untuk menampung proyek-proyek kecil di .NET Core, saya tidak dapat mengabaikan acara ini.
Bagaimana layanan ini bekerja dan apa nuansa saat terhubung ke database saat menggunakan .NET Core di saya akan jelaskan dalam publikasi ini.

Saat ini, tersedia database PostrgeSQL versi 10 dan 11. MySQL dan Redis selanjutnya akan ditampilkan.
Menurut Digital Ocean, layanan basis data yang dikelola memecahkan masalah umum yang dihadapi banyak perusahaan dan pengembang saat membuat sebuah cluster dari awal:
- Menentukan infrastruktur optimal
- Skala infrastruktur seiring meningkatnya kebutuhan bisnis dan data Anda
- Desain dan kelola infrastruktur yang tersedia dan proses failover
- Menerapkan strategi cadangan dan pemulihan
- Meramalkan dan mempertahankan biaya pemeliharaan infrastruktur
Hari ini, pembuatan pangkalan paling kompak akan dikenakan biaya $ 15. Konfigurasi paling mahal dapat menelan biaya
lebih dari dua ribu dolar sebulan .
Kolam koneksi
Ketika klien terhubung langsung ke database PostgreSQL, server membuat proses untuk menangani koneksi ini. Setiap koneksi individual membutuhkan sekitar 10 MB RAM dan menggunakan memori ini sampai ditutup. Selain itu, jumlah total koneksi telah diperbaiki, dan ketika semua koneksi digunakan, klien baru tidak lagi dapat terhubung.
Digital Ocean memungkinkan Anda membuat koneksi pool yang dijalankan berdasarkan PgBouncer. Kumpulan koneksi mengurangi masalah kinerja dengan mengarahkan koneksi klien ke aplikasi kumpulan, sehingga mengurangi jumlah proses yang perlu diproses oleh database. Aplikasi pool mentransfer bagian dari koneksi ke database, dan meletakkan sisanya dalam antrian di mana mereka sampai database bebas untuk koneksi baru.
Saat menggunakan kumpulan koneksi, aplikasi tidak perlu mengelola koneksi yang sebenarnya. Mereka hanya perlu menyambung ke pool dan memutuskan setelah menyelesaikan tugas.
Pembuatan kolam renang
Membuat kumpulan koneksi sangat sederhana - Anda perlu membuka sebuah cluster dan masuk ke tab Connection Pools. DigitalOcean mendukung tiga jenis pengumpulan:
TransaksiMode ini memungkinkan setiap klien untuk menggunakan kumpulan secara bersamaan untuk satu transaksi. Jika lebih banyak transaksi dikirim daripada yang tersedia di kumpulan, transaksi tambahan akan diantrikan dan diproses setelah koneksi tersedia. Mode transaksi cocok ketika Anda memiliki sejumlah besar klien yang menggunakan koneksi idle. Klien-klien ini akan menjaga koneksi mereka ke pool tanpa membuat koneksi ke PostgreSQL.
SesiMode ini memungkinkan klien untuk memproses permintaan sampai terputus dari basis data, menjaga koneksi dengan klien ini sepanjang waktu. Jika lebih banyak klien terhubung daripada gagal diproses di kumpulan, maka klien ini akan antri dan terhubung setelah memutuskan klien yang ada.
PernyataanMode ini adalah yang paling ketat dan hanya memungkinkan satu operator pada satu waktu sebelum pindah ke klien berikutnya dalam antrian. Ini berarti bahwa permintaan dengan banyak operator tidak diizinkan dan tidak akan dieksekusi. Mode ini terutama berguna dalam situasi di mana setiap transaksi terbatas pada satu operator. Transaksi dengan banyak agen akan ditolak oleh pool.
Setelah membuat kumpulan, Anda perlu menggunakan parameter kumpulan untuk terhubung ke database. Anda dapat melihatnya dengan mengklik tautan Detail koneksi:

Koneksi Kolam Renang

Dalam proyek saya, saya menggunakan
Npgsql , jadi contoh lebih lanjut akan menyiratkan penggunaan driver ini.
String koneksi akan terlihat seperti ini:
User ID=xxx;Password=xxxx;Host=xxx.db.ondigitalocean.com;Port=xxx;Database=pool_name;Pooling=false;SslMode=Require;Server Compatibility Mode=Redshift;
Apa yang harus Anda perhatikan:
- Parameter Database tidak akan memuat nama database, tetapi nama pool yang melaluinya koneksi ke database akan berlangsung.
- Pooling akan disetel ke false. Kumpulan koneksi akan dikelola oleh PgBouncer, bukan driver.
- Parameter SslMode harus diatur ke Minta, karena sertifikat akan diminta untuk membuka koneksi.
- Parameter Mode Kompatibilitas Server harus diinisialisasi ke nilai Redshift . Ini akan menghindari sejumlah masalah saat menggunakan driver npgsql melalui PgBouncer.
Metode persiapan koneksi akan terlihat seperti ini:
protected async Task<IDbConnection> CreateConnection() { var connection = new NpgsqlConnection(_connectionString) { ProvideClientCertificatesCallback = certificates => { certificates.Add(new X509Certificate2(_cert)); }, UserCertificateValidationCallback = CertificateValidation() }; await connection.OpenAsync(); return connection; } private RemoteCertificateValidationCallback CertificateValidation() => (sender, certificate, chain, errors) => { if (errors == SslPolicyErrors.None) return true; if ((errors & SslPolicyErrors.RemoteCertificateChainErrors) != 0) { var allErrorsIsUntrustedRoot = chain? .ChainStatus .All(o => o.Status == X509ChainStatusFlags.UntrustedRoot); return allErrorsIsUntrustedRoot ?? true; } return true; };
Ini ada baiknya memperhatikan dua poin.
- Yang pertama . Saat membuat koneksi, Anda harus menggunakan sertifikat. Itu dapat diunduh dalam dialog untuk melihat parameter koneksi ke kumpulan. Koneksi sertifikat dikonfigurasi melalui ProvidClientCertificatesCallback .
- Yang kedua Prosedur verifikasi sertifikat kumpulan, yang dikonfigurasi melalui RemoteCertificateValidationCallback. Dalam contoh saya, peretasan kecil digunakan yang memungkinkan Anda untuk mengabaikan kesalahan yang terjadi karena fakta bahwa verifikasi sertifikat root tidak berfungsi.
Jangan lupa bahwa layanan saat ini disediakan dalam mode KETERSEDIAAN TERBATAS, yang berarti bahwa sebagian fungsi masih dapat diperluas dan masalah mungkin timbul saat bekerja dengan layanan yang belum dapat diperbaiki oleh tim DO.
Referensi