Umbraco usa il database SQL di Azure per eseguire rapidamente il provisioning e il ridimensionamento di servizi per migliaia di tenant nel cloud.Umbraco uses Azure SQL Database to quickly provision and scale services for thousands of tenants in the cloud

Logo di Umbraco

Umbraco è un noto sistema di gestione di contenuti (CMS) open source che può eseguire qualsiasi contenuto, da siti per brochure o piccole campagne ad applicazioni complesse per siti Web di social media globali e aziende nella classifica Fortune 500.Umbraco is a popular open-source content-management system (CMS) that can run anything from small campaign or brochure sites to complex applications for Fortune 500 companies and global media websites.

"Un'ampia community di sviluppatori usa il sistema, con più di 100.000 sviluppatori nei nostri forum e oltre 350.000 siti attivi che eseguono il sistema Umbraco".“We have quite a large community of developers who use the system, with more than 100,000 developers on our forums and more than 350,000 sites that are live, running Umbraco.”

- Morten Christensen, responsabile tecnico, Umbraco— Morten Christensen, Technical Lead, Umbraco

Per semplificare le distribuzioni ai clienti, Umbraco ha aggiunto Umbraco-as-a-Service (UaaS), un'offerta di Software-as-a-Service (SaaS) che esclude la necessità di distribuzioni locali, fornisce un ridimensionamento predefinito ed elimina il sovraccarico di gestione, consentendo agli sviluppatori di concentrarsi sull'innovazione dei prodotti anziché sulla gestione della soluzione.To simplify customer deployments, Umbraco added Umbraco-as-a-Service (UaaS): a software-as-a-service (SaaS) offering that eliminates the need for on-premises deployments, provides built-in scaling, and removes management overhead by enabling developers to focus on product innovation rather than solution management. Umbraco offre tutti questi vantaggi basandosi sul modello Platform-as-a-Service (PaaS) flessibile offerto da Microsoft Azure.Umbraco is able to provide all those benefits by relying on the flexible platform-as-a-service (PaaS) model offered by Microsoft Azure.

Il servizio UaaS consente ai clienti SaaS di usare funzionalità del sistema Umbraco CMS in precedenza non accessibili.UaaS enables SaaS customers to use Umbraco CMS capabilities that were previously out of their reach. Per questi clienti viene eseguito il provisioning di un ambiente CMS di lavoro con un database di produzione.These customers are provisioned with a working CMS environment that includes a production database. I clienti possono aggiungere fino ad altri due database per gli ambienti di sviluppo e di gestione temporanea, a seconda dei requisiti.Customers can add up to two additional databases for development and staging environments, depending on their requirements. Quando è necessario un nuovo ambiente, al cliente viene assegnato automaticamente un database tramite un processo automatizzato.When a new environment is requested, an automated process assigns that customer a database automatically. Il nuovo database è pronto in pochi secondi perché il provisioning è stato eseguito preventivamente da Umbraco tramite un pool elastico di database disponibili Azure (figura 1).The new database is ready in seconds, because the database has already been pre-provisioned by Umbraco from an Azure elastic pool of available databases (see Figure 1).

Ciclo di vita del provisioning Umbraco

Figura 1.Figure 1. Ciclo di vita del provisioning per Umbraco-as-a-Service (UaaS)Provisioning lifecycle for Umbraco as a Service (UaaS)

Automazione e pool elastici di Azure per semplificare le distribuzioniAzure elastic pools and automation simplify deployments

Con il database SQL di Azure e altri servizi di Azure, i clienti Umbraco possono eseguire autonomamente il provisioning dei propri ambienti e Umbraco può monitorare e gestire facilmente i database come parte di un flusso di lavoro intuitivo:With Azure SQL Database and other Azure services, Umbraco customers can self-provision their environments, and Umbraco can easily monitor and manage databases as part of an intuitive workflow:

  1. Eseguire il provisioningProvision

    Umbraco gestisce 200 database disponibili, il cui provisioning è stato eseguito preventivamente da pool elastici.Umbraco maintains a capacity of 200 available pre-provisioned databases from elastic pools. Quando un nuovo cliente esegue l'iscrizione per il servizio UaaS, Umbraco gli fornisce un nuovo ambiente CMS in tempo pressoché reale, assegnando un database dal pool di disponibilità.When a new customer signs up for UaaS, Umbraco provides the customer with a new CMS environment in near real time by assigning them a database from the availability pool.

    Quando viene raggiunta la soglia di un pool di disponibilità, viene creato un nuovo pool elastico e viene eseguito preventivamente il provisioning di nuovi database da assegnare ai clienti in base alle esigenze.When an availability pool reaches its threshold, a new elastic pool is created, and new databases are pre-provisioned to be assigned to customers as needed.

    L'implementazione è completamente automatizzata tramite le librerie di gestione in C# e le code del bus di servizio.Implementation is fully automated using C# management libraries and Azure Service Bus queues.

  2. UsoUtilize

    I clienti usano da uno a tre ambienti, per la produzione, la gestione temporanea e/o lo sviluppo, ognuno con un proprio database.Customers use one to three environments (for production, staging, and/or development), each with its own database. I database dei clienti si trovano in pool elastici, che consentono a Umbraco di fornire un ridimensionamento efficace evitando il provisioning eccessivo.Customer databases are in elastic pools, which enables Umbraco to provide efficient scaling without having to over-provision.

    Panoramica del progetto Umbraco

    Dettagli del progetto Umbraco

    Figura 2.Figure 2. Sito Web di clienti con Umbraco-as-a-Service (UaaS) che mostra una panoramica e i dettagli del progettoUmbraco-as-a-Service (UaaS) customer website, showing project overview and details

    Il database SQL di Azure usa le unità di transazioni di database (DTU) per esprimere la potenza relativa necessaria per le transazioni di database reali.Azure SQL Database uses Database Transaction Units (DTUs) to represent the relative power required for real-world database transactions. Per i clienti UaaS, la potenza dei database è in genere di circa 10 DTU, ma la flessibilità di ogni database consente la scalabilità su richiesta.For UaaS customers, databases typically operate at about 10 DTUs, but each has the elasticity to scale on demand. I clienti possono quindi disporre delle risorse necessarie, anche durante le ore di punta.That means UaaS can ensure that customers always have necessary resources, even during peak times. Ad esempio, nel corso di un recente evento sportivo notturno di domenica, un cliente del servizio UaaS ha riscontrato un picco del database fino a 100 DTU per la durata dell'evento.For example, during a recent Sunday night sports event, one UaaS customer experienced database peaks up to 100 DTUs for the duration of the game. Grazie ai pool elastici di Azure, il sistema Umbraco è stato in grado di supportare questa richiesta elevata senza compromettere le prestazioni.Azure elastic pools made it possible for Umbraco to support that high demand without performance degradation.

  3. MonitorareMonitor

    Umbraco monitora l'attività dei database tramite i dashboard del portale di Azure e agli avvisi di posta elettronica personalizzati.Umbraco monitors database activity using dashboards within the Azure portal, along with custom email alerts.

  4. Ripristino di emergenzaDisaster recovery

    Azure offre due opzioni di ripristino di emergenza (DR): la replica geografica attiva e il ripristino geografico.Azure provides two disaster-recovery (DR) options: active geo-replication and geo-restore. L'opzione adatta ad ogni azienda dipende dagli obiettivi di continuità aziendalespecifici.The DR option that a company should select depends on its business-continuity objectives.

    la replica geografica attiva assicura il livello di risposta più veloce in caso di tempi di inattività.active geo-replication provides the fastest level of response in the event of downtime. Con la replica geografica attiva è possibile creare fino a quattro database secondari leggibili su server in aree diverse e quindi avviare il failover in uno qualsiasi dei database secondari in caso di errore.Using active geo-replication, you can create up to four readable secondaries on servers in different regions, and you can then initiate failover to any of the secondaries in the event of a failure.

    Umbraco non richiede la replica geografica, tuttavia il ripristino geografico di Azure offre il vantaggio di tempi di inattività minimi in caso di interruzione.Umbraco doesn’t require geo-replication, but it does take advantage of Azure geo-restore to help ensure minimum downtime in the event of an outage. il ripristino geografico si basa sui backup di database nell'archiviazione di Azure con ridondanza geografica.geo-restore relies on database backups in geo-redundant Azure storage. Gli utenti possono quindi eseguire il ripristino da una copia di backup in caso di interruzione del servizio nell'area primaria.That allows users to restore from a backup copy when there is an outage in the primary region.

  5. DeprovisioningDe-provision

    Quando viene eliminato l'ambiente di un progetto, tutti i database associati (di sviluppo, di gestione temporanea o live) vengono rimossi durante la pulizia della coda del bus di servizio.When a project environment is deleted, any associated databases (development, staging, or live) are removed during Azure Service Bus queue cleanup. Questo processo automatizzato ripristina i database inutilizzati nel pool di disponibilità di database elastici Umbraco, rendendoli disponibili per attività di provisioning future ottimizzando il livello di utilizzo.This automated process restores the unused databases to Umbraco’s elastic database-availability pool, making them available for future provisioning while maintaining maximum utilization.

I pool elastici consentono un facile ridimensionamento del servizio UaaSElastic pools allow UaaS to scale with ease

Grazie all'uso di pool elastici di Azure, Umbraco è in grado di ottimizzare le prestazioni per i clienti senza ricorrere al provisioning eccessivo o insufficiente.By taking advantage of Azure elastic pools, Umbraco can optimize performance for its customers without having to over- or under-provision. Umbraco ha attualmente quasi 3.000 database in 19 pool elastici, assicurando un facile ridimensionamento in linea con le esigenze di uno qualsiasi dei 325.000 clienti esistenti o dei nuovi clienti disponibili a distribuire un sistema CMS nel cloud.Umbraco currently has nearly 3,000 databases across 19 elastic pools, with the ability to easily scale as needed to accommodate any of their existing 325,000 customers or new customers who are ready to deploy a CMS in the cloud.

Secondo Morten Christensen, responsabile tecnico Umbraco, "Ogni giorno circa 30 nuovi clienti scelgono il servizio UaaS.In fact, according to Morten Christensen, Technical Lead at Umbraco, “UaaS is now experiencing growth of about 30 new customers per day. I clienti apprezzano in particolare la possibilità di eseguire il provisioning di nuovi progetti in pochi secondi, pubblicare immediatamente gli aggiornamenti nei propri siti live da un ambiente di sviluppo tramite le "distribuzioni con un clic" e apportare modifiche altrettanto rapidamente qualora vengano rilevati errori".Our customers are delighted with the convenience of being able to provision new projects in seconds, instantly publish updates to their live sites from a development environment using ‘one-click deployment,’ and make changes just as quickly if they find errors.”

Se un cliente non ha più necessità di un secondo e/o un terzo ambiente, è possibile rimuovere semplicemente questi ambienti.If a customer does not require a second and/or third environment anymore, it can simply remove those environments. In questo modo vengono liberate risorse che possono essere usate per altri clienti come parte del pool di disponibilità di database elastici Umbraco.That frees up resources that can be used for other customers as part of the Umbraco elastic database-availability pool.

Architettura di distribuzione Umbraco

Figura 3.Figure 3. Architettura per la distribuzione di UaaS in Microsoft AzureUaaS deployment architecture on Microsoft Azure

Percorso dal data center al cloudThe path from datacenter to cloud

Al momento di adottare inizialmente la decisione di migrare a un modello SaaS, gli sviluppatori Umbraco sono consapevoli del fatto che necessitano di un modo conveniente e scalabile per distribuire il servizio.When the Umbraco developers initially made the decision to move to a SaaS model, they knew that they would need a cost-effective and scalable way to build out the service.

"I pool elastici sono perfetti per l'offerta SaaS perché consentono di aumentare o ridurre la capacità in base alle esigenze.“elastic pools are a perfect fit for our SaaS offering because we can dial capacity up and down as needed. Il provisioning è semplice e grazie alla configurazione è possibile ottimizzare il livello di utilizzo".Provisioning is easy, and with our setup, we can keep utilization at a maximum.”

- Morten Christensen, responsabile tecnico, Umbraco— Morten Christensen, Technical Lead, Umbraco

"Il nostro obiettivo era quello di dedicare tempo prezioso alla risoluzione dei problemi dei clienti, non alla gestione dell'infrastruttura.“We wanted to spend our time on solving our customers’ problems, not managing infrastructure. Lo scopo era quello di mettere i clienti nella condizione migliore per ottenere il massimo valore" afferma Niels Hartvig, fondatore di Umbraco.We wanted to make it easy for our customers to get the most value,” says Niels Hartvig, founder of Umbraco. "Inizialmente abbiamo valutato l'ipotesi di eseguire autonomamente l'hosting dei server, ma la pianificazione della capacità avrebbe rappresentato un incubo".“We initially considered hosting the servers ourselves, but capacity planning would have been a nightmare.” Non a caso, Umbraco non impiega amministratori di database, aspetto che evidenzia l'uso di UaaS come proposta di valore chiave.Coincidentally, Umbraco does not employ any database administrators, which underscores a key value proposition for using UaaS.

Un obiettivo importante perseguito dagli sviluppatori Umbraco è stato quello di offrire ai clienti UaaS un modo per eseguire il provisioning di ambienti rapidamente e senza limiti di capacità.One important goal for the Umbraco developers was to provide a way for UaaS customers to provision environments quickly and without capacity limitations. Fornire tuttavia un servizio ospitato dedicato nei data center Umbraco avrebbe richiesto una capacità in eccesso elevata per gestire i picchi in fase di elaborazione.But providing a dedicated hosted service in Umbraco datacenters would have required lots of excess capacity to handle bursts in processing. Ciò avrebbe comportato l'aggiunta di una notevole infrastruttura di calcolo che sarebbe stata frequentemente sottoutilizzata.That would have meant adding considerable compute infrastructure that would have been regularly underutilized.

Inoltre, il team di sviluppo Umbraco desiderava una soluzione che consentisse di riutilizzare quanto più possibile il codice esistente.In addition, the Umbraco development team wanted a solution that would allow them to reuse as much of their existing code as possible. Come afferma Mikkel Madsen, sviluppatore Umbraco, "Eravamo soddisfatti degli strumenti di sviluppo Microsoft con cui avevamo già familiarità, come Microsoft SQL Server, il database SQL di Microsoft Azure, ASP.net e Internet Information Services (IIS).As Umbraco developer Mikkel Madsen states, “We were happy with the Microsoft development tools that we were already familiar with, like Microsoft SQL Server, Microsoft Azure SQL Database, ASP.net, and Internet Information Services (IIS). Prima di investire su una soluzione cloud IaaS o PaaS, desideravamo assicurarci che supportasse gli strumenti e le piattaforme Microsoft in modo che non fosse necessario apportare modifiche sostanziali al codice base".Before investing in an IaaS or a PaaS cloud solution, we wanted to make sure that it would support our Microsoft tools and platforms, so we wouldn’t have to make massive changes to our code base.”

Per soddisfare tutti i criteri, Umbraco ha cercato un partner per il cloud con le caratteristiche seguenti:To meet all of its criteria, Umbraco looked for a cloud partner with the following qualifications:

  • Affidabilità e capacità adeguataSufficient capacity and reliability
  • Supporto per gli strumenti di sviluppo Microsoft per non costringere i tecnici Umbraco a ricostruire completamente l'ambiente di sviluppoSupport for Microsoft development tools, so that Umbraco engineers would not be forced to completely reinvent their development environment
  • Presenza in tutti i mercati geografici in cui il servizio UaaS opera come competitor: le aziende hanno bisogno di garantire il rapido accesso ai dati e l'archiviazione dei dati in una posizione in linea con i requisiti normativi internazionaliPresence in all of the geographic markets in which UaaS competes (businesses need to ensure that they can access their data quickly and that their data is stored in a location that meets their regional regulatory requirements)

Perché Umbraco ha scelto Azure per UaaSWhy Umbraco chose Azure for UaaS

Secondo Morten Christensen "Dopo un'attenta valutazione di tutte le opzioni, abbiamo scelto Azure perché soddisfa tutti i criteri, dalla gestibilità e scalabilità alla familiarità e al rapporto costi/benefici.According to Morten Christensen “After considering all our options, we selected Azure because it met all our criteria, from manageability and scalability to familiarity and cost-effectiveness. Abbiamo configurato gli ambienti nelle VM Azure e ogni ambiente ha una propria istanza del database SQL di Azure, con tutte le istanze nei pool elastici.We set up the environments on Azure VMs, and each environment has its own Azure SQL Database instance, with all the instances in elastic pools. Separando i database tra gli ambienti di sviluppo, di gestione temporanea e live, siamo in grado di offrire ai clienti un livello avanzato di isolamento delle prestazioni abbinato alla scalabilità conseguendo un successo notevole".By separating databases between development, staging, and live environments, we can offer our customers robust performance isolation matched to scale—a huge win.”

Morten afferma anche: "Prima era necessario eseguire manualmente il provisioning di server per i database Web.Morten continues, “Before, we had to provision servers for web databases manually. Ora non teniamo più in considerazione questo aspetto.Now, we don’t have to think about it. Tutte le operazioni sono automatizzate, dal provisioning alle operazioni di eliminazione".Everything is automated—from provisioning to cleanup.”

Morten è soddisfatto anche delle funzionalità di ridimensionamento disponibili in Azure.Morten is also happy with the scaling capabilities provided by Azure. "I pool elastici sono perfetti per l'offerta SaaS perché consentono di aumentare o ridurre la capacità in base alle esigenze.“elastic pools are a perfect fit for our SaaS offering because we can dial capacity up and down as needed. Il provisioning è semplice e grazie alla configurazione è possibile ottimizzare il livello di utilizzo".Provisioning is easy, and with our setup, we can keep utilization at a maximum.” Morten afferma "La semplicità dei pool elastici, con la garanzia di DTU basate sui livelli di servizio, offre la possibilità di eseguire il provisioning di nuovi pool di risorse su richiesta.Morten states, “The simplicity of elastic pools, along with the assurance of service-tier-based DTUs, gives us the power to provision new resource pools on demand. Uno dei nostri clienti più importanti ha raggiunto recentemente il picco di 100 DTU nell'ambiente live.Recently, one of our larger customers peaked to 100 DTUs in its live environment. Usando Azure, i pool elastici hanno fornito ai database dei clienti le risorse necessarie in tempo reale senza la necessità di prevedere in anticipo i requisiti di DTU.Using Azure, our elastic pools provided the customer’s databases with the resources that they needed in real time without having to predict DTU requirements. In poche parole, i clienti ottengono il tempo di risposta che si aspettano e possiamo soddisfare i contratti di servizio a livello di prestazioni".Simply put, our customers get the turn-around time that they expect, and we can meet our performance service-level agreements.”

Mikkel Madsen ribadisce "Abbiamo adottato il potente algoritmo di Azure che connette uno scenario SaaS comune, come l'acquisizione di nuovi clienti in tempo reale su larga scala, al modello applicativo, come il provisioning preventivo di database, sia di sviluppo sia live, insieme alla tecnologia sottostante usando le code del bus di servizio Azure in combinazione con il database SQL di Azure".Mikkel Madsen sums it up: “We’ve embraced the powerful Azure algorithm that connects a common SaaS scenario (onboarding new customers in real time at scale) to our application pattern (pre-provisioning databases, both development and live) on top of the underlying technology (using Azure Service Bus queues in conjunction with Azure SQL Database).”

Con Azure il servizio UaaS supera le aspettative dei clientiWith Azure, UaaS is exceeding customer expectations

Da quando ha scelto Azure come partner cloud, Umbraco è stato in grado di fornire ai clienti UaaS prestazioni ottimali in termini di gestione dei contenuti, senza dover investire su risorse IT, come sarebbe stato necessario con una soluzione indipendente.Since choosing Azure as its cloud partner, Umbraco has been able to provide UaaS customers with optimized content-management performance, without the IT-resource investment required from a self-hosted solution. Come afferma Morten, "Apprezziamo in particolare i vantaggi e la scalabilità che Azure mette a disposizione degli sviluppatori e i clienti sono particolarmente soddisfatti di funzionalità e affidabilità.As Morten says, “We love the developer convenience and scalability that Azure gives us, and our customers are thrilled with the features and reliability. Il successo è stato grande da ogni punto di vista".Overall, it’s been a great win for us!”

Altre informazioniMore information