Applicazioni multi-tenant in AzureMultitenant Applications in Azure

Un'applicazione multi-tenant è una risorsa condivisa che consente a utenti separati, o "tenant", di visualizzare l'applicazione come se fosse la propria.A multitenant application is a shared resource that allows separate users, or "tenants," to view the application as though it was their own. Uno degli scenari tipici di un'applicazione multi-tenant è quando tutti gli utenti dell'applicazione desiderano personalizzare l'esperienza utente, ma dispongono tutti degli stessi requisiti aziendali di base.A typical scenario that lends itself to a multitenant application is one in which all users of the application may wish to customize the user experience but otherwise have the same basic business requirements. Esempi di grandi applicazioni multi-tenant sono Office 365, Outlook.com e visualstudio.com.Examples of large multitenant applications are Office 365, Outlook.com, and visualstudio.com.

Dal punto di vista del fornitore di applicazioni, i vantaggi della multi-tenancy risiedono principalmente nell'efficienza operativa e dei costi.From an application provider's perspective, the benefits of multitenancy mostly relate to operational and cost efficiencies. Una versione dell'applicazione può soddisfare le esigenze di molti tenant/client, consentendo il consolidamento di attività amministrative del sistema come il monitoraggio, l'ottimizzazione delle prestazioni, la manutenzione del software e i backup di dati.One version of your application can meet the needs of many tenants/customers, allowing consolidation of system administration tasks such as monitoring, performance tuning, software maintenance, and data backups.

Di seguito è riportato un elenco degli obiettivi e dei requisiti più significativi dal punto di vista di un fornitore.The following provides a list of the most significant goals and requirements from a provider's perspective.

  • Provisioning: è necessario essere in grado di eseguire il provisioning di nuovi tenant per l'applicazione.Provisioning: You must be able to provision new tenants for the application. Per le applicazioni multi-tenant che contano un ingente numero di tenant, di solito è necessario automatizzare il processo abilitando il provisioning self-service.For multitenant applications with a large number of tenants, it is usually necessary to automate this process by enabling self-service provisioning.
  • Manutenibilità: è necessario essere in grado di aggiornare l'applicazione ed eseguire altre attività di manutenzione quando è usata da più tenant.Maintainability: You must be able to upgrade the application and perform other maintenance tasks while multiple tenants are using it.
  • Monitoraggio: è necessario essere in grado di monitorare l'applicazione in ogni momento allo scopo di identificare eventuali problemi e risolverli.Monitoring: You must be able to monitor the application at all times to identify any problems and to troubleshoot them. Ciò include il monitoraggio della modalità di uso dell'applicazione da parte di ogni tenant.This includes monitoring how each tenant is using the application.

Un'applicazione multi-tenant correttamente implementata offre agli utenti i vantaggi seguenti.A properly implemented multitenant application provides the following benefits to users.

  • Isolamento: le attività dei singoli tenant non incidono sull'uso dell'applicazione da parte degli altri tenant.Isolation: The activities of individual tenants do not affect the use of the application by other tenants. I tenant non possono accedere ai dati reciproci.Tenants cannot access each other's data. Ogni tenant avrà apparentemente l'uso esclusivo dell'applicazione.It appears to the tenant as though they have exclusive use of the application.
  • Disponibilità: i singoli tenant vogliono che l'applicazione sia sempre disponibile, meglio se con garanzie definite in un contratto di servizio (SLA, Service Level Agreement).Availability: Individual tenants want the application to be constantly available, perhaps with guarantees defined in an SLA. Come già accennato, le attività dei singoli tenant non dovrebbero incidere sulla disponibilità dell'applicazione.Again, the activities of other tenants should not affect the availability of the application.
  • Scalabilità: è possibile scalare l'applicazione in modo da soddisfare la domanda di singoli tenant.Scalability: The application scales to meet the demand of individual tenants. La presenza e le azioni degli altri tenant non dovrebbero incidere sulle prestazioni dell'applicazione.The presence and actions of other tenants should not affect the performance of the application.
  • Costi: i costi sono inferiori rispetto all'esecuzione di un'applicazione single-tenant dedicata, in quanto la multi-tenancy consente la condivisione delle risorse.Costs: Costs are lower than running a dedicated, single-tenant application because multi-tenancy enables the sharing of resources.
  • Personalizzabilità.Customizability. la possibilità di personalizzare l'applicazione per un singolo tenant in vari modi, ad esempio con l'aggiunta o la rimozione di funzionalità, la modifica di colori e loghi o persino l'aggiunta di un proprio codice o script.The ability to customize the application for an individual tenant in various ways such as adding or removing features, changing colors and logos, or even adding their own code or script.

In breve, benché sia necessario prendere in considerazione vari aspetti al fine di fornire un servizio altamente scalabile, vi è anche una serie di obiettivi e requisiti comuni a molte applicazioni multi-tenant.In short, while there are many considerations that you must take into account to provide a highly scalable service, there are also a number of the goals and requirements that are common to many multitenant applications. Alcuni potrebbero non essere pertinenti in scenari specifici e l'importanza dei singoli obiettivi e requisiti varierà in ogni scenario.Some may not be relevant in specific scenarios, and the importance of individual goals and requirements will differ in each scenario. Anche il fornitore di un'applicazione multi-tenant avrà obiettivi e requisiti, ad esempio soddisfare gli obiettivi e i requisiti dei tenant, redditività, fatturazione, vari livelli di servizio, provisioning, monitoraggio della manutenibilità e automazione.As a provider of the multitenant application, you will also have goals and requirements such as, meeting the tenants' goals and requirements, profitability, billing, multiple service levels, provisioning, maintainability monitoring, and automation.

Per altre informazioni sulle considerazioni di progettazione di un'applicazione multi-tenant vedere Hosting a Multi-Tenant Application on Azure (Hosting di un'applicazione multi-tenant in Azure).For more information on additional design considerations of a multitenant application, see Hosting a Multi-Tenant Application on Azure. Per informazioni sugli schemi di architettura dati comuni delle applicazioni di database multi-tenant software come un servizio (SaaS), vedere Schemi progettuali per applicazioni SaaS multi-tenant con il database SQL di Azure.For information on common data architecture patterns of multi-tenant software-as-a-service (SaaS) database applications, see Design Patterns for Multi-tenant SaaS Applications with Azure SQL Database.

Azure offre molte funzionalità che consentono di risolvere i principali problemi riscontrati durante la progettazione di un sistema multi-tenant.Azure provides many features that allow you to address the key problems encountered when designing a multitenant system.

IsolamentoIsolation

  • Segmentare i tenant del sito Web in base alle intestazioni host con o senza comunicazione SSLSegment Website Tenants by Host Headers with or without SSL communication
  • Segmentare i tenant del sito Web in base ai parametri della querySegment Website Tenants by Query Parameters
  • Servizi Web nei ruoli di lavoroWeb Services in Worker Roles
    • Ruoli di lavoroWorker Roles. che solitamente elaborano i dati sul back-end di un'applicazione.that typically process data on the backend of an application.
    • Ruoli Web che solitamente fungono da front-end per le applicazioni.Web Roles that typically act as the frontend for applications.

ArchiviazioneStorage

Gestione di dati come il database SQL di Azure o i servizi di archiviazione di Azure (ad esempio il servizio tabelle, che offre servizi di archiviazione di grandi quantità di dati non strutturati, e il servizio BLOB, che offre servizi di archiviazione di grandi quantità di dati testuali o binari non strutturati come video, audio e immagini).Data management such as Azure SQL Database or Azure Storage services such as the Table service which provides services for storage of large amounts of unstructured data and the Blob service which provides services to store large amounts of unstructured text or binary data such as video, audio and images.

  • Protezione di dati multi-tenant nel database SQL appropriati per l'accesso a SQL Server di ogni tenant.Securing Multitenant Data in SQL Database appropriate per-tenant SQL Server logins.
  • Uso di tabelle Azure per le risorse dell'applicazione - Specificando criteri di accesso a livello di contenitore, sarà possibile modificare le autorizzazioni senza dover generare nuovi URL per le risorse protette mediante firme di accesso condiviso.Using Azure Tables for Application Resources By specifying a container level access policy, you can the ability to adjust permissions without having to issue new URL's for the resources protected with shared access signatures.
  • Code di Azure per le risorse dell'applicazione - Le code di Azure sono comunemente utilizzate per attivare l'elaborazione per conto dei tenant, ma possono essere utilizzate anche per distribuire il lavoro richiesto per il provisioning o la gestione.Azure Queues for Application Resources Azure queues are commonly used to drive processing on behalf of tenants, but may also be used to distribute work required for provisioning or management.
  • Code di bus di servizio - Per le risorse dell'applicazione che effettuano il push del lavoro a un servizio condiviso, è possibile usare una singola coda in cui ogni mittente del tenant dispone solo delle autorizzazioni (in base alle attestazioni generate da ACS) per effettuare il push a quella coda, mentre solo i ricevitori dal servizio dispongono dell'autorizzazione per effettuare il pull dei dati provenienti da più tenant dalla coda.Service Bus Queues for Application Resources that pushes work to a shared a service, you can use a single queue where each tenant sender only has permissions (as derived from claims issued from ACS) to push to that queue, while only the receivers from the service have permission to pull from the queue the data coming from multiple tenants.

Servizi di connessione e sicurezzaConnection and Security Services

  • Il bus di servizio di Azure, un'infrastruttura di messaggistica che consente di scambiare messaggi tra le applicazioni con approccio "a regime di controllo libero" per migliorare la scalabilità e la resilienza.Azure Service Bus, a messaging infrastructure that sits between applications allowing them to exchange messages in a loosely coupled way for improved scale and resiliency.

Servizi di reteNetworking Services

Azure offre diversi servizi di rete che supportano l'autenticazione e migliorano la gestibilità delle applicazioni ospitate.Azure provides several networking services that support authentication, and improve manageability of your hosted applications. Di seguito sono indicati alcuni servizi disponibili:These services include the following:

  • La rete virtuale di Azure consente di effettuare il provisioning e la gestione delle reti private virtuali (VPN) in Azure e di collegare queste reti in modo sicuro con l'infrastruttura IT locale.Azure Virtual Network lets you provision and manage virtual private networks (VPNs) in Azure as well as securely link these with on-premises IT infrastructure.
  • Rete virtuale - Gestione traffico consente di bilanciare il carico del traffico in ingresso tra più servizi di Azure ospitati, in esecuzione sia nello stesso data center sia in data center diversi distribuiti in tutto il mondo.Virtual Network Traffic Manager allows you to load balance incoming traffic across multiple hosted Azure services whether they're running in the same datacenter or across different datacenters around the world.
  • Azure Active Directory (Azure AD) è un servizio moderno basato su REST che fornisce funzionalità di gestione dell'identità e controllo di accesso per le applicazioni cloud.Azure Active Directory (Azure AD) is a modern, REST-based service that provides identity management and access control capabilities for your cloud applications. L'utilizzo di Azure AD per le risorse dell'applicazione semplifica le procedure di autenticazione e autorizzazione degli utenti affinché venga loro concesso l'accesso a servizi e applicazioni Web, consentendo al contempo il factoring delle funzionalità di autenticazione e autorizzazione al di fuori del codice.Using Azure AD for Application Resources Azure AD to provides an easy way of authenticating and authorizing users to gain access to your web applications and services while allowing the features of authentication and authorization to be factored out of your code.
  • Il bus di servizio di Azure fornisce una funzionalità protetta di messaggistica e flusso dei dati per le applicazioni distribuite e ibride, ad esempio la comunicazione tra le applicazioni ospitate su Azure e le applicazioni e i servizi locali, senza richiedere complesse infrastrutture di sicurezza e firewall.Azure Service Bus provides a secure messaging and data flow capability for distributed and hybrid applications, such as communication between Azure hosted applications and on-premises applications and services, without requiring complex firewall and security infrastructures. Uso dell'inoltro del bus di servizio per le risorse dell'applicazione - I servizi esposti come endpoint possono appartenere al tenant (ad esempio, ospitati al di fuori del sistema, come in locale) o essere forniti in maniera specifica per il tenant (perché usati per il trasferimento di dati riservati, specifici del tenant).Using Service Bus Relay for Application Resources to The services that are exposed as endpoints may belong to the tenant (for example, hosted outside of the system, such as on-premises), or they may be services provisioned specifically for the tenant (because sensitive, tenant-specific data travels across them).

Provisioning delle risorseProvisioning Resources

Azure offre diverse modalità per eseguire il provisioning di nuovi tenant per l'applicazione.Azure provides a number of ways provision new tenants for the application. Per le applicazioni multi-tenant che contano un ingente numero di tenant, di solito è necessario automatizzare il processo abilitando il provisioning self-service.For multitenant applications with a large number of tenants, it is usually necessary to automate this process by enabling self-service provisioning.

  • I ruoli di lavoro consentono di eseguire il provisioning e il deprovisioning delle risorse per ogni tenant (ad esempio quando un nuovo tenant effettua o annulla l'iscrizione), raccogliendo metriche per misurare l'utilizzo e gestendo la scalabilità in base a una determinata pianificazione o in risposta al superamento di soglie degli indicatori di prestazioni chiave.Worker roles allow you to provision and de-provision per tenant resources (such as when a new tenant signs-up or cancels), collect metrics for metering use, and manage scale following a certain schedule or in response to the crossing of thresholds of key performance indicators. Questo stesso ruolo può essere utilizzato anche per effettuare il push di aggiornamenti alla soluzione.This same role may also be used to push out updates and upgrades to the solution.
  • È possibile utilizzare l'archivio BLOB di Azure per effettuare il provisioning delle risorse di calcolo o di archiviazione preinizializzate per i nuovi tenant, fornendo criteri di accesso a livello di contenitore per proteggere i pacchetti del servizio di calcolo, le immagini del disco rigido virtuale e altre risorse.Azure Blobs can be used to provision compute or pre-initialized storage resources for new tenants while providing container level access policies to protect the compute service Packages, VHD images and other resources.
  • Le opzioni per il provisioning delle risorse del database SQL per un tenant includono:Options for provisioning SQL Database resources for a tenant include:

    • DDL in script o incorporate come risorse negli assemblyDDL in scripts or embedded as resources within assemblies
    • Distribuzione a livello di codice dei pacchetti SQL Server 2008 R2 DACSQL Server 2008 R2 DAC Packages deployed programmatically.
    • Copia da un database di riferimento masterCopying from a master reference database
    • Uso delle funzionalità di importazione ed esportazione del database per il provisioning di nuovi database da un fileUsing database Import and Export to provision new databases from a file.