
Alors que d'autres plates-formes cloud ont depuis longtemps leurs propres solutions de base de données, Digital Ocean n'a rien proposé dans ce segment jusqu'à aujourd'hui. Mais le 14 février, jour de tous les amoureux, la société a décidé de faire un cadeau à ses clients et a lancé le service de bases de données gérées en mode de disponibilité limitée.
Étant donné que Digital Ocean est désormais une plate-forme assez populaire pour l'hébergement de petits projets sur .NET Core, je ne pouvais pas ignorer cet événement.
Comment le service fonctionne et quelles sont les nuances lors de la connexion à la base de données lors de l'utilisation de .NET Core dans Je décrirai dans cette publication.

Aujourd'hui, les bases de données PostrgeSQL version 10 et 11. sont disponibles, MySQL et Redis sont à leur tour.
Selon Digital Ocean, le service de base de données gérée résout les problèmes courants auxquels de nombreuses entreprises et développeurs sont confrontés lors de la création d'un cluster à partir de zéro:
- Déterminer l'infrastructure optimale
- Faites évoluer l'infrastructure à mesure que vos besoins commerciaux et de données augmentent
- Concevoir et gérer des infrastructures et des processus de basculement hautement disponibles
- Mettre en œuvre une stratégie de sauvegarde et de récupération
- Prévoir et maintenir les coûts de maintenance des infrastructures
Aujourd'hui, la création de la base la plus compacte vous coûtera 15 $. La configuration la plus chère peut coûter
plus de deux mille dollars par mois .
Pools de connexions
Lorsqu'un client se connecte directement à une base de données PostgreSQL, le serveur crée un processus pour gérer cette connexion. Chaque connexion individuelle nécessite environ 10 Mo de RAM et utilise cette mémoire jusqu'à sa fermeture. De plus, le nombre total de connexions est fixe et lorsque toutes les connexions sont utilisées, les nouveaux clients ne pourront plus se connecter.
Digital Ocean vous permet de créer des pools de connexions qui s'exécutent sur la base de PgBouncer. Le pool de connexions réduit les problèmes de performances en dirigeant les connexions client vers l'application de pool, réduisant ainsi le nombre de processus que la base de données doit traiter. L'application de pool transfère une partie des connexions à la base de données et place le reste dans la file d'attente où elles se trouvent jusqu'à ce que la base de données soit libre pour de nouvelles connexions.
Lors de l'utilisation du pool de connexions, les applications n'ont pas besoin de gérer la connexion réelle. Ils n'auront besoin de se connecter au pool et de se déconnecter qu'après avoir terminé la tâche.
Création de pool
La création d'un pool de connexions est très simple - vous devez ouvrir un cluster et accéder à l'onglet Pools de connexions. DigitalOcean prend en charge trois types de regroupement:
TransactionCe mode permet à chaque client d'utiliser le pool simultanément pour une transaction. Si le nombre de transactions envoyées dépasse le nombre disponible dans le pool, des transactions supplémentaires sont mises en file d'attente et traitées une fois les connexions disponibles. Le mode de transaction convient lorsque vous avez un grand nombre de clients qui utilisent des connexions inactives. Ces clients maintiendront leur connexion au pool sans établir de connexion à PostgreSQL.
SéanceCe mode permet au client de traiter les demandes jusqu'à ce qu'il se déconnecte de la base de données, en maintenant une connexion avec ce client tout le temps. Si plus de clients se connectent que ne parviennent pas à les traiter dans le pool, ces clients sont mis en file d'attente et connectés après avoir déconnecté un client existant.
DéclarationCe mode est le plus strict et n'autorise qu'un seul opérateur à la fois avant de passer au client suivant dans la file d'attente. Cela signifie que les demandes avec plusieurs opérateurs ne sont pas autorisées et ne seront pas exécutées. Ce mode est principalement utile dans les situations où chaque transaction est limitée à un opérateur. Les transactions avec plusieurs agents seront rejetées par le pool.
Après avoir créé le pool, vous devez utiliser les paramètres du pool pour vous connecter à la base de données. Vous pouvez les voir en cliquant sur le lien Détails de la connexion:

Connexion à la piscine

Dans mes projets, j'utilise
Npgsql , donc d'autres exemples impliqueront l'utilisation de ce pilote.
La chaîne de connexion ressemblera à ceci:
User ID=xxx;Password=xxxx;Host=xxx.db.ondigitalocean.com;Port=xxx;Database=pool_name;Pooling=false;SslMode=Require;Server Compatibility Mode=Redshift;
À quoi devez-vous faire attention:
- Le paramètre Database ne contiendra pas le nom de la base de données, mais le nom du pool via lequel la connexion à la base de données aura lieu.
- Le regroupement sera défini sur faux. Le pool de connexions sera géré par PgBouncer, pas par le pilote.
- Le paramètre SslMode doit être défini sur Require, car un certificat sera requis pour ouvrir la connexion.
- Le paramètre Server Compatibility Mode doit être initialisé à la valeur Redshift . Cela évitera un certain nombre de problèmes lors de l'utilisation du pilote npgsql via PgBouncer.
La méthode de préparation de la connexion ressemblera à ceci:
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; };
Ici, il convient de prêter attention à deux points.
- Le premier . Lors de la création d'une connexion, vous devez utiliser un certificat. Il peut être téléchargé dans la boîte de dialogue pour visualiser les paramètres de connexion au pool. La connexion de certificat est configurée via ProviderClientCertificatesCallback .
- Deuxième . La procédure de vérification du certificat de pool, qui est configurée via RemoteCertificateValidationCallback. Dans mon exemple, un petit hack est utilisé qui vous permet d'ignorer l'erreur qui se produit du fait que la vérification du certificat racine ne fonctionne pas.
N'oubliez pas que le service est actuellement fourni en mode DISPONIBILITÉ LIMITÉE, ce qui signifie qu'une partie de la fonctionnalité peut encore être étendue et que des problèmes peuvent survenir lors de l'utilisation de services que l'équipe DO n'a pas encore pu résoudre.
Les références