Azure, de cloud oplossing van Microsoft, biedt veel mogelijkheden voor het hosten van applicaties en data. Een van die mogelijkheden is het gebruik maken van Azure SQL Databases. Speciaal voor SaaS oplossingen biedt Microsoft Elastic Database pools aan. Met deze oplossing kun je eenvoudig en (kosten)efficiënt je databases onderbrengen in de cloud.


SQL Databases in Azure

Voor een Euro of 13 per maand, heb je de beschikking over een SQL database in Azure zonder dat je druk hoeft te maken over zaken als back-ups, failover, firewalls, updates en licenties.

Het aanmaken is ook super simpel: In de Azure Portal klik je in een paar eenvoudige stappen, je database in elkaar. Afhankelijk van de ‘load’ die je verwacht kies je een capaciteit van de database. Uiteraard, hoe meer je capaciteit je koopt, hoe meer je betaald. Dat betekent dat je kunt kiezen voor een database van een paar euro tot tienduizenden euro’s per maand. Dit is ook achteraf nog aan te passen, mocht je toch meer of minder verbruiken dan je verwacht had.


Mocht je enkele databases nodig hebben, dan is dit een zeer eenvoudige en goedkope oplossing (vergelijk het maar eens met het aanschaffen van een SQL Server licentie). Echter wanneer je bijvoorbeeld een SaaS oplossing maakt waarbij je voor al je klanten een individuele database gebruikt kan het stiekem toch een duur grapje worden. Wanneer je zelf een SQL server host, kun je op die server zoveel databases installeren als je zelf wilt. Je betaalt in dat geval niet per database, maar gewoon voor je SQL Server licentie. Om dit scenario ook goed te kunnen ondersteunen biedt Microsoft Azure, Elastic Database Pools.

Elastic database pools

Het idee achter een elastic pool, is dat je een bepaalde hoeveelheid resources (combinatie van CPU, Disk en geheugen) inkoopt en dat alle databases in de pool deze resources delen. Je betaalt voor de resources en niet voor de databases, zodat je potentieel grote aantallen databases kunt gebruiken voor een relatief laag bedrag.

In onderstaand voorbeeld zie je de configuratie voor een Elastic pool, waarin je tot 500 individuele databases kunt onder brengen. Met een prijs van 378 Euro zou dat uitkomen op ongeveer 3 kwartjes per maand per database!!


Delen van resources

Het draait dus om het delen van resources. Niet elke SaaS klant zal op het zelfde moment de database (zwaar) belasten. Over het algemeen gaat het met pieken. Hieronder zie je een voorbeeld van het gebruik van de resources voor 1 database gedurende een uur.


Wil je de performance kunnen bieden die gevraagd wordt, moet je dus de resources inkopen die je piek nodig heeft. Echter is alles boven de blauwe lijn dus overbodig ingekochte resources. Zonde, toch?

Als je de resources gaat verdelen over bijvoorbeeld 5 database zie je dat de pieken over het algemeen op verschillende momenten plaats vindt en dat de resources effectiever gebruikt worden.


Aangezien er dan nog steeds veel ruimte overblijft, kun je nog meer databases toevoegen. In dit voorbeeld vullen we aan tot 20 databases. Het totaal aantal resources at je eigenlijk nodig had, wordt aangegeven door de zwarte lijn. De "ongebruikte” ruimte boven de lijn is significant kleiner geworden.

 

Database Transaction Units

Tot nu toe heb ik het gehad over "resources”. Bij de instellingen zie je DTU’s en eDTU’s terug. Dit zijn een soort eenheid voor de gecombineerde resources.

Microsoft heeft bepaald wat een "gemiddelde” query kost aan resources. Dit gemiddelde is bepaald aan de hand van 10 veel voorkomende transacties. Dat zijn bijvoorbeeld eenvoudige select queries, ingewikkelde joins, group by’s, update en insert queries. Daarvan hebben ze gemeten wat de ‘kosten’ voor het gebruik van waren en het gemiddelde hiervan hebben ze 1 Database Transaction Unit genoemd.

Hierdoor kun je een beetje inschatten wat je kunt verwachten van je database of pool wanneer je deze gaat configureren.

In het eerste voorbeeld met de individuele database stond ingesteld dat de database maximaal 10 "gemiddelde” queries per seconde aan kan.

Bij de elastic pool stond dat op 200 per seconde. Je kunt dus enorme (piek) performance aanbieden aan je klanten, terwijl je een fractie van de kosten kwijt bent!

Mocht je bang zijn dat de ene klant alle resources gebruikt en dat andere klanten daar last van krijgen, dan kun je ook instellen wat het maximum aantal DTU’s per database is, of hoeveel DTU’s per database gegarandeerd beschikbaar moeten zijn.

Een laatste belangrijk punt is dat je databases op elk gewenst moment toe kunt voegen of kunt verwijderen uit een Elastic pool. Zo zou je bijvoorbeeld een freemium klant, die een premium klant wordt, kunnen verplaatsen voor een pool met minder DTU’s naar een pool waar meer DTU’s geconfigureerd zijn.

Schema updates

Een andere uitdaging die komt kijken, wanneer je verschillende databases per klant hebt, is het up-to-date houden van het database schema. Wanneer een nieuwe feature een aanpassing aan het database schema nodig heeft, dan moet je al je databases tegelijkertijd updaten.

Er zijn eigenlijk 2 fatsoenlijke oplossingen:
  1. Elastic queries: hiermee kun je gecentraliseerd queries uitvoeren over verschillende databases in de pool
  2. (bijna) geen schema hebben: Doormiddel van de JSON functionaliteit van SQL databases is het mogelijk om een soort no-sql database oplossing te bouwen in SQL Server. Voor meer informatie kun je kijken in deze blog.

Azure en SQL Server Trainingen

Wij bieden een groot scala aan Azure en SQL Server trainingen aan. Neem bijvoorbeeld de training Microsoft Azure Fundamentals, dé training die een basis legt voor het leren implementeren van Azure. De training Developing Microsoft Azure Solutions duikt verder in op het onderwerp en is bedoelt voor developers die al ervaring hebben met het Azure platform en de services van Azure. Wanneer je meer interesse hebt in het inrichten van SQL databases is de training Provisioning SQL Databases wellicht iets voor jou!

Voor meer trainingen kun je altijd een kijkje nemen op onze website. Elke training is aangepast op een bepaald niveau en bijpassende leerdoelen. Dus ben jij klaar om je verder te ontwikkelen op het gebied van Azure of SQL Server? Neem dan vrijblijvend contact met ons op en we zullen je voorzien met advies over welke training het beste aansluit op jouw leerdoelen!