Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Aplicaciones escalables en la nube: mentiras y verdades

Desarrollar para la nube no es tan transparente como creemos. Conocer correctamente este nuevo entorno, así como sus limitaciones nos ayudarán a evitar problemas de escalabilidad. En esta sesión veremos cómo desarrollar correctamente soluciones para la nube de Microsoft que sean escalables. Veremos ejemplos de lo que no es escalable y también veremos cómo podemos solucionarlo y evitarlo. Hablaremos de patrones de arquitectura, Unity, Entity Framework, capas de acceso a datos, worker roles, web roles,… escalabilidad!

  • Login to see the comments

  • Be the first to like this

Aplicaciones escalables en la nube: mentiras y verdades

  1. 1. MADRID · NOV 21-22 · 2014 Aplicaciones escalables en la nube: mentiras y verdades Enrique Catalá MVP en SQL Server, Mentor SolidQ ecatala@solidq.com @enriquecatala Miguel Lopez Cloud Champion, Director SolidQ mlopez@solidq.com @augurarte
  2. 2. MADRID · NOV 21-22 · 2014 Agenda 1.Errores de diseño y arquitectura 2.Conoce la nube
  3. 3. MADRID · NOV 21-22 · 2014 ¿Verdad o mentira? “Puedo usar Azure para escalar hasta el ‘infinito’ mi plataforma SQL Server on-premisea la vez que ahorro costes” Verdad DBreplica1Replica1Replica2Replica nDBreplica2DBreplica3Azure Republicador(opcional) Transactional replication SYNCWANSQL1 (onpremise) ON PREMISEAzure  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
  4. 4. 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
  5. 5. MADRID · NOV 21-22 · 2014 demo Arquitectura elástica
  6. 6. 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 Databasees la mejor opción a la hora de elegir la capa de datos.” ¿Verdad o mentira? Mentira 
  7. 7. MADRID · NOV 21-22 · 2014 Bases de datos y cargas de trabajo en aplicaciones en la nube
  8. 8. MADRID · NOV 21-22 · 2014 NoSQLKey-Value Azure TableStorage Caso de cliente con usuarios/grupos en tablas https://haveibeenpwned.com/HowFastIsAzureTableStorage/?email=pepe@Hotmail.com
  9. 9. MADRID · NOV 21-22 · 2014 Algo diferente de programar… publicclassBreachedAccount: TableEntity{ publicBreachedAccount() { } publicstringWebsites{ get; set; } } varbreachedAccount= new BreachedAccount{ PartitionKey= “undominio.com”, RowKey= “un-correo01", Websites= "Adobe;Stratfor" }; varinsertOperation= TableOperation.Insert(breachedAccount); table.Execute(insertOperation); varbatch= new TableBatchOperation(); batch.Insert(breachedAccount1); batch.Insert(breachedAccount2); batch.Insert(breachedAccount3); table.ExecuteBatch(batch);
  10. 10. MADRID · NOV 21-22 · 2014 demo NoSQL-Azure TableStorage
  11. 11. 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
  12. 12. MADRID · NOV 21-22 · 2014 La CPU es muy valiosa Máquina Puntuación single-thread Puntuación multi-thread Descripción PortatilEnrique Catalá 1911 4826 Intel i7 1.73Ghz Entorno VM A3 (4cores) 1066 3635 AMD Opteron4171 2.1Ghz Entorno VM A4 (8cores) 1072 6617 AMD Opteron4171 2.1Ghz Entorno VM A7 (AMD) 1077 5622 AMD Opteron4171 2.1Ghz Entorno VM A7 (Intel) 1115 6680 Intel XeonE5-2660 2.2Ghz Entorno A9 (8 cores) 2460 10580 Intel XeonE5-26702.6Ghz Entorno VM D14 (16 cores) 1857 21444 Intel XeonE5-2660@ 2.20 GHz * Benchmarkno oficial y susceptible de cambios
  13. 13. MADRID · NOV 21-22 · 2014 La CPU es muy valiosa Azure A4 OnPremise Azure A4 OnPremise Azure A4 OnPremise
  14. 14. MADRID · NOV 21-22 · 2014 La CPU es muy valiosa •List<T> ->O(n) •Dictionary<T,U>-> O(1)
  15. 15. MADRID · NOV 21-22 · 2014 La CPU es muy valiosa No olvides optimizar T-SQL, importa ahora todavía mas
  16. 16. MADRID · NOV 21-22 · 2014 “En Azure podemos usar Azure Federationspara montar una aplicación multi-organización (tenant) basada en SQL Databaseque pueda escalar la capa de datos, incluso por diferentes regiones” ¿Verdad o mentira? mentira
  17. 17. MADRID · NOV 21-22 · 2014 Escalabilidad de SQL Database
  18. 18. MADRID · NOV 21-22 · 2014 Administrador de mapeo de shards
  19. 19. MADRID · NOV 21-22 · 2014 SQL DatabaseElasticScale No más federaciones (no soportado) DatabaseSharding Soporte API .NET Soporte API PowerShell/ Automation Soporte migración desde Federations
  20. 20. MADRID · NOV 21-22 · 2014 demo SQL DB ElasticScale Mover datos entre shards
  21. 21. 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-tripes muy elevado
  22. 22. MADRID · NOV 21-22 · 2014 ¿Verdad o mentira? “Los ORM son necesarios en el desarrollo cloudporque facilitan el desarrollo aunque perdamos visibilidad de lo que hace el código por debajo” Mentira -Los ORM no escalan, es así de simple -EntityFramework es mi amigo 
  23. 23. MADRID · NOV 21-22 · 2014 EntityFramework: Malos usos Usar el método .Contains() recompilará siempre una queryEF
  24. 24. MADRID · NOV 21-22 · 2014 EntityFramework: ¿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.PlanCompiler Compile(cqt.DbCommandTree ctree, out List<ProviderCommandInfo> providerCommands, out ColumnMap resultColumnMap, out int columnCount, out Set<md.EntitySet> entitySets) IMPORTANTE: Compila queryhacia SQL Server. Coste de compilación. Aquí generalmente es donde debemos poner esfuerzos en optimizar linq System.Data.Entity.Core. Objects.Elinq.CompiledELinqQueryState GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución ya compilado previamente System.Data.Entity.Core. Objects.Elinq.ELinqQueryState GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución todavía no compilado System.Data.Entity.Core. Objects.ObjectQuery<T> GetResults(MergeOption? forMergeOption) IMPORTANTE:Obtienedatos. Incluye datos GetExecutionPlan, Compile y el coste de materializar incluido. Es el coste total
  25. 25. MADRID · NOV 21-22 · 2014 EntityFramework: ¿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.PlanCompiler Compile(cqt.DbCommandTree ctree, out List<ProviderCommandInfo> providerCommands, out ColumnMap resultColumnMap, out int columnCount, out Set<md.EntitySet> entitySets) IMPORTANTE: Compila queryhacia SQL Server. Coste de compilación. Aquí generalmente es donde debemos poner esfuerzos en optimizar linq System.Data.Entity.Core.Objects.Elinq.CompiledELinqQueryState GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución ya compilado previamente System.Data.Entity.Core.Objects.Elinq.ELinqQueryState GetExecutionPlan(MergeOption? forMergeOption) Obtener plan de ejecución todavía no compilado System.Data.Entity.Core.Objects.ObjectQuery<T> GetResults(MergeOption? forMergeOption) IMPORTANTE:Obtienedatos. Incluye datos GetExecutionPlan, Compile y el coste de materializar incluido. Es el coste total
  26. 26. MADRID · NOV 21-22 · 2014 EntityFramework: ¿y ahora qué? Pero descuida, todavía se puede poner peor  1.Mapeos querylinq–queryt-sqlcomplicados ¿alguien ha dicho la palabra “interceptor”? 2.¿Configuraste tu caché de queriesen EF de forma adecuada? ¿Cómo? 3.¿Utilizas IQueriablecomo si no hubiera un mañana? Si una de las querieslinkadasse recompila, todas las demás también …Leerse: “Performance Considerations for Entity Framework 4, 5, and 6”
  27. 27. MADRID · NOV 21-22 · 2014 Q&A Dudas, cuestiones, inquietudes?
  28. 28. MADRID · NOV 21-22 · 2014 GRACIAS! Enrique Catalá MVP en SQL Server, Mentor SolidQ ecatala@solidq.comenrique-catala@outlook.com @enriquecatala Miguel Lopez Cloud Champion, Mentor SolidQ mlopez@solidq.com @augurarte
  29. 29. 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

×