Escalando horizontalmente com o Banco de Dados SQL do AzureScaling out with Azure SQL Database

Você pode escalar horizontalmente bancos de dados SQL do Azure com facilidade usando as ferramentas do Banco de Dados Elástico .You can easily scale out Azure SQL databases using the Elastic Database tools. Essas ferramentas e recursos permitem que você use os recursos de banco de dados do Banco de Dados SQL do Azure para criar soluções para cargas de trabalho transacionais e, especialmente, aplicativos SaaS (software como serviço).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. Os recursos do Banco de Dados Elástico são compostos pelo seguinte:Elastic Database features are composed of the:

O gráfico a seguir mostra uma arquitetura que inclui os recursos do Banco de Dados Elástico em relação a uma coleção de bancos de dados.The following graphic shows an architecture that includes the Elastic Database features in relation to a collection of databases.

Neste gráfico, as cores do banco de dados representam esquemas.In this graphic, colors of the database represent schemas. Bancos de dados com a mesma cor compartilham o mesmo esquema.Databases with the same color share the same schema.

  1. Um conjunto de bancos de dados SQL do Azure é hospedado no Azure usando a arquitetura de fragmentação.A set of Azure SQL databases are hosted on Azure using sharding architecture.
  2. A biblioteca de clientes do Banco de Dados Elástico é usada para gerenciar um conjunto de fragmentos.The Elastic Database client library is used to manage a shard set.
  3. Um subconjunto dos bancos de dados é colocado em um pool elástico.A subset of the databases are put into an elastic pool. (Consulte O que é um pool?).(See What is a pool?).
  4. Um trabalho de Banco de Dados Elástico executa scripts T-SQL agendados ou ad-hoc em todos os bancos de dados.An Elastic Database job runs scheduled or ad hoc T-SQL scripts against all databases.
  5. A ferramenta de divisão e mesclagem é usada para mover dados de um fragmento para outro.The split-merge tool is used to move data from one shard to another.
  6. A consulta ao Banco de Dados Elástico permite gravar uma consulta que se estenda por todos os bancos de dados no conjunto de fragmentos.The Elastic Database query allows you to write a query that spans all databases in the shard set.
  7. Transações elásticas permitem a execução de transações que abrangem vários bancos de dados.Elastic transactions allow you to run transactions that span several databases.

Ferramentas de Banco de Dados Elástico

Por que usar as ferramentas?Why use the tools?

Obter elasticidade e escala para aplicativos em nuvem foi fácil para o armazenamento de blobs e VMs – basta adicionar ou subtrair unidades ou aumentar a potência.Achieving elasticity and scale for cloud applications has been straightforward for VMs and blob storage - simply add or subtract units, or increase power. Mas continuou sendo um desafio para processamento de dados com estado em bancos de dados relacionais.But it has remained a challenge for stateful data processing in relational databases. Desafios surgiram nesses cenários:Challenges emerged in these scenarios:

  • Aumentando e diminuindo a capacidade para a parte do banco de dados relacional da carga de trabalho.Growing and shrinking capacity for the relational database part of your workload.
  • Gerenciar hotspots que podem surgir afetando um subconjunto específico de dados, como cliente final movimentado (locatário).Managing hotspots that may arise affecting a specific subset of data - such as a busy end-customer (tenant).

Tradicionalmente, cenários como esses foram resolvidos com o investimento em servidores de banco de dados de grande escala para dar suporte ao aplicativo.Traditionally, scenarios like these have been addressed by investing in larger-scale database servers to support the application. No entanto, essa opção é limitada a nuvem em que todo o processamento ocorre em hardware de mercadoria predefinidos.However, this option is limited in the cloud where all processing happens on predefined commodity hardware. Em vez disso, distribuir dados e processar entre vários bancos de dados estruturados de forma idêntica (um padrão de escala vertical conhecido como “fragmentação”) oferece uma alternativa às abordagens tradicionais de escala vertical tanto em termos de custo quanto de elasticidade.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.

Dimensionamento horizontal e verticalHorizontal and vertical scaling

A figura a seguir mostra as dimensões horizontal e vertical da colocação em escala, que são as maneiras básicas de dimensionar os bancos de dados elásticos.The following figure shows the horizontal and vertical dimensions of scaling, which are the basic ways the elastic databases can be scaled.

Escala horizontal versus vertical

O dimensionamento horizontal refere-se à adição ou remoção de bancos de dados para ajustar a capacidade ou desempenho geral.Horizontal scaling refers to adding or removing databases in order to adjust capacity or overall performance. Isso também é chamado de “escalar horizontalmente”.This is also called “scaling out”. A fragmentação, na qual os dados são particionados em um conjunto de bancos de dados estruturados de forma idêntica, é uma maneira comum de implementara a escala horizontal.Sharding, in which data is partitioned across a collection of identically structured databases, is a common way to implement horizontal scaling.

O dimensionamento vertical refere-se ao aumento ou diminuição do nível de desempenho de um banco de dados individual. Isso também é conhecido como “escalar verticalmente”.Vertical scaling refers to increasing or decreasing the performance level of an individual database—this is also known as “scaling up.”

A maioria dos aplicativos de banco de dados de escala de nuvem usa uma combinação dessas duas estratégias.Most cloud-scale database applications use a combination of these two strategies. Por exemplo, um aplicativo de Software como um Serviço pode usar o dimensionamento horizontal para provisionar novos clientes finais e o dimensionamento vertical para permitir que o banco de dados de cada cliente final aumente ou reduza em recursos conforme necessário para a carga de trabalho.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.

  • A escala horizontal é gerenciada com a biblioteca de cliente do Banco de Dados Elástico.Horizontal scaling is managed using the Elastic Database client library.
  • A escala vertical é realizada usando cmdlets do Azure PowerShell para alterar a camada de serviço ou colocando os bancos de dados em um pool elástico.Vertical scaling is accomplished using Azure PowerShell cmdlets to change the service tier, or by placing databases in an elastic pool.

FragmentaçãoSharding

Fragmentação é uma técnica para distribuir grandes quantidades de dados estruturados de forma idêntica entre vários bancos de dados independentes.Sharding is a technique to distribute large amounts of identically structured data across a number of independent databases. É especialmente popular com desenvolvedores de nuvem que estão criando ofertas de SaaS (software como serviço) para clientes finais ou empresas.It is especially popular with cloud developers creating Software as a Service (SAAS) offerings for end customers or businesses. Esses clientes finais costumam ser chamados de “locatários”.These end customers are often referred to as “tenants”. Fragmentação pode ser necessária por vários motivos:Sharding may be required for any number of reasons:

  • A quantidade total de dados é muito grande para caber dentro das restrições de um único banco de dadosThe total amount of data is too large to fit within the constraints of a single database
  • A taxa de transferência de transação da carga de trabalho geral excede as capacidades de um único banco de dadosThe transaction throughput of the overall workload exceeds the capabilities of a single database
  • Inquilinos podem exigir isolamento físico entre si, para que bancos de dados separados são necessários para cada locatárioTenants may require physical isolation from each other, so separate databases are needed for each tenant
  • Seções diferentes de um banco de dados talvez precisem residir em regiões diferentes para questões geopolíticas, de desempenho ou de conformidade.Different sections of a database may need to reside in different geographies for compliance, performance, or geopolitical reasons.

Em outros cenários, como inclusão de dados de dispositivos distribuídos, a fragmentação pode ser usada para preencher um conjunto de bancos de dados que são organizados temporariamente.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 exemplo, um banco de dados pode ser dedicado a cada dia ou semana.For example, a separate database can be dedicated to each day or week. Nesse caso, a chave de fragmentação pode ser um número inteiro que representa a data (presente em todas as linhas das tabelas fragmentadas) e as consultas que recuperam informações para um intervalo de datas devem ser roteadas pelo aplicativo para o subconjunto de bancos de dados que abrangem o intervalo em questão.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.

A fragmentação funciona melhor quando todas as transações em um aplicativo podem ser restrita a um único valor de uma chave de fragmentação.Sharding works best when every transaction in an application can be restricted to a single value of a sharding key. Isso garante que todas as transações são locais para um banco de dados específico.That ensures that all transactions are local to a specific database.

Multilocatário e único locatárioMulti-tenant and single-tenant

Alguns aplicativos usam a abordagem mais simples de criar um banco de dados separado para cada locatário.Some applications use the simplest approach of creating a separate database for each tenant. Este é o padrão de fragmentação de locatário único que fornece isolamento, capacidade de backup/restauração e dimensionamento de recursos na granularidade do locatário.This is the single tenant sharding pattern that provides isolation, backup/restore ability, and resource scaling at the granularity of the tenant. Com a fragmentação de locatário único, cada banco de dados está associado a um valor de ID específico do locatário (ou o valor de chave de cliente), mas essa chave não deve sempre estar presente nos próprios dados.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. É responsabilidade do aplicativo rotear cada solicitação para o banco de dados apropriado, e a biblioteca de cliente pode simplificar isso.It is the application’s responsibility to route each request to the appropriate database - and the client library can simplify this.

Único locatário versus multilocatários

Outros cenários de vários locatários pack juntos em bancos de dados, em vez de isolá-los em bancos de dados separados.Others scenarios pack multiple tenants together into databases, rather than isolating them into separate databases. Esse é um típico padrão de fragmentação multilocatário, que pode ser conduzido pelo fato de que um aplicativo gerencia grandes números de locatários pequenos.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. Na fragmentação multilocatária, as linhas nas tabelas de banco de dados foram projetadas para executar uma chave que identifica a ID do locatário ou a chave de fragmentação.In multi-tenant sharding, the rows in the database tables are all designed to carry a key identifying the tenant ID or sharding key. Novamente, a camada de aplicativo é responsável por rotear a solicitação de um locatário no banco de dados apropriado, e isso pode ter suporte na biblioteca de cliente do banco de dados elástico.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. Além disso, a segurança no nível de linha pode ser usada para filtrar quais linhas cada locatário pode acessar. Para obter detalhes, confira Aplicativos multilocatários com ferramentas de banco de dados elástico e segurança em nível de linha.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. Redistribuir dados entre bancos de dados pode ser necessário com o padrão de fragmentação de multilocatário, e isso é facilitado pela ferramenta de divisão/mesclagem de banco de dados elástico.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 saber mais sobre padrões de design para aplicativos SaaS usando pools elásticos, confira Padrões de design para aplicativos de SaaS multilocatários com o banco de dados SQL.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 dados de bancos de dados de vários locatários para de um locatárioMove data from multiple to single-tenancy databases

Ao criar um aplicativo SaaS, é comum para oferecer aos clientes em potencial uma versão de avaliação do software.When creating a SaaS application, it is typical to offer prospective customers a trial version of the software. Nesse caso, é econômico usar um banco de dados multilocatário para os dados.In this case, it is cost-effective to use a multi-tenant database for the data. No entanto, quando um cliente em potencial se torna um cliente, um banco de dados de um único locatário é melhor, já que fornece maior desempenho.However, when a prospect becomes a customer, a single-tenant database is better since it provides better performance. Se o cliente tiver criado dados durante o período de avaliação, use a ferramenta de divisão/mesclagem para mover os dados do banco de dados multilocatário para o novo banco de dados de um único locatário.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.

Próximas etapasNext steps

Para ver um aplicativo de exemplo que demonstra a biblioteca de cliente, confira Introdução às ferramentas do Banco de Dados Elástico.For a sample app that demonstrates the client library, see Get started with Elastic Database tools.

Para converter os bancos de dados existentes para usar as ferramentas, consulte Migrar bancos de dados existentes para escala horizontal.To convert existing databases to use the tools, see Migrate existing databases to scale out.

Para ver os detalhes do pool elástico, confira Considerações de preço e desempenho para um pool elástico ou crie um novo pool com os pools 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 adicionaisAdditional resources

Ainda não está usando ferramentas de banco de dados elástico?Not using elastic database tools yet? Confira nosso Guia de Introdução.Check out our Getting Started Guide. Em caso de dúvidas, entre em contato conosco pelo fórum do Banco de Dados SQL e, para solicitações de recursos, adicione-as ao fórum de comentários sobre o Banco de Dados SQL.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.