Azure SQL Database elastic pool (Preview)

En el último evento de Microsoft Build 2015 se presentó el servicio de SQL Database elastic pool, un servicio para gestionar recursos compartidos de aplicaciones SasS.

Antes de comenzar a hablar de este servicio, lo primero que hay que hacer es mostrar cual es la motivación que hay detrás de este nuevo servicio de Microsoft, y ¿por qué para determinado casos puede ser el condicionante del éxito de un cliente o producto?

La situación actual

A día de hoy cualquier empresa que se plantee dar un servicio de Software como servicio, el Cloud es una de las primeras cosas en las que piensa. No solo desde el punto de vista el almacenamiento, del que se va a hablar ahora mismo, sino desde el punto de vista de la computación.

En lo que se refiere a los datos, un concepto muy importante que hay que tener en cuenta, es el de multi-tenant. Esto permite tener una base de datos para cada uno de los clientes, de esa manera se consiguen muchos beneficios:

  • Tener los datos aislados de cada cliente. Haciendo así que cada uno de los clientes esté seguro de hay una unidad de aislamiento física y sus datos no están en la misma base de datos que otro cliente, pudiendo darse la situación de que uno de esos clientes sea competencia suya.
  • Permite escalar independientemente cada una de las base datos. Cada cliente es único desde un punto de vista de consumo y rendimiento y tratarlos a todos por igual es injusto, además también de esa manera se puede segmentar mejor los planes de uso de la aplicación. Quien quiera más potencia se podrá actualizar esa base de datos sin tener que afectar en rendimiento u operaciones a otros clientes.

Este escenario multi-tenant se puede implementar a día de hoy con SQL Database el servicio que se ofrece en Azure, que te permite provisionar una base de datos y olvidarte de la gestión de la base de datos. Además, cada base de datos tiene su propio nivel de rendimiento que se puede cambiar en cualquier momento.

Nivel de servicio

Nivel

DTU

Database Size

Point in time Restore

Basic

B

5

2 Gb

7 días

Standar

S0

10

250Gb

14 días

Standar

S1

20

250Gb

14 días

Standar

S2

50

250Gb

14 días

Standar

S3

100

250Gb

14 días

Premium

P1

125

500Gb

35 días

Premium

P2

250

500Gb

35 días

Premium

P3

1000

500Gb

35 días

Esta tabla muestra las diferentes opciones que se pueden elegir a la hora de elegir qué nivel de servicio se puede elegir para una base de datos.

La columna que interesa ahora mismo es la de DTU, Database Throughput Units, que viene a ser una unidad de medida para saber cuántas operaciones está ejecutando la base de datos. Esta unidad es fija durante todo el tiempo que está activa la base de datos, independientemente de las operaciones que se estén haciendo en ella. Eso significa que, si un cliente se ha provisionado en una Estándar S2 de 50 DTU, pero en los últimos días solo está usando de media 10 DTU, estás desaprovechando los 40 DTU restantes de esa base de datos.

SQL Database elastic pool

Detrás de esta última idea está la motivación que hay detrás de SQL Database elastic pool. Ya que hoy en día se construyen aplicaciones SaaS que con un grupo de base de datos, que en general todas comparten el mismo esquema de datos, y representan a un conjunto de clientes, pero esos clientes hacen usos distintos de esos recursos, ¿por qué no aprovechar los recursos que un cliente de una base de datos S2 no está aprovechando para que otro cliente las pueda aprovechar?

Un elastic databse pool es una colección de recursos compartidos por base de datos elásticas dentro del pool. Se puede añadir o eliminar base de datos del pool en cualquier momentos. Estas base de datos elásticas compartes los recursos elásticos (expresado en elastic database throughput eDTU) y capacidad de almacenamiento dentro del pool. En vez sobredimensionar base de datos individuales y pagar por esos recursos para que estén en espera, puedes dimensionar y pagar por un grupo de recursos previsible que se pueden agregar.

¿Cómo agregar un elastic pool?

SQL elastic pool solo se puede provisionar en un servidor de base de datos en la versión V12 del motor de SQL. Desde la nueva consola de administración y teniendo abierto un servidor de SQL Database, se puede crear un nuevo pool.

clip_image001

Cuando se han aceptado las condiciones de uso del servicio en Preview, se puede empezar a añadir base de datos que formen parte de ese servidor.

clip_image002

El último paso es configurar el rendimiento del pool entre valores máximo y mínimos,

clip_image003

Se puede seguir los siguientes pasos para crear el elastic pool desde la documentación oficial de Azure.

Siguientes pasos

SQL elastic pool, es un servicio estupendo si estas desarrollando una aplicación SaaS multi-tenant, en el que cada uno de los clientes del servicio tiene su propia base de datos y además los clientes tienen usos muy diferentes de esas base de datos. En vez de provisionar el número de clientes que tengas por el número de base de datos, puedes provisionar las mismas base de datos, pero compartir los recursos entre clientes para ahorrar costes.

En este modelo, una de las preguntas recurrentes de los clientes es la necesidad de actualizar el esquema de las base de datos que forman partes del elastic pool. Para esta tarea en concreto dentro del mismo pool se ofrece el servicio de Elastic database Jobs que permite programar la ejecución de un script escrito en T-SQL para este se ejecute en todas las bases de datos que forman parten del pool.

Luis Guerrero.

Technical Evangelist Microsoft Azure.

@guerrerotook