
Mientras que otras plataformas en la nube han tenido sus propias soluciones de bases de datos, Digital Ocean no ha ofrecido nada en este segmento hasta hoy. Pero el 14 de febrero, el día de todos los amantes, la compañía decidió hacer un regalo a sus clientes y lanzó el servicio de bases de datos administradas en modo de disponibilidad limitada.
Dado que Digital Ocean es ahora una plataforma bastante popular para alojar pequeños proyectos en .NET Core, no podría ignorar este evento.
Cómo describiré en esta publicación cómo funcionan los servicios y cuáles son los matices cuando se conecta a la base de datos cuando se usa .NET Core.

Hoy en día, están disponibles las bases de datos PostrgeSQL versión 10 y 11. MySQL y Redis son las siguientes.
Según Digital Ocean, el servicio de base de datos administrada resuelve los problemas comunes que enfrentan muchas empresas y desarrolladores al crear un clúster desde cero:
- Determinando la infraestructura óptima
- Escale la infraestructura a medida que crecen sus requisitos comerciales y de datos
- Diseñe y administre infraestructura de alta disponibilidad y procesos de conmutación por error
- Implementación de una estrategia de respaldo y recuperación
- Pronosticar y mantener los costos de mantenimiento de la infraestructura.
Hoy, la creación de la base más compacta le costará $ 15. La configuración más cara puede costar
más de dos mil dólares al mes .
Piscinas de conexión
Cuando un cliente se conecta directamente a una base de datos PostgreSQL, el servidor crea un proceso para manejar esta conexión. Cada conexión individual requiere aproximadamente 10 MB de RAM y usa esta memoria hasta que se cierra. Además, el número total de conexiones es fijo, y cuando se utilizan todas las conexiones, los nuevos clientes ya no podrán conectarse.
Digital Ocean le permite crear grupos de conexiones que se ejecutan sobre la base de PgBouncer. El grupo de conexiones reduce los problemas de rendimiento al dirigir las conexiones del cliente a la aplicación del grupo, lo que reduce la cantidad de procesos que la base de datos necesita procesar. La aplicación de grupo transfiere parte de las conexiones a la base de datos y coloca el resto en la cola donde están hasta que la base de datos esté libre para nuevas conexiones.
Cuando se usa el grupo de conexiones, las aplicaciones no necesitan administrar la conexión real. Solo necesitarán conectarse al grupo y desconectarse después de completar la tarea.
Creación de piscina
Crear un grupo de conexiones es muy simple: debe abrir un clúster e ir a la pestaña Grupos de conexiones. DigitalOcean admite tres tipos de agrupación:
TransacciónEste modo permite que cada cliente use el grupo simultáneamente para una transacción. Si se envían más transacciones de las que están disponibles en el grupo, las transacciones adicionales se ponen en cola y se procesan después de que las conexiones estén disponibles. El modo de transacción es adecuado cuando tiene una gran cantidad de clientes que usan conexiones inactivas. Estos clientes mantendrán su conexión al grupo sin establecer una conexión a PostgreSQL.
SesiónEste modo permite al cliente procesar solicitudes hasta que se desconecte de la base de datos, manteniendo una conexión con este cliente todo el tiempo. Si se conectan más clientes de los que no se puede procesar en el grupo, estos clientes se ponen en cola y se conectan después de desconectar un cliente existente.
DeclaraciónEste modo es el más estricto y permite solo un operador a la vez antes de pasar al siguiente cliente en la cola. Esto significa que las solicitudes con múltiples operadores no están permitidas y no se ejecutarán. Este modo es principalmente útil en situaciones donde cada transacción está limitada a un operador. Las transacciones con múltiples agentes serán rechazadas por el grupo.
Después de crear el grupo, debe usar los parámetros del grupo para conectarse a la base de datos. Puede verlos haciendo clic en el enlace Detalles de conexión:

Conexión de piscina

En mis proyectos utilizo
Npgsql , por lo que otros ejemplos implicarán el uso de este controlador.
La cadena de conexión se verá así:
User ID=xxx;Password=xxxx;Host=xxx.db.ondigitalocean.com;Port=xxx;Database=pool_name;Pooling=false;SslMode=Require;Server Compatibility Mode=Redshift;
A qué debe prestar atención:
- El parámetro Base de datos no contendrá el nombre de la base de datos, sino el nombre del grupo a través del cual se realizará la conexión a la base de datos.
- La agrupación se establecerá en falso. El grupo de conexiones será administrado por PgBouncer, no por el controlador.
- El parámetro SslMode debe establecerse en Requerir, ya que se requerirá un certificado para abrir la conexión.
- El parámetro del modo de compatibilidad del servidor debe inicializarse al valor de Redshift . Esto evitará una serie de problemas al usar el controlador npgsql a través de PgBouncer.
El método de preparación de la conexión se verá así:
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; };
Aquí vale la pena prestar atención a dos puntos.
- El primero Al crear una conexión, debe usar un certificado. Se puede descargar en el cuadro de diálogo para ver los parámetros de conexión al grupo. La conexión del certificado se configura a través de ProvideClientCertificatesCallback .
- Segunda . El procedimiento de verificación del certificado de grupo, que se configura a través de RemoteCertificateValidationCallback. En mi ejemplo, se utiliza un pequeño truco que le permite ignorar el error que ocurre debido al hecho de que la verificación del certificado raíz no funciona.
No olvide que el servicio se proporciona actualmente en modo de DISPONIBILIDAD LIMITADA, lo que significa que parte de la funcionalidad todavía se puede ampliar y pueden surgir problemas al trabajar con servicios que el equipo de DO aún no ha podido solucionar.
Referencias