Aplicaciones escalables en la nube: mentiras y verdades

29
MADRID · NOV 21-22 · 2014 Aplicaciones escalables en la nube: mentiras y verdades Enrique Catalá MVP en SQL Server, Mentor SolidQ [email protected] @ enriquecatala Miguel Lopez Cloud Champion, Director SolidQ [email protected] @augurarte

Transcript of Aplicaciones escalables en la nube: mentiras y verdades

Page 1: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Aplicaciones escalables en la

nube: mentiras y verdades

Enrique Catalá

MVP en SQL Server, Mentor SolidQ

[email protected]

@enriquecatala

Miguel Lopez

Cloud Champion, Director SolidQ

[email protected]

@augurarte

Page 2: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Agenda

1. Errores de diseño y arquitectura

2. Conoce la nube

Page 3: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

¿Verdad o mentira?

“Puedo usar Azure para escalar hasta el

‘infinito’ mi plataforma SQL Server on-premise

a la vez que ahorro costes”

Verdad

DBreplica1

Replica1 Replica2 Replica n

DBreplica2 DBreplica3

Azure Republicador(opcional)

Transactional replication

SYNC

WANSQL1 (onpremise)

ON PREMISE Azure

Nodos secundarios replicación

Capa de base de datos, suscriptores (5s-15s delay)

SQL Standard Edition

Nodo publicador Instancia OnPremise que

contiene los datos maestros a replicar mediante replicación transaccional

Page 4: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

ELB / ILB

DBreplica1

Replica1 Replica2 Replica n

DBreplica2 DBreplica3

Azure Republicador(opcional)

Transactional replication

SYNC

Azure

Peticiones balanceadas automáticamente

(ILB/ELB)

Nodos secundarios replicación

Capa de base de datos, suscriptores (5s-15s delay)

SQL Standard Edition

Add-AzureInternalLoadBalancer-ServiceName $svc-InternalLoadBalancerName $ilb

Page 5: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

demo

Arquitectura elástica

Page 6: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

“Para implementar una aplicación Web que se

accederá de forma masiva a través de la Web,

y que gestiona contactos (o usuarios), una

base de datos SQL server o SQL Database es

la mejor opción a la hora de elegir la capa de

datos.”

¿Verdad o mentira?

Mentira

Page 7: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Bases de datos y cargas de trabajo

en aplicaciones en la nube

Page 8: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

NoSQL Key-Value

Azure Table Storage

Caso de cliente con usuarios/grupos en tablas

https://haveibeenpwned.com/HowFastIsAzureTableStorage/[email protected]

Page 9: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Algo diferente de programar…

public class BreachedAccount : TableEntity { public BreachedAccount() { } public string Websites { get; set; } }

var breachedAccount = new BreachedAccount { PartitionKey = “undominio.com”, RowKey = “un-correo01", Websites = "Adobe;Stratfor" };

var insertOperation = TableOperation.Insert(breachedAccount); table.Execute(insertOperation);

var batch = new TableBatchOperation(); batch.Insert(breachedAccount1); batch.Insert(breachedAccount2); batch.Insert(breachedAccount3); table.ExecuteBatch(batch);

Page 10: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

demo

NoSQL - Azure Table Storage

Page 11: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

¿Verdad o mentira?

“Hablando de rendimiento, Azure tiene máquinas tan potentes, que con sólo elegir el tipo de máquina adecuada para mi App, puedo ejecutar cualquier aplicación que quiera”

Verdad a medias:

La frase anterior es

cierta, pero…”La

CPU es muy valiosa”

VM Size Cores RAM Local SSD

Standard_G1 2 28 Gb 406 Gb

Standard_G2 4 56 Gb 812 Gb

Standard_G3 8 112 Gb 1,630 Gb

Standard_G4 16 224 Gb 3,250 Gb

Standard_G5 32 448 Gb 6,500 Gb

Page 12: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

La CPU es muy valiosa

MáquinaPuntuación

single-thread

Puntuación

multi-threadDescripción

Portatil Enrique Catalá 1911 4826 Intel i7 1.73Ghz

Entorno VM A3 (4cores) 1066 3635 AMD Opteron 4171 2.1Ghz

Entorno VM A4 (8cores) 1072 6617 AMD Opteron 4171 2.1Ghz

Entorno VM A7 (AMD) 1077 5622 AMD Opteron 4171 2.1Ghz

Entorno VM A7 (Intel) 1115 6680 Intel Xeon E5-2660 2.2Ghz

Entorno A9 (8 cores) 2460 10580 Intel Xeon E5-2670 2.6Ghz

Entorno VM D14 (16 cores) 1857 21444 Intel Xeon E5-2660 @ 2.20 GHz

* Benchmark no oficial y susceptible de cambios

Page 13: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

La CPU es muy valiosa

Azure A4

OnPremise

Azure A4

OnPremise

Azure A4

OnPremise

Page 14: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

La CPU es muy valiosa

• List<T> -> O(n)

• Dictionary<T,U> -> O(1)

Page 15: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

La CPU es muy valiosa

No olvides optimizar T-SQL, importa ahora

todavía mas

Page 16: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

“En Azure podemos usar Azure Federations para

montar una aplicación multi-organización (tenant)

basada en SQL Database que pueda escalar la

capa de datos, incluso por diferentes regiones”

¿Verdad o mentira?

mentira

Page 17: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Escalabilidad de SQL Database

Page 18: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Administrador de mapeo de shards

Page 19: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

SQL Database Elastic Scale

No más federaciones (no soportado)

Database Sharding

Soporte API .NET

Soporte API PowerShell / Automation

Soporte migración desde Federations

Page 20: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

demo

SQL DB Elastic Scale

Mover datos entre shards

Page 21: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

¿Verdad o mentira?

“Es preferible hacer menos peticiones a BBDD

que devuelvan mas filas vs muchas peticiones

devolviendo pocas filas”

Verdad: El coste de round-trip es muy elevado

Page 22: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

¿Verdad o mentira?

“Los ORM son necesarios en el desarrollo

cloud porque facilitan el desarrollo aunque

perdamos visibilidad de lo que hace el código

por debajo”

Mentira

-Los ORM no escalan, es así de simple

-Entity Framework es mi amigo

Page 23: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Entity Framework: Malos usos

Usar el método .Contains() recompilará

siempre una query EF

Page 24: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Entity Framework: ¿y ahora qué?

Después de 18 meses de duro trabajo, la

aplicación no escala…¿qué hacemos?

Librería Método ¿Qué hace?

System.Data.Entity.Core.

Query.PlanCompiler.Pla

nCompiler

Compile(cqt.DbCommandTree ctree, out

List<ProviderCommandInfo> providerCommands,

out ColumnMap resultColumnMap, out int

columnCount,

out Set<md.EntitySet> entitySets)

IMPORTANTE: Compila query hacia SQL Server.

Coste de compilación. Aquí generalmente es donde

debemos poner esfuerzos en optimizar linq

System.Data.Entity.Core.

Objects.Elinq.CompiledE

LinqQueryState

GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución ya compilado

previamente

System.Data.Entity.Core.

Objects.Elinq.ELinqQuer

yState

GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución todavía no compilado

System.Data.Entity.Core.

Objects.ObjectQuery<T>

GetResults(MergeOption? forMergeOption) IMPORTANTE:Obtiene datos. Incluye datos

GetExecutionPlan, Compile y el coste de

materializar incluido. Es el coste total

Page 25: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Entity Framework: ¿y ahora qué?

Después de 18 meses de duro trabajo, la

aplicación no escala…¿qué hacemos?

Librería Método ¿Qué hace?

System.Data.Entity.Core.Qu

ery.PlanCompiler.PlanCom

piler

Compile(cqt.DbCommandTree ctree, out

List<ProviderCommandInfo> providerCommands, out

ColumnMap resultColumnMap, out int columnCount,

out Set<md.EntitySet> entitySets)

IMPORTANTE: Compila query hacia SQL Server. Coste

de compilación. Aquí generalmente es donde debemos

poner esfuerzos en optimizar linq

System.Data.Entity.Core.Obj

ects.Elinq.CompiledELinqQu

eryState

GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución ya compilado previamente

System.Data.Entity.Core.Obj

ects.Elinq.ELinqQueryState

GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución todavía no compilado

System.Data.Entity.Core.Obj

ects.ObjectQuery<T>

GetResults(MergeOption? forMergeOption) IMPORTANTE:Obtiene datos. Incluye datos

GetExecutionPlan, Compile y el coste de materializar

incluido. Es el coste total

Page 26: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Entity Framework: ¿y ahora qué?

Pero descuida, todavía se puede poner peor

1. Mapeos query linq – query t-sql complicados¿alguien ha dicho la palabra “interceptor”?

2. ¿Configuraste tu caché de queries en EF de forma adecuada?

¿Cómo?

3. ¿Utilizas IQueriable como si no hubiera un mañana?Si una de las queries linkadas se recompila, todas las demás

también

…Leerse: “Performance Considerations for Entity Framework 4, 5, and 6”

Page 27: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Q&A

Dudas, cuestiones, inquietudes?

Page 28: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

GRACIAS!

Enrique Catalá

MVP en SQL Server, Mentor SolidQ

[email protected]

[email protected]

@enriquecatala

Miguel Lopez

Cloud Champion, Mentor SolidQ

[email protected]

@augurarte

Page 29: Aplicaciones escalables en la nube: mentiras y verdades

MADRID · NOV 21-22 · 2014

Grab that keyboard and start blowing brains

out.

Remember: this template is also available online.

Now it’s your turn