Escalado horizontal con Base de datos SQL de AzureScaling out with Azure SQL Database

Es muy fácil escalar horizontalmente bases de datos de SQL Azure mediante las herramientas de Base de datos elástica .You can easily scale out Azure SQL databases using the Elastic Database tools. Estas herramientas y características permiten usar los recursos de bases de datos de Azure SQL Database con el fin de crear soluciones para cargas de trabajo transaccionales y, especialmente, aplicaciones de software como servicio (SaaS).These tools and features let you use the database resources of Azure SQL Database to create solutions for transactional workloads, and especially Software as a Service (SaaS) applications. Las características de Elastic Database se componen de lo siguiente:Elastic Database features are composed of the:

El siguiente gráfico muestra una arquitectura que incluye las características de Elastic Database en relación con una colección de bases de datos.The following graphic shows an architecture that includes the Elastic Database features in relation to a collection of databases.

En este gráfico, los colores de la base de datos representan esquemas.In this graphic, colors of the database represent schemas. Las bases de datos con el mismo color comparten el mismo esquema.Databases with the same color share the same schema.

  1. Un conjunto de bases de datos de SQL de Azure se hospedan en Azure con la arquitectura de particionamiento.A set of Azure SQL databases are hosted on Azure using sharding architecture.
  2. La biblioteca de cliente de base de datos elástica se usa para administrar un conjunto de particiones.The Elastic Database client library is used to manage a shard set.
  3. Un subconjunto de las bases de datos se coloca en un grupo elástico.A subset of the databases are put into an elastic pool. (Consulte ¿Qué es un grupo?).(See What is a pool?).
  4. Un trabajo de Elastic Database ejecuta scripts de T-SQL programados o ad-hoc en todas las bases de datos.An Elastic Database job runs scheduled or ad hoc T-SQL scripts against all databases.
  5. La herramienta de división y combinación se usa para mover datos de una partición a otra.The split-merge tool is used to move data from one shard to another.
  6. La consulta de base de datos elástica le permite escribir una consulta que abarque todas las bases de datos del conjunto de particiones.The Elastic Database query allows you to write a query that spans all databases in the shard set.
  7. Las transacciones elásticas le permiten ejecutar transacciones que abarcan varias bases de datos.Elastic transactions allow you to run transactions that span several databases.

Herramientas de Base de datos elástica

¿Por qué hay que usar las herramientas?Why use the tools?

Dotar de elasticidad y escalabilidad a las aplicaciones en la nube ha sido sencillo para el almacenamiento de blobs y las máquinas virtuales; basta con sumar o restar unidades, o bien con aumentar la potencia.Achieving elasticity and scale for cloud applications has been straightforward for VMs and blob storage - simply add or subtract units, or increase power. Pero sigue siendo un desafío para el procesamiento de datos con estado en bases de datos relacionales.But it has remained a challenge for stateful data processing in relational databases. Estos son los desafíos que han surgido en estos escenarios:Challenges emerged in these scenarios:

  • Aumento y disminución de la capacidad de la parte de la base de datos relacional de la carga de trabajo.Growing and shrinking capacity for the relational database part of your workload.
  • La administración de las zonas activas puede afectar a un subconjunto específico de datos, como un usuario final (inquilino) ocupado.Managing hotspots that may arise affecting a specific subset of data - such as a busy end-customer (tenant).

Tradicionalmente, escenarios similares se han abordado a través de la inversión en servidores de base de datos a gran escala para admitir la aplicación.Traditionally, scenarios like these have been addressed by investing in larger-scale database servers to support the application. Sin embargo, esta opción está limitada en la nube donde todo el procesamiento ocurre en hardware estándar predefinido.However, this option is limited in the cloud where all processing happens on predefined commodity hardware. En su lugar, la distribución de datos y el procesamiento a través de muchas bases de datos con una estructura idéntica (un patrón de escalado horizontal conocido como "particionamiento") proporciona una alternativa a los enfoques de escalado vertical tradicionales, tanto en términos de costo como de elasticidad.Instead, distributing data and processing across many identically structured databases (a scale-out pattern known as "sharding") provides an alternative to traditional scale-up approaches both in terms of cost and elasticity.

Escalado horizontal y verticalHorizontal and vertical scaling

En la siguiente ilustración se muestran las dimensiones horizontales y verticales de escalado, que son las formas básicas en que se pueden escalar las bases de datos elásticas.The following figure shows the horizontal and vertical dimensions of scaling, which are the basic ways the elastic databases can be scaled.

Escalado horizontal frente a vertical

Escalar horizontalmente es agregar o quitar bases de datos con el fin de ajustar la capacidad o el rendimiento general.Horizontal scaling refers to adding or removing databases in order to adjust capacity or overall performance. También se denomina "escalado horizontal".This is also called “scaling out”. El particionamiento, en el que los datos se particionan en toda una recopilación de bases de datos con estructura idéntica, es un enfoque común para implementar el escalado horizontal.Sharding, in which data is partitioned across a collection of identically structured databases, is a common way to implement horizontal scaling.

Escalar verticalmente es aumentar o disminuir el nivel de rendimiento de una base individual; también se conoce como "escalado vertical".Vertical scaling refers to increasing or decreasing the performance level of an individual database—this is also known as “scaling up.”

La mayoría de las aplicaciones de bases de datos a escala de la nube usan una combinación de estas dos estrategias.Most cloud-scale database applications use a combination of these two strategies. Por ejemplo, una aplicación de software como servicio podría utilizar escalado horizontal para aprovisionar usuarios finales nuevos y escalado vertical para permitir que la base de datos de cada cliente final aumente o disminuya los recursos, según lo requiera la carga de trabajo.For example, a Software as a Service application may use horizontal scaling to provision new end-customers and vertical scaling to allow each end-customer’s database to grow or shrink resources as needed by the workload.

  • El escalado horizontal se administra mediante la biblioteca de cliente de bases de datos elásticas.Horizontal scaling is managed using the Elastic Database client library.
  • El escalado vertical se logra utilizando cmdlets de Azure PowerShell para cambiar el nivel de servicio o colocando bases de datos en un grupo elástico.Vertical scaling is accomplished using Azure PowerShell cmdlets to change the service tier, or by placing databases in an elastic pool.

Clave de particionamientoSharding

Particionamiento es una técnica para distribuir grandes cantidades de datos estructurados de manera idéntica entre un número de bases de datos independientes.Sharding is a technique to distribute large amounts of identically structured data across a number of independent databases. Su uso se ha extendido entre los desarrolladores de nube que crean ofertas de software como servicio (SAAS) para empresas o clientes finales.It is especially popular with cloud developers creating Software as a Service (SAAS) offerings for end customers or businesses. Estos clientes finales a menudo se conocen como "inquilinos".These end customers are often referred to as “tenants”. El particionamiento puede ser necesario por diversos motivos:Sharding may be required for any number of reasons:

  • La cantidad total de datos es demasiado grande para caber dentro de las restricciones de una base de datosThe total amount of data is too large to fit within the constraints of a single database
  • El rendimiento de transacciones de la carga de trabajo total supera la capacidad de una sola base de datosThe transaction throughput of the overall workload exceeds the capabilities of a single database
  • Los inquilinos pueden requerir el aislamiento físico entre sí, por lo que se necesitan bases de datos independientes para cada inquilinoTenants may require physical isolation from each other, so separate databases are needed for each tenant
  • Es posible que distintas secciones de una base de datos tengan que residir en diferentes geografías por motivos de cumplimiento, rendimiento o geopolíticos.Different sections of a database may need to reside in different geographies for compliance, performance, or geopolitical reasons.

En otros escenarios, como la recopilación de datos desde dispositivos distribuidos, el particionamiento se puede usar para llenar un conjunto de bases de datos organizadas de manera temporal.In other scenarios, such as ingestion of data from distributed devices, sharding can be used to fill a set of databases that are organized temporally. Por ejemplo, puede dedicarse una base de datos independiente a cada día o semana.For example, a separate database can be dedicated to each day or week. En ese caso, la clave de particionamiento puede ser un entero que representa la fecha (presente en todas las filas de las tablas particionadas) y la aplicación debe enrutar las consultas que recuperan información de un intervalo de fechas al subconjunto de bases de datos que abarca el intervalo en cuestión.In that case, the sharding key can be an integer representing the date (present in all rows of the sharded tables) and queries retrieving information for a date range must be routed by the application to the subset of databases covering the range in question.

El particionamiento funciona mejor cuando todas las transacciones de una aplicación pueden restringirse a un único valor de una clave de particionamiento.Sharding works best when every transaction in an application can be restricted to a single value of a sharding key. De este modo se garantiza que todas las transacciones sean locales con respecto a una base de datos.That ensures that all transactions are local to a specific database.

De un solo inquilino y multiinquilinoMulti-tenant and single-tenant

Algunas aplicaciones usan el enfoque más simple de crear una base de datos independiente para cada inquilino.Some applications use the simplest approach of creating a separate database for each tenant. Se trata del patrón de particionamiento de un solo inquilino que proporciona aislamiento, capacidad de copia de seguridad y restauración, y ajuste de escala de recursos en la granularidad del inquilino.This is the single tenant sharding pattern that provides isolation, backup/restore ability, and resource scaling at the granularity of the tenant. Con el particionamiento de un solo inquilino, cada base de datos se asocia a un determinado valor de identificador de inquilino (o valor de clave de cliente), pero no es necesario que esa clave esté siempre presente en los propios datos.With single tenant sharding, each database is associated with a specific tenant ID value (or customer key value), but that key need not always be present in the data itself. Es responsabilidad de la aplicación enrutar cada solicitud a la base de datos adecuada y la biblioteca de cliente puede simplificar este proceso.It is the application’s responsibility to route each request to the appropriate database - and the client library can simplify this.

Un solo inquilino frente a multiinquilinos

Otros escenarios empaquetan varios inquilinos juntos en bases de datos, en lugar de aislarlos en bases de datos independientes.Others scenarios pack multiple tenants together into databases, rather than isolating them into separate databases. Se trata de un patrón de particionamiento multiinquilino típico y puede estar impulsado por el hecho de que una aplicación administra grandes cantidades de pequeños inquilinos.This is a typical multi-tenant sharding pattern - and it may be driven by the fact that an application manages large numbers of small tenants. En el particionamiento de varios inquilinos, las filas de las tablas de bases de datos están diseñadas para contener una clave que identifique la clave de particionamiento o el identificador del inquilino.In multi-tenant sharding, the rows in the database tables are all designed to carry a key identifying the tenant ID or sharding key. De nuevo, la capa de aplicación es la responsable de enrutar la solicitud de un inquilino a la base de datos adecuada, y esto puede admitirlo la biblioteca de cliente de bases de datos elásticas.Again, the application tier is responsible for routing a tenant’s request to the appropriate database, and this can be supported by the elastic database client library. Además, es posible usar seguridad en el nivel de fila para filtrar las filas a las que puede tener acceso cada inquilino; si desea obtener detalles, consulte Aplicaciones multiinquilinos con herramientas de bases de datos elásticas y seguridad de nivel de fila.In addition, row-level security can be used to filter which rows each tenant can access - for details, see Multi-tenant applications with elastic database tools and row-level security. La redistribución de datos entre las bases de datos puede ser necesaria con el patrón de particionamiento multiinquilinos, lo que se ve facilitado por la herramienta de división y combinación de bases de datos elásticas.Redistributing data among databases may be needed with the multi-tenant sharding pattern, and this is facilitated by the elastic database split-merge tool. Para más información sobre los patrones de diseño de las aplicaciones SaaS que usan grupos elásticos, consulte Design Patterns for Multi-tenant SaaS Applications with Azure SQL Database(Diseño de patrones para aplicaciones SaaS multiempresa con Base de datos SQL de Azure).To learn more about design patterns for SaaS applications using elastic pools, see Design Patterns for Multi-tenant SaaS Applications with Azure SQL Database.

Mover datos de bases de datos de multinIiquilino a inquilino únicoMove data from multiple to single-tenancy databases

Al crear una aplicación SaaS, es típico ofrecer a los clientes potenciales una versión de prueba del software.When creating a SaaS application, it is typical to offer prospective customers a trial version of the software. En este caso, resulta más rentable usar una base de datos multiinquilino para los datos.In this case, it is cost-effective to use a multi-tenant database for the data. Sin embargo, cuando un cliente potencial se convierte en un cliente, una base de datos de inquilino único es mejor, puesto que ofrece un mejor rendimiento.However, when a prospect becomes a customer, a single-tenant database is better since it provides better performance. Si el cliente había creado datos durante el período de prueba, use la herramienta de división y combinación para mover los datos de la base de datos multiinquilino a la nueva base de datos de inquilino único.If the customer had created data during the trial period, use the split-merge tool to move the data from the multi-tenant to the new single-tenant database.

Pasos siguientesNext steps

Para ver una aplicación de ejemplo que demuestra la biblioteca de cliente, consulte Introducción a las herramientas de Elastic Database.For a sample app that demonstrates the client library, see Get started with Elastic Database tools.

Para convertir las bases de datos existentes con el fin de emplear las herramientas, consulte Migración de bases de datos existentes de escalado horizontal.To convert existing databases to use the tools, see Migrate existing databases to scale out.

Para ver los detalles del grupo elástico, consulte Consideraciones de precio y rendimiento para un grupo elástico o cree un nuevo grupo con grupos elásticos.To see the specifics of the elastic pool, see Price and performance considerations for an elastic pool, or create a new pool with elastic pools.

Recursos adicionalesAdditional resources

¿Aún no ha usado las herramientas de base de datos elástica?Not using elastic database tools yet? Consulte la Guía de introducción.Check out our Getting Started Guide. Si tiene alguna pregunta, póngase en contacto con nosotros en el foro de SQL Database. Para efectuar solicitudes de características, agréguelas en el foro de comentarios sobre SQL Database.For questions, please reach out to us on the SQL Database forum and for feature requests, please add them to the SQL Database feedback forum.