SlideShare a Scribd company logo
1 of 26
Download to read offline
Multitenancy con
SQL Server e Azure SQL Database
Sponsors
About me
• Gianluca Hotz | @glhotz | ghotz@ugiss.org
• Independent Consultant
• 25+ years on SQL Server (from 4.21 back in 1996)
• Database modeling & development, sizing & administration,
modernization (upgrades & migrations), performance tuning,
security
• Community
• 25 years Microsoft MVP SQL Server/Data Platform (since
1998)
• VMware Experts SQL Server
• Founder and president UGISS (ex «PASS Chapter»)
Opportunità SaaS
Nel 2023,
industria SaaS ha
un valore
approssimativo
~$195 miliardi
(Gartner).
Negli ultimi 7
anni, industria
SaaS è cresciuta
di ~500%
App SaaS
costituiscono
70% uso totale
del software
azienda
(BetterCloud)
Startup SaaS
stanno facendo
enorme avanzata
per diventare
prossima
industria da 1
trilione di $
La sfida della «multi-tenancy»
Condivisione risorse di
elaborazione, rete e
archiviazione tra utenti
di una soluzione
(tenant), garantendo
isolamento e sicurezza
Fondamentale per
creatori soluzioni SaaS
massimizzare utilizzo
risorse, controllare
costi e ottenere
margini elevati
Progettare e gestire
soluzioni multi-tenant
richiede ricerca miglior
compromesso tra
prezzo, prestazioni e
gestione
Terminologia
• «Tenant»
• Letteralmente: «inquilino», «locatario», «affittuario»
• Wikipedia[1]: multi-tenant si riferisce ad una architettura software in cui una sua singola istanza è eseguita
da un server ed è fruita da diverse organizzazioni che, ciascuna con le sue peculiarità ambientali che
costituiscono concettualmente uno specifico tenant (come in un immobile le cui unità o vani sono affittati a
locatari diversi)
• In pratica, nel contesto SaaS: il cliente del servizio
• «Sharding»
• Partizione orizzontale dati per riduzione in componenti più piccole e veloci da gestire
• In pratica, nel contesto SaaS: partizionamento per tenant ovvero cliente
• Per praticità, di seguito sharding key = identificativo tenant
• «Data-Dependent Routing»
• DDR è la capacità di utilizzare i dati in una query (da un catalogo) per indirizzare la richiesta a un database
appropriato
«Single-tenant application & database»
• Un’istanza applicativa per tenant
• Un database per tenant
• Catalogo opzionale (consigliato)
• Massimo isolamento
• Sicurezza, disponibilità, prestazioni
• Massima flessibilità
• Livelli di servizio personalizzati
• Diverse versioni/rilasci scaglionati
Tenant C
Tenant B
Catalog
App
Tenant
DB
Tenant A
«Single multi-tenant database»
• Applicazione multi-tenant
• Scale-out orizzontale indipendente
• Un database per tutti i tenant
• Minor isolamento
• Minor flessibilità
App
App
App
Tenant
A,B,C,D,E,F,J,K,L,M
«Database-per-tenant»
• Applicazione multi-tenant
• Scale-out orizzontale indipendente
• Un database per ogni tenant
• Catalogo
• DDR tenant->database
• Ottimo isolamento
• Ottima flessibilità
App
App
App
Tenant
A
Catalog
Tenant
B
Tenant
C
«Sharded multi-tenant databases»
• Applicazione multi-tenant
• Scale-out orizzontale indipendente
• Più database per più tenant
• Catalogo
• DDR tenant->database->shard-key
• Pessimo isolamento
• Pessima flessibilità
App
App
App
Tenant
A,B,C,D
Catalog
Tenant
E,F,J,K
Tenant
L,M
Supporto «Sharding» e DDR
• «Tenant-per-schema»
• Colonna con «sharding key»
• «Entity Framework Global Filters»
• «Elastic Database Tools»
• Supporto per «Entity Framework» e «Dapper»
• Sicuramente altre soluzioni, importante padroneggiare i concetti/pattern
• Ragionare in termini «web scale»…
• non 100 o 1.000 ma 10.000, 100.000, 1 milione…
• investire subito in «devops», farlo dopo costa molto…
Elastic Database Tools
• Da usare o prendere come modello
• Elastic Database client library
• Elastic Database split-merge tool
• Elastic Database jobs
• Elastic Database query (preview)
• Elastic Transactions
• Repository Github
• Client Library & esempi
• Rilasci ripresi a Ottobre 2023
• https://github.com/Azure/elastic-db-tools
• Migrazione da SQL Azure Federation…
• Anche per database-per-tenant
https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-scale-introduction
Elastic Database tools
Elastic Database split-merge tool Elastic Database jobs (preview)
https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-scale-overview-split-and-merge
https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-jobs-overview
Elastic Database query (preview)
Cross-database (polybase/external tables) Cross-shard UNION ALL
https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-query-overview
Row Level Security (RLS)
• Modifica schema tabelle
• Aggiunta colonna «sharding key»
• DEFAULT con SESSION_CONTEXT
• RLS Policy
• Funzione «table-valued»
• applicata a più tabelle
• predicato su SESSION_CONTEXT
• predicato di filtro/blocco
• Alla connessione
• (tramite shard map manager)
• «sharding key» -> SESSION_CONTEXT
• idealmente, trasparente per il resto…
https://learn.microsoft.com/en-us/azure/azure-sql/database/saas-tenancy-elastic-tools-multi-tenant-row-level-security
Isolamento database «multi-tenant»
•Indici «sharding key» come prima colonna -> sbilanciamento istogramma per selettività
•Lock escalation ~5000 lock
•Contesa strutture condivise a livello database
Prestazioni
•Rilascio errato query senza predicato su «sharding key»
•Divulgazione a seguito di bug (es. dati cache, indici corrotti)
•Clienti richiedono isolamento («compliance»)
Sicurezza
•Rilascio errato impatta più tenant
•Restore di un singolo tenant (impatto su altri o procedura complessa)
Continuità
•«Sharded Data» e dati «Reference» da replicare (es. CAP, Paesi, valute ecc.)
•Rilasci scaglionati
•Difficile/impossibile gestire versioni diverse e/o variazioni dello schema
Gestione
•Difficile gestire risorse per tenant (e fornire livelli di servizio personalizzati)
•Difficile gestire personalizzazioni
Flessibilità
Pattern dominante: Database-per-tenant
• Ottimo isolamento: prestazioni e sicurezza
• Semplicità implementazione, gestione e manutenzione
• Flessibilità
• La maggior parte dei SQL Database in Azure usano già questo pattern
Azure IaaS & PaaS Relational Data Solutions
Virtual Machine in Azure
• Ambienti Windows/Linux
• Marketplace con immagini per i più diffusi RDBMS
• Azure Dedicated Host
Diversi servizi per «Container»
• Azure Kubernetes Service (AKS)
• Azure Red Hat OpenShift
• Azure Container Instances
Altri scenari
• Azure Vmware Solution
SQL Server
engine
• Azure SQL Database
• Traditional/Hyperscale
• Managed Instance
• Azure Synapse Analytics
• Azure SQL Edge
OSS
Engines
• Azure Database for PostgreSQL
• Azure Database for MySQL
• Azure Database for MariaDB
Azure PaaS Azure IaaS
Modelli a istanza (VM e MI)
• Numero massimo di database
• Virtual Machine: 32768 per istanza… qualche migliaio più realistico
• Managed Instance: 100 per istanza
• Managed Instance Pool (preview): 500 per pool
• 50 per istanze 2 vCores, 100 per istanze 4+ vcores
• Problemi comuni
• Contesa buffer cache/procedure cache/altro a livello di istanza
• Controllo integrità, manutenzione indici
• Problemi aggiuntivi Virtual Machine
• Installazione e manutenzione software
• Implementazione e manutenzione backup, alta disponibilità e disaster recovery
• Es. scaglionamento migliaia di backup? Numero di Availability Group?
Modelli a database
• «Single database»
• Risorse assegnate al singolo database
• «Serverless»: Min/Max vCore in base a SLO con auto pausa (costo zero CPU & RAM)
• «Elastic Pool»
• Pool di risorse condivise da più database, «Auto-Scale» entro range definiti
• Database aggiunti/rimossi a caldo
• «Hyperscale»
• Engine specializzato, disponibile «Single», «Serverless» e «Elastic Pool (preview)»
• Caratteristiche comuni
• «Service Tier/Performance Level» definiscono limiti risorse, HA e DR (inclusi!)
• «Scale up» e «Scale down» senza interruzione del servizio
«Elastic Pool» migliore opzione per SaaS
• Scalabilità verticale
• Modello a vCore: da 2 a 128 vCores
• Scalabilità orizzontale
• General Purpose/Standard: 500 database
• Business Critical/Premium: 100 database
• Hyperscale (preview): 25 database
• Attenzione anche a tutti gli altri limiti!
• Massimo 5000 database per «logical server», consigliato massimo 1000-2000
• Default 20 «logical server» per sottoscrizione in una regione (massimo 250)
• Storage per pool, database, tempdb
• vCore per «logical server»
• ecc. ecc.
«SaaS Elastic Pools Provisioning»
• Applicazione
• crea il «Pool»
• può creare database in anticipo
• assegna database a tenant nuovi
• crea in anticipo «Pool» e
database
• fa scalare «Pool» per gestire più
database/maggior carico di
lavoro
• muove database per bilanciare
uso
• Database con troppo carico,
possono essere isolati
Cust 4
Cust 1 Cust 2 Cust 3
pool1 pool2 pool3
Cust 10 Cust 11 Cust 12
Cust 17
Cust 13
ARM / SQL Database
Apps
Catalog
Azure Database Fleet Manager
https://techcommunity.microsoft.com/t5/azure-sql-blog/introducing-azure-database-fleet-manager/ba-p/3979576
Fleet Manager Demo
https://techcommunity.microsoft.com/t5/azure-sql-blog/introducing-azure-database-fleet-manager/ba-p/3979576
Conclusioni
• Costo minimo «database-per-tenant» con «Elastic Pool»
• Troppo alto per alcuni scenari...
• VM Standard/Enterprise Edition + VM Express Edition alternativa ma…
• … ricordate cosa c’è nel costo di un PaaS, es. gestione, backup, HA/DR
• Investire in «devops»
• Database template per «deployment»
• Schedulazione avanzata (es. per gruppi logici)
• Gestione schema e manutenzione indici su larga scala
• Politiche di archiviazione dati e automazione
• Framework, pattern, tool
• Devono esservi di aiuto, non dovete lavorare per loro…
Risorse
• Link contestuali nelle slide
• «Tenancy models for a multitenant solution»
• https://learn.microsoft.com/en-us/azure/architecture/guide/multitenant/considerations/tenancy-models
• «Multitenancy and Azure SQL Database»
• https://learn.microsoft.com/en-us/azure/architecture/guide/multitenant/service/sql-database
• «Multi-tenant SaaS database tenancy patterns»
• https://learn.microsoft.com/en-us/azure/azure-sql/database/saas-tenancy-app-design-patterns
• «Scaling out with Azure SQL Database»
• https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-scale-introduction
• SQL Server PaaS (Data Saturday #37 Parma 2023)
• https://vimeo.com/ugiss/sqlserverpaas

More Related Content

Similar to Multitenancy con SQL Server e Azure SQL Database

JBoss Data Grid Tech Lab
JBoss Data Grid Tech LabJBoss Data Grid Tech Lab
JBoss Data Grid Tech LabUgo Landini
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Emanuele Zanchettin
 
Azure Synapse: data lake & modern data warehouse dalla A alla Z
Azure Synapse: data lake &  modern data warehouse dalla A alla ZAzure Synapse: data lake &  modern data warehouse dalla A alla Z
Azure Synapse: data lake & modern data warehouse dalla A alla ZRoberto Messora
 
SQL Server Data Virtualization with polybase
SQL Server Data Virtualization with polybaseSQL Server Data Virtualization with polybase
SQL Server Data Virtualization with polybaseGianluca Hotz
 
OCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaSOCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaSopencityplatform
 
20160402_mlraviol_mariadb_TorinoWordCamp
20160402_mlraviol_mariadb_TorinoWordCamp20160402_mlraviol_mariadb_TorinoWordCamp
20160402_mlraviol_mariadb_TorinoWordCampmlraviol
 
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...Gianluca Hotz
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databasesGianluca Hotz
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL DatabaseEmanuele Zanchettin
 
Cloud for sap evento15.4
Cloud for sap evento15.4Cloud for sap evento15.4
Cloud for sap evento15.4Otello Costa
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloudRiccardo Zamana
 
Applicazioni Serverless con AWS
Applicazioni Serverless con AWSApplicazioni Serverless con AWS
Applicazioni Serverless con AWSsparkfabrik
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL DatabaseEmanuele Zanchettin
 
Trovare ciò che serve nella confusione: comprendere i Big Data con l'analisi AWS
Trovare ciò che serve nella confusione: comprendere i Big Data con l'analisi AWSTrovare ciò che serve nella confusione: comprendere i Big Data con l'analisi AWS
Trovare ciò che serve nella confusione: comprendere i Big Data con l'analisi AWSAmazon Web Services
 
Ottimizzazione della gestione dei dati sul cloud
Ottimizzazione della gestione dei dati sul cloudOttimizzazione della gestione dei dati sul cloud
Ottimizzazione della gestione dei dati sul cloudNicolò Carandini
 

Similar to Multitenancy con SQL Server e Azure SQL Database (20)

JBoss Data Grid Tech Lab
JBoss Data Grid Tech LabJBoss Data Grid Tech Lab
JBoss Data Grid Tech Lab
 
SQL Server in AWS
SQL Server in AWSSQL Server in AWS
SQL Server in AWS
 
Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2Implementare e mantenere un progetto azure sql database v.2
Implementare e mantenere un progetto azure sql database v.2
 
Azure Synapse: data lake & modern data warehouse dalla A alla Z
Azure Synapse: data lake &  modern data warehouse dalla A alla ZAzure Synapse: data lake &  modern data warehouse dalla A alla Z
Azure Synapse: data lake & modern data warehouse dalla A alla Z
 
SQL Server Data Virtualization with polybase
SQL Server Data Virtualization with polybaseSQL Server Data Virtualization with polybase
SQL Server Data Virtualization with polybase
 
Data flow
Data flowData flow
Data flow
 
OCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaSOCP-Architettura e caratteristiche della PaaS
OCP-Architettura e caratteristiche della PaaS
 
20160402_mlraviol_mariadb_TorinoWordCamp
20160402_mlraviol_mariadb_TorinoWordCamp20160402_mlraviol_mariadb_TorinoWordCamp
20160402_mlraviol_mariadb_TorinoWordCamp
 
OCP Paas_ultima
OCP Paas_ultimaOCP Paas_ultima
OCP Paas_ultima
 
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
Come utilizzare AWS Database Migration Service per migrare SQL Server ad Amaz...
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
 
Data grid
Data gridData grid
Data grid
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
 
Cloud for sap evento15.4
Cloud for sap evento15.4Cloud for sap evento15.4
Cloud for sap evento15.4
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 
Presentazione bd2
Presentazione bd2Presentazione bd2
Presentazione bd2
 
Applicazioni Serverless con AWS
Applicazioni Serverless con AWSApplicazioni Serverless con AWS
Applicazioni Serverless con AWS
 
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database2014.11.14 Implementare e mantenere un progetto Azure SQL Database
2014.11.14 Implementare e mantenere un progetto Azure SQL Database
 
Trovare ciò che serve nella confusione: comprendere i Big Data con l'analisi AWS
Trovare ciò che serve nella confusione: comprendere i Big Data con l'analisi AWSTrovare ciò che serve nella confusione: comprendere i Big Data con l'analisi AWS
Trovare ciò che serve nella confusione: comprendere i Big Data con l'analisi AWS
 
Ottimizzazione della gestione dei dati sul cloud
Ottimizzazione della gestione dei dati sul cloudOttimizzazione della gestione dei dati sul cloud
Ottimizzazione della gestione dei dati sul cloud
 

More from Gianluca Hotz

SQL Server 2022 Programmability & Performance
SQL Server 2022 Programmability & PerformanceSQL Server 2022 Programmability & Performance
SQL Server 2022 Programmability & PerformanceGianluca Hotz
 
SQL Server 2022 Intelligent Query Processing
SQL Server 2022 Intelligent Query ProcessingSQL Server 2022 Intelligent Query Processing
SQL Server 2022 Intelligent Query ProcessingGianluca Hotz
 
Le novità di SQL Server 2022
Le novità di SQL Server 2022Le novità di SQL Server 2022
Le novità di SQL Server 2022Gianluca Hotz
 
Data Integrity with SQL Database Ledger
Data Integrity with SQL Database LedgerData Integrity with SQL Database Ledger
Data Integrity with SQL Database LedgerGianluca Hotz
 
Azure SQL Database Ledger
Azure SQL Database LedgerAzure SQL Database Ledger
Azure SQL Database LedgerGianluca Hotz
 
Best Practices for Running Microsoft SQL Server on AWS
Best Practices for Running Microsoft SQL Server on AWSBest Practices for Running Microsoft SQL Server on AWS
Best Practices for Running Microsoft SQL Server on AWSGianluca Hotz
 
Azure SQL Database Ledger
Azure SQL Database LedgerAzure SQL Database Ledger
Azure SQL Database LedgerGianluca Hotz
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query ProcessingGianluca Hotz
 
SQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed DisksSQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed DisksGianluca Hotz
 
SQL Server Back to Basics: Sicurezza
SQL Server Back to Basics: SicurezzaSQL Server Back to Basics: Sicurezza
SQL Server Back to Basics: SicurezzaGianluca Hotz
 
SQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWSSQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWSGianluca Hotz
 
SQL Server Data Virtualization with Polybase
SQL Server Data Virtualization with PolybaseSQL Server Data Virtualization with Polybase
SQL Server Data Virtualization with PolybaseGianluca Hotz
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query ProcessingGianluca Hotz
 
SQL Server Modernization
SQL Server ModernizationSQL Server Modernization
SQL Server ModernizationGianluca Hotz
 
Le novità di sql server 2019
Le novità di sql server 2019Le novità di sql server 2019
Le novità di sql server 2019Gianluca Hotz
 
SQL Server Workload Profiling
SQL Server Workload ProfilingSQL Server Workload Profiling
SQL Server Workload ProfilingGianluca Hotz
 
SQL Server 2019 CTP 2.5
SQL Server 2019 CTP 2.5SQL Server 2019 CTP 2.5
SQL Server 2019 CTP 2.5Gianluca Hotz
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databasesGianluca Hotz
 
Mettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverMettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverGianluca Hotz
 
SQL Server 2019 CTP2.4
SQL Server 2019 CTP2.4SQL Server 2019 CTP2.4
SQL Server 2019 CTP2.4Gianluca Hotz
 

More from Gianluca Hotz (20)

SQL Server 2022 Programmability & Performance
SQL Server 2022 Programmability & PerformanceSQL Server 2022 Programmability & Performance
SQL Server 2022 Programmability & Performance
 
SQL Server 2022 Intelligent Query Processing
SQL Server 2022 Intelligent Query ProcessingSQL Server 2022 Intelligent Query Processing
SQL Server 2022 Intelligent Query Processing
 
Le novità di SQL Server 2022
Le novità di SQL Server 2022Le novità di SQL Server 2022
Le novità di SQL Server 2022
 
Data Integrity with SQL Database Ledger
Data Integrity with SQL Database LedgerData Integrity with SQL Database Ledger
Data Integrity with SQL Database Ledger
 
Azure SQL Database Ledger
Azure SQL Database LedgerAzure SQL Database Ledger
Azure SQL Database Ledger
 
Best Practices for Running Microsoft SQL Server on AWS
Best Practices for Running Microsoft SQL Server on AWSBest Practices for Running Microsoft SQL Server on AWS
Best Practices for Running Microsoft SQL Server on AWS
 
Azure SQL Database Ledger
Azure SQL Database LedgerAzure SQL Database Ledger
Azure SQL Database Ledger
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
 
SQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed DisksSQL Server Failover Cluster Instances con Azure Managed Disks
SQL Server Failover Cluster Instances con Azure Managed Disks
 
SQL Server Back to Basics: Sicurezza
SQL Server Back to Basics: SicurezzaSQL Server Back to Basics: Sicurezza
SQL Server Back to Basics: Sicurezza
 
SQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWSSQL Server Failover Cluster Instances con Amazon FSx in AWS
SQL Server Failover Cluster Instances con Amazon FSx in AWS
 
SQL Server Data Virtualization with Polybase
SQL Server Data Virtualization with PolybaseSQL Server Data Virtualization with Polybase
SQL Server Data Virtualization with Polybase
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
 
SQL Server Modernization
SQL Server ModernizationSQL Server Modernization
SQL Server Modernization
 
Le novità di sql server 2019
Le novità di sql server 2019Le novità di sql server 2019
Le novità di sql server 2019
 
SQL Server Workload Profiling
SQL Server Workload ProfilingSQL Server Workload Profiling
SQL Server Workload Profiling
 
SQL Server 2019 CTP 2.5
SQL Server 2019 CTP 2.5SQL Server 2019 CTP 2.5
SQL Server 2019 CTP 2.5
 
Azure PaaS databases
Azure PaaS databasesAzure PaaS databases
Azure PaaS databases
 
Mettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql serverMettere in sicurezza ambienti sql server
Mettere in sicurezza ambienti sql server
 
SQL Server 2019 CTP2.4
SQL Server 2019 CTP2.4SQL Server 2019 CTP2.4
SQL Server 2019 CTP2.4
 

Multitenancy con SQL Server e Azure SQL Database

  • 1. Multitenancy con SQL Server e Azure SQL Database
  • 3. About me • Gianluca Hotz | @glhotz | ghotz@ugiss.org • Independent Consultant • 25+ years on SQL Server (from 4.21 back in 1996) • Database modeling & development, sizing & administration, modernization (upgrades & migrations), performance tuning, security • Community • 25 years Microsoft MVP SQL Server/Data Platform (since 1998) • VMware Experts SQL Server • Founder and president UGISS (ex «PASS Chapter»)
  • 4. Opportunità SaaS Nel 2023, industria SaaS ha un valore approssimativo ~$195 miliardi (Gartner). Negli ultimi 7 anni, industria SaaS è cresciuta di ~500% App SaaS costituiscono 70% uso totale del software azienda (BetterCloud) Startup SaaS stanno facendo enorme avanzata per diventare prossima industria da 1 trilione di $
  • 5. La sfida della «multi-tenancy» Condivisione risorse di elaborazione, rete e archiviazione tra utenti di una soluzione (tenant), garantendo isolamento e sicurezza Fondamentale per creatori soluzioni SaaS massimizzare utilizzo risorse, controllare costi e ottenere margini elevati Progettare e gestire soluzioni multi-tenant richiede ricerca miglior compromesso tra prezzo, prestazioni e gestione
  • 6. Terminologia • «Tenant» • Letteralmente: «inquilino», «locatario», «affittuario» • Wikipedia[1]: multi-tenant si riferisce ad una architettura software in cui una sua singola istanza è eseguita da un server ed è fruita da diverse organizzazioni che, ciascuna con le sue peculiarità ambientali che costituiscono concettualmente uno specifico tenant (come in un immobile le cui unità o vani sono affittati a locatari diversi) • In pratica, nel contesto SaaS: il cliente del servizio • «Sharding» • Partizione orizzontale dati per riduzione in componenti più piccole e veloci da gestire • In pratica, nel contesto SaaS: partizionamento per tenant ovvero cliente • Per praticità, di seguito sharding key = identificativo tenant • «Data-Dependent Routing» • DDR è la capacità di utilizzare i dati in una query (da un catalogo) per indirizzare la richiesta a un database appropriato
  • 7. «Single-tenant application & database» • Un’istanza applicativa per tenant • Un database per tenant • Catalogo opzionale (consigliato) • Massimo isolamento • Sicurezza, disponibilità, prestazioni • Massima flessibilità • Livelli di servizio personalizzati • Diverse versioni/rilasci scaglionati Tenant C Tenant B Catalog App Tenant DB Tenant A
  • 8. «Single multi-tenant database» • Applicazione multi-tenant • Scale-out orizzontale indipendente • Un database per tutti i tenant • Minor isolamento • Minor flessibilità App App App Tenant A,B,C,D,E,F,J,K,L,M
  • 9. «Database-per-tenant» • Applicazione multi-tenant • Scale-out orizzontale indipendente • Un database per ogni tenant • Catalogo • DDR tenant->database • Ottimo isolamento • Ottima flessibilità App App App Tenant A Catalog Tenant B Tenant C
  • 10. «Sharded multi-tenant databases» • Applicazione multi-tenant • Scale-out orizzontale indipendente • Più database per più tenant • Catalogo • DDR tenant->database->shard-key • Pessimo isolamento • Pessima flessibilità App App App Tenant A,B,C,D Catalog Tenant E,F,J,K Tenant L,M
  • 11. Supporto «Sharding» e DDR • «Tenant-per-schema» • Colonna con «sharding key» • «Entity Framework Global Filters» • «Elastic Database Tools» • Supporto per «Entity Framework» e «Dapper» • Sicuramente altre soluzioni, importante padroneggiare i concetti/pattern • Ragionare in termini «web scale»… • non 100 o 1.000 ma 10.000, 100.000, 1 milione… • investire subito in «devops», farlo dopo costa molto…
  • 12. Elastic Database Tools • Da usare o prendere come modello • Elastic Database client library • Elastic Database split-merge tool • Elastic Database jobs • Elastic Database query (preview) • Elastic Transactions • Repository Github • Client Library & esempi • Rilasci ripresi a Ottobre 2023 • https://github.com/Azure/elastic-db-tools • Migrazione da SQL Azure Federation… • Anche per database-per-tenant https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-scale-introduction
  • 13. Elastic Database tools Elastic Database split-merge tool Elastic Database jobs (preview) https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-scale-overview-split-and-merge https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-jobs-overview
  • 14. Elastic Database query (preview) Cross-database (polybase/external tables) Cross-shard UNION ALL https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-query-overview
  • 15. Row Level Security (RLS) • Modifica schema tabelle • Aggiunta colonna «sharding key» • DEFAULT con SESSION_CONTEXT • RLS Policy • Funzione «table-valued» • applicata a più tabelle • predicato su SESSION_CONTEXT • predicato di filtro/blocco • Alla connessione • (tramite shard map manager) • «sharding key» -> SESSION_CONTEXT • idealmente, trasparente per il resto… https://learn.microsoft.com/en-us/azure/azure-sql/database/saas-tenancy-elastic-tools-multi-tenant-row-level-security
  • 16. Isolamento database «multi-tenant» •Indici «sharding key» come prima colonna -> sbilanciamento istogramma per selettività •Lock escalation ~5000 lock •Contesa strutture condivise a livello database Prestazioni •Rilascio errato query senza predicato su «sharding key» •Divulgazione a seguito di bug (es. dati cache, indici corrotti) •Clienti richiedono isolamento («compliance») Sicurezza •Rilascio errato impatta più tenant •Restore di un singolo tenant (impatto su altri o procedura complessa) Continuità •«Sharded Data» e dati «Reference» da replicare (es. CAP, Paesi, valute ecc.) •Rilasci scaglionati •Difficile/impossibile gestire versioni diverse e/o variazioni dello schema Gestione •Difficile gestire risorse per tenant (e fornire livelli di servizio personalizzati) •Difficile gestire personalizzazioni Flessibilità
  • 17. Pattern dominante: Database-per-tenant • Ottimo isolamento: prestazioni e sicurezza • Semplicità implementazione, gestione e manutenzione • Flessibilità • La maggior parte dei SQL Database in Azure usano già questo pattern
  • 18. Azure IaaS & PaaS Relational Data Solutions Virtual Machine in Azure • Ambienti Windows/Linux • Marketplace con immagini per i più diffusi RDBMS • Azure Dedicated Host Diversi servizi per «Container» • Azure Kubernetes Service (AKS) • Azure Red Hat OpenShift • Azure Container Instances Altri scenari • Azure Vmware Solution SQL Server engine • Azure SQL Database • Traditional/Hyperscale • Managed Instance • Azure Synapse Analytics • Azure SQL Edge OSS Engines • Azure Database for PostgreSQL • Azure Database for MySQL • Azure Database for MariaDB Azure PaaS Azure IaaS
  • 19. Modelli a istanza (VM e MI) • Numero massimo di database • Virtual Machine: 32768 per istanza… qualche migliaio più realistico • Managed Instance: 100 per istanza • Managed Instance Pool (preview): 500 per pool • 50 per istanze 2 vCores, 100 per istanze 4+ vcores • Problemi comuni • Contesa buffer cache/procedure cache/altro a livello di istanza • Controllo integrità, manutenzione indici • Problemi aggiuntivi Virtual Machine • Installazione e manutenzione software • Implementazione e manutenzione backup, alta disponibilità e disaster recovery • Es. scaglionamento migliaia di backup? Numero di Availability Group?
  • 20. Modelli a database • «Single database» • Risorse assegnate al singolo database • «Serverless»: Min/Max vCore in base a SLO con auto pausa (costo zero CPU & RAM) • «Elastic Pool» • Pool di risorse condivise da più database, «Auto-Scale» entro range definiti • Database aggiunti/rimossi a caldo • «Hyperscale» • Engine specializzato, disponibile «Single», «Serverless» e «Elastic Pool (preview)» • Caratteristiche comuni • «Service Tier/Performance Level» definiscono limiti risorse, HA e DR (inclusi!) • «Scale up» e «Scale down» senza interruzione del servizio
  • 21. «Elastic Pool» migliore opzione per SaaS • Scalabilità verticale • Modello a vCore: da 2 a 128 vCores • Scalabilità orizzontale • General Purpose/Standard: 500 database • Business Critical/Premium: 100 database • Hyperscale (preview): 25 database • Attenzione anche a tutti gli altri limiti! • Massimo 5000 database per «logical server», consigliato massimo 1000-2000 • Default 20 «logical server» per sottoscrizione in una regione (massimo 250) • Storage per pool, database, tempdb • vCore per «logical server» • ecc. ecc.
  • 22. «SaaS Elastic Pools Provisioning» • Applicazione • crea il «Pool» • può creare database in anticipo • assegna database a tenant nuovi • crea in anticipo «Pool» e database • fa scalare «Pool» per gestire più database/maggior carico di lavoro • muove database per bilanciare uso • Database con troppo carico, possono essere isolati Cust 4 Cust 1 Cust 2 Cust 3 pool1 pool2 pool3 Cust 10 Cust 11 Cust 12 Cust 17 Cust 13 ARM / SQL Database Apps Catalog
  • 23. Azure Database Fleet Manager https://techcommunity.microsoft.com/t5/azure-sql-blog/introducing-azure-database-fleet-manager/ba-p/3979576
  • 25. Conclusioni • Costo minimo «database-per-tenant» con «Elastic Pool» • Troppo alto per alcuni scenari... • VM Standard/Enterprise Edition + VM Express Edition alternativa ma… • … ricordate cosa c’è nel costo di un PaaS, es. gestione, backup, HA/DR • Investire in «devops» • Database template per «deployment» • Schedulazione avanzata (es. per gruppi logici) • Gestione schema e manutenzione indici su larga scala • Politiche di archiviazione dati e automazione • Framework, pattern, tool • Devono esservi di aiuto, non dovete lavorare per loro…
  • 26. Risorse • Link contestuali nelle slide • «Tenancy models for a multitenant solution» • https://learn.microsoft.com/en-us/azure/architecture/guide/multitenant/considerations/tenancy-models • «Multitenancy and Azure SQL Database» • https://learn.microsoft.com/en-us/azure/architecture/guide/multitenant/service/sql-database • «Multi-tenant SaaS database tenancy patterns» • https://learn.microsoft.com/en-us/azure/azure-sql/database/saas-tenancy-app-design-patterns • «Scaling out with Azure SQL Database» • https://learn.microsoft.com/en-us/azure/azure-sql/database/elastic-scale-introduction • SQL Server PaaS (Data Saturday #37 Parma 2023) • https://vimeo.com/ugiss/sqlserverpaas

Editor's Notes

  1. - https://learn.microsoft.com/en-us/archive/msdn-magazine/2012/february/scaling-out-with-sql-azure-federation
  2. https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-pool https://docs.microsoft.com/en-us/azure/sql-database/sql-database-service-tiers-dtu#elastic-pool-edtu-storage-and-pooled-database-limits https://docs.microsoft.com/en-us/azure/sql-database/sql-database-vcore-resource-limits-elastic-pools#elastic-pool-storage-sizes-and-compute-sizes
  3. https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-pool https://docs.microsoft.com/en-us/azure/sql-database/sql-database-service-tiers-dtu#elastic-pool-edtu-storage-and-pooled-database-limits https://docs.microsoft.com/en-us/azure/sql-database/sql-database-vcore-resource-limits-elastic-pools#elastic-pool-storage-sizes-and-compute-sizes