Aumentare il numero di istanze con il database SQL di AzureScaling out with Azure SQL Database

È possibile aumentare facilmente il numero di istante dei database SQL di Azure con gli strumenti dei database elastici .You can easily scale out Azure SQL databases using the Elastic Database tools. Questi strumenti e funzionalità consentono di usare le risorse di database di Database SQL di Azure per creare soluzioni per carichi di lavoro transazionali e soprattutto applicazioni SaaS (Software as a Service).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. Le funzionalità dei database elastici sono costituite dai seguenti elementi:Elastic Database features are composed of the:

Nel grafico seguente è illustrata un'architettura che include le funzionalità dei database elastici in relazione a una raccolta di database.The following graphic shows an architecture that includes the Elastic Database features in relation to a collection of databases.

In questo grafico, i colori del database rappresentano gli schemi.In this graphic, colors of the database represent schemas. I database con lo stesso colore condividono gli stessi schemi.Databases with the same color share the same schema.

  1. Un set di database SQL di Azure è ospitato in Azure tramite l'architettura di partizionamento orizzontale.A set of Azure SQL databases are hosted on Azure using sharding architecture.
  2. La libreria client di database elastici viene utilizzata per gestire un set di partizioni.The Elastic Database client library is used to manage a shard set.
  3. Un subset dei database viene inserito in un pool elastico.A subset of the databases are put into an elastic pool. Vedere l'articolo su che cos'è un pool.(See What is a pool?).
  4. Un processo di database elastico esegue gli script T-SQL pianificati o ad-hoc in tutti i database.An Elastic Database job runs scheduled or ad hoc T-SQL scripts against all databases.
  5. Lo strumento di suddivisione-unione viene utilizzato per spostare i dati da una partizione a un’altra.The split-merge tool is used to move data from one shard to another.
  6. La query di database elastico consente di scrivere una query che si estende a tutti i database nel set di partizioni.The Elastic Database query allows you to write a query that spans all databases in the shard set.
  7. Transazioni di database elastico è una funzionalità che consente di eseguire transazioni che si estendono su più database.Elastic transactions allow you to run transactions that span several databases.

Strumenti di database elastici

Perché usare gli strumenti?Why use the tools?

Il raggiungimento dell'elasticità e della scalabilità delle applicazioni cloud è stato semplice per le VM e l'archiviazione BLOB in quanto è bastato aggiungere o sottrarre le unità nonché aumentare la potenza.Achieving elasticity and scale for cloud applications has been straightforward for VMs and blob storage - simply add or subtract units, or increase power. Tuttavia, resta una sfida per l’elaborazione dei dati con stato in database relazionali.But it has remained a challenge for stateful data processing in relational databases. Sfide emerse in questi scenari:Challenges emerged in these scenarios:

  • Aumento e riduzione della capacità per la parte del carico di lavoro relativa al database relazionale.Growing and shrinking capacity for the relational database part of your workload.
  • Gestione degli hotspot che potrebbero verificarsi interessando un subset specifico di dati, quali ad esempio clienti finali (tenant) impegnati.Managing hotspots that may arise affecting a specific subset of data - such as a busy end-customer (tenant).

In genere, questi scenari sono stati affrontati effettuando investimenti in server di database di scala maggiore per supportare l'applicazione.Traditionally, scenarios like these have been addressed by investing in larger-scale database servers to support the application. Questa opzione offre però possibilità limitate negli ambienti cloud, in cui l'intera elaborazione viene eseguita su appositi componenti hardware predefiniti.However, this option is limited in the cloud where all processing happens on predefined commodity hardware. Invece, la distribuzione dei dati e l'elaborazione in molti database strutturati in modo identico (un modello di scalabilità orizzontale noto come "partizionamento orizzontale") fornisce un'alternativa agli approcci tradizionali di scalabilità verticale sia in termini di costi che di elasticità.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.

Scalabilità orizzontale e verticaleHorizontal and vertical scaling

Nella figura seguente vengono illustrate le dimensioni orizzontali e verticali della scalabilità, che sono i metodi di base in cui possono essere ridimensionati i database elastici.The following figure shows the horizontal and vertical dimensions of scaling, which are the basic ways the elastic databases can be scaled.

Scalabilità orizzontale e verticale

Per scalabilità orizzontale si intende l’aggiunta o la rimozione di database per regolare le prestazioni complessive o la capacità.Horizontal scaling refers to adding or removing databases in order to adjust capacity or overall performance. Detta anche “scaling out”.This is also called “scaling out”. Il partizionamento orizzontale, in cui i dati vengono partizionati in una raccolta di database strutturati in modo identico, è un approccio comune per implementare la scalabilità orizzontale .Sharding, in which data is partitioned across a collection of identically structured databases, is a common way to implement horizontal scaling.

Per scalabilità verticale si intende l’aumento o la riduzione del livello delle prestazioni di un singolo database ed è nota anche come "scaling up".Vertical scaling refers to increasing or decreasing the performance level of an individual database—this is also known as “scaling up.”

La maggior parte delle applicazioni di database su scala cloud usano una combinazione di questi due strategie.Most cloud-scale database applications use a combination of these two strategies. Un'applicazione di software come servizio può, ad esempio, utilizzare la scalabilità orizzontale per eseguire il provisioning di nuovi clienti finali e la scalabilità verticale per consentire l’espansione o la riduzione delle risorse del database di ogni cliente finale in base alle esigenze del carico di lavoro.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.

  • La scalabilità orizzontale è gestita tramite la Libreria client di database elastici.Horizontal scaling is managed using the Elastic Database client library.
  • La scalabilità verticale viene eseguita con i cmdlet di Azure PowerShell per modificare il livello di servizio o posizionando i database in un pool elastico.Vertical scaling is accomplished using Azure PowerShell cmdlets to change the service tier, or by placing databases in an elastic pool.

Partizionamento orizzontaleSharding

Partizionamento orizzontale è una tecnica per distribuire grandi quantità di dati strutturati in modo identico tra più database indipendenti.Sharding is a technique to distribute large amounts of identically structured data across a number of independent databases. È molto usato dagli sviluppatori cloud che creano offerte Software as a Service (SAAS) per clienti finali o aziende.It is especially popular with cloud developers creating Software as a Service (SAAS) offerings for end customers or businesses. Questi clienti finali vengono spesso definiti "tenant".These end customers are often referred to as “tenants”. Il partizionamento orizzontale può essere necessario per vari motivi:Sharding may be required for any number of reasons:

  • La quantità totale di dati è troppo elevata per un singolo databaseThe total amount of data is too large to fit within the constraints of a single database
  • La velocità effettiva delle transazioni del carico di lavoro complessivo supera le capacità di un singolo databaseThe transaction throughput of the overall workload exceeds the capabilities of a single database
  • Può essere necessario isolare fisicamente i tenant, quindi predisporre database separati per ogni tenantTenants may require physical isolation from each other, so separate databases are needed for each tenant
  • È possibile che sezioni diverse di un database risiedano in aree geografiche diverse per motivi di conformità, di prestazioni o geopolitici.Different sections of a database may need to reside in different geographies for compliance, performance, or geopolitical reasons.

In altri scenari, ad esempio l'inserimento di dati da dispositivi distribuiti, il partizionamento orizzontale può essere usato per riempire un set di database organizzati secondo una logica temporale.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. Ad esempio, è possibile destinare un database separato a ogni giorno o settimana.For example, a separate database can be dedicated to each day or week. In tal caso, la chiave di partizionamento orizzontale può essere un integer che rappresenta la data (presente in tutte le righe delle tabelle partizionate) e l'applicazione deve instradare le query che recuperano informazioni per un intervallo di date al subset di database che coprono l'intervallo in questione.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.

Il partizionamento orizzontale rappresenta la scelta ottimale quando tutte le transazioni in un'applicazione possono essere limitate a un singolo valore di una chiave di partizionamento orizzontale.Sharding works best when every transaction in an application can be restricted to a single value of a sharding key. Questo garantisce che tutte le transazioni saranno locali rispetto a uno specifico database.That ensures that all transactions are local to a specific database.

Multi-tenant e single-tenantMulti-tenant and single-tenant

Alcune applicazioni usano l'approccio più semplice di creare un database separato per ogni tenant.Some applications use the simplest approach of creating a separate database for each tenant. Questo è il modello di partizionamento orizzontale per singolo tenant , che offre isolamento, funzionalità di backup e ripristino e scalabilità delle risorse in base alla granularità del tenant.This is the single tenant sharding pattern that provides isolation, backup/restore ability, and resource scaling at the granularity of the tenant. Con il partizionamento orizzontale per singolo tenant, ogni database è associato a uno specifico valore di ID tenant (o valore di chiave del cliente), ma tale chiave non deve essere necessariamente presente nei dati.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. È responsabilità dell'applicazione indirizzare ogni richiesta al database appropriato e la libreria client può semplificare questa operazione.It is the application’s responsibility to route each request to the appropriate database - and the client library can simplify this.

Single-tenant e multi-tenant

Altri scenari prevedono di riunire più tenant all'interno dei database, anziché isolarli in database separati.Others scenarios pack multiple tenants together into databases, rather than isolating them into separate databases. Si tratta di un modello di partizionamento orizzontale multi-tenant tipico e la scelta di un modello di questo tipo può essere dovuta al fatto che un'applicazione gestisce un numero elevato di tenant di dimensioni limitate.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. Nel partizionamento orizzontale multi-tenant, tutte le righe delle tabelle di database sono progettate per contenere una chiave che identifica l'ID tenant o una chiave di partizionamento orizzontale.In multi-tenant sharding, the rows in the database tables are all designed to carry a key identifying the tenant ID or sharding key. Anche in questo caso, il livello applicazione è responsabile dell'instradamento delle richieste del tenant al database appropriato e questo può essere supportato dalla libreria client dei database elastici.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. Inoltre, la sicurezza a livello di riga può essere utilizzata per filtrare le righe a cui ogni tenant può accedere: per informazioni dettagliate, vedere Applicazioni multi-tenant con strumenti di database elastici e sicurezza a livello di riga.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. Con lo schema di partizionamento orizzontale multi-tenant potrebbe essere necessaria la ridistribuzione dei dati tra database e questa operazione è facilitata dallo strumento di suddivisione-unione dei database elastici.Redistributing data among databases may be needed with the multi-tenant sharding pattern, and this is facilitated by the elastic database split-merge tool. Per altre informazioni sui modelli di progettazione per le applicazioni SaaS mediante pool elastici, vedere Modelli di progettazione per applicazioni SaaS multi-tenant con database SQL di 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.

Spostare i dati da database a più tenancy a database a singolo tenancyMove data from multiple to single-tenancy databases

Quando si crea un'applicazione SaaS, in genere ai clienti potenziali viene offerta una versione di valutazione del software.When creating a SaaS application, it is typical to offer prospective customers a trial version of the software. In questo caso, è conveniente utilizzare un database multi-tenant per i dati.In this case, it is cost-effective to use a multi-tenant database for the data. Tuttavia, quando un potenziale cliente diventa un cliente reale, è consigliabile utilizzare un database single-tenant, poiché garantisce prestazioni migliori.However, when a prospect becomes a customer, a single-tenant database is better since it provides better performance. Se il cliente ha creato dati durante il periodo di valutazione, utilizzare lo strumento di suddivisione-unione per spostare i dati dal database multi-tenant al nuovo database single-tenant.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.

Passaggi successiviNext steps

Per un'app di esempio che illustra la libreria client, vedere Iniziare a usare gli strumenti di database elastici.For a sample app that demonstrates the client library, see Get started with Elastic Database tools.

Per convertire i database esistenti e usare gli strumenti, vedere l'articolo sulla migrazione dei database esistenti per aumentare il numero di istanze.To convert existing databases to use the tools, see Migrate existing databases to scale out.

Per visualizzare le specifiche del pool elastico, vedere Considerazioni di prezzo e prestazioni per un pool elastico oppure creare un nuovo pool con pool elastici.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.

Risorse aggiuntiveAdditional resources

Se non si usano gli strumenti di database elastici,Not using elastic database tools yet? vedere la Guida introduttiva.Check out our Getting Started Guide. Se ci sono domande, è possibile visitare il forum sul database SQL mentre è possibile inserire le richieste di nuove funzionalità nel forum relativo a commenti e suggerimenti sul database 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.