[AzurePT] SQL Azure Federations

1.120 visualizações

Publicada em

Publicada em: Tecnologia
  • Seja o primeiro a comentar

[AzurePT] SQL Azure Federations

  1. 1. SQL Azure Federations Vítor Tomaz
  2. 2. About MeVítor TomazConsultor IndependenteEmail: vitorbstomaz@gmail.comTwitter: @vitortomaz
  3. 3. Patrocinadores
  4. 4. AgendaSQL Azure Database OverviewEscalabilidadeConceitosUtilização nas aplicações
  5. 5. SQL Azure Database OverviewAccount Cada conta tem 0 ou mais servidores lógicos Criada através do portal Cada servidor lógico tem uma ou mais bases de dados Contém informações aceca das base de dados e consumos Server Unidade de autenticação, geo-localização, billing, e reporting Nome gerado automáticamente Uma base de dados tem objectos SQLDatabase Utilizadores, Tabelas, Views, Indices, etc Unidade de consistência
  6. 6. SQL Azure Database OverviewWeb Edition Business Edition1Gb 5Gb 10Gb 20,30,40,50,100 150Gb
  7. 7. SQL Azure Database Overview Três Uma Base de DadosBase de Dados Físicas Lógica Primary Secondary 1 DB Secondary 2
  8. 8. EscalabilidadeEscalabilidadeElasticidadeBaixo Investimento InicialPago o que UsoNão há (demasiados) recursos desperdiçados
  9. 9. EscalabilidadeScale Out 150Gb SQL Compute SQL Azure Azure Scale Up Scale Out
  10. 10. SQL Azure Architecture Client Layer Infrastructure Layer
  11. 11. SQL Azure ArchitecturePlatform Layer Node 14 SQL Server Instance SQL Server DBUser User User UserDB1 DB2 DB3 DB4 SQL Azure Fabric Node 15 SQL Server Instance SQL Server DBUser User User UserDB1 DB2 DB3 DB4 SQL Azure Fabric
  12. 12. Multi-tenantUma base de dados por tenant Custo mínimo por tenant 9.99$Tudo numa base de dados Limite de capacidade de processamento Limitado a 150Gb
  13. 13. ShardingPartitionKeyPartitionKey RowKey RowKey Timestamp Timestamp ModelYear ModelYear(Category)(Category) (Title) (Title)Bikes Super Duper Cycle … 2009Bikes Quick Cycle 200 Deluxe … 2007…… … … … … … …CanoesCanoes Whitewater Whitewater … … 2009 2009Canoes Flatwater … 2006Canoes Flatwater … 2006PartitionKeyRafts RowKey 14ft Super Tourer …Timestamp ModelYear 1999(Category) (Title)…Rafts … 14ft Super Tourer … … … 1999Skis… Fabrikam Back Trackers … …… 2009 ……Skis … Fabrikam Back Trackers …… … 2009…Tents … Super Palace …… … 2008Tents Super Palace … 2008
  14. 14. ShardingSharding de uma base de dadosSharding numa aplicação multi-tenant
  15. 15. Distribuição dos dadosCentralizados Disponíveis num único local Centralizados Particionados Poucas leituras e escritasParticionados Configs Dados1 Dados2 Dados3 Cada “pedaço” reside apenas CP CP CP numa base de dados ReplicadosReplicados Leituras Escritas são raras
  16. 16. ArquitecturaFederation Root contêm todas as Federation Root informações sobre o particionamento dos Federations dados Federation Members AppDBFederations objectos que suportam a funcionalidade de ClientesFed distribuição dos dados entre as várias partições
  17. 17. ArquitecturaFederation Member Instância de SQL AzureFederation Key Federation Key Member : Range [100,300] campo que identifica univocamente ID=110 ID=210 cada partição Unidades ID=120 ID=220 AtómicasUnidades Atómicas ID=130 ID=230 conjunto de dados com a mesma federation key ficam garantidamente no mesmo federation member
  18. 18. DEMOCriação de uma Federação
  19. 19. RegrasCREATE FEDERATION nome_federacao (nome_distribuicao <tipo> RANGE) Nome da federação têm que ser único dentro de uma base de dados Tipo de dados terá que ser INT, BIGINT, UNIQUEIDENTIFIER ou VARBINARY(n) onde o n poderá ir até 900
  20. 20. RegrasDados Centralizados Criados na root databaseDados Particionados (federados) Criados no federation member Com o atributo FEDERATED ON ()Dados Replicados Criados no federation member Sem o atributo FEDERATED ON ()
  21. 21. RegrasCREATE TABLE Produto(…) FEDERATED ON (ID=ProdutoID) O tipo de dados desta coluna tem que ser obrigatoriamente igual ao tipo de dados da chave da federação. Não pode ter valor nulo. Não pode ser actualizada para valores fora do range do membro actual. Não pode ser uma computed column. Tem que fazer parte de todas as unique e clustered indexes. Tem que fazer parte de todas as chaves estrangeiras para outras federated tables.
  22. 22. RegrasSchema Todas as chaves estrangeiras entre federated tables têm que conter a chave da federação Não podem existir reference tables com chaves estrangeiras para uma federated table Uma federated table pode ter chaves estrangeiras para reference tables sem restrições Só poderão ser realizadas alteração ao esquema de um membro através de ligações sem filtro (FILTERING=OFF)
  23. 23. RegrasOs membros da federação não suportam: Index Views Colunas Identity Tipo de dados timestamp e rowversion
  24. 24. DEMO SPLIT
  25. 25. SPLIT – 1ª Fase Member : Range [100,300)São instanciadas duas novas bases de ID=110 ID=210dados ID=120 ID=220 ID=130 ID=230São criadas as entradas nas tabelas demetadata que irão suportar oprogresso da operação Member : Member : Range [100,200) Range [200,300)(sys.dm_federation_operation*) epreparadas as operações de cópia dosdados
  26. 26. SPLIT – 2ª Fase Member : Range [100,300) ID=110 ID=210Criação do Schema ID=120 ID=130 ID=220 ID=230Cópia integral dos dados replicadosCópia filtrada dos dados particionadosOperações acontecem sobre as novasbases de dados e respectivas réplicas Member : Range [100,200) Member : Range [200,300)Original passa a offline e novas a online ID=110 ID=120 ID=210 ID=220Alteração transparente para o utilizador ID=130 ID=230 alteração na metadata retry logic
  27. 27. DEMOUSE FEDERATION
  28. 28. Use FederationUSE FEDERATION ROOT WITH RESETUSE FEDERATION federation_name (distribution_name =value) WITH FILTERING={ON|OFF}, RESET [;] RESET é obrigatório FILTERING OFF – Acede a todos os dados do federation member ON – Acede apenas a dados da unidade atómica definida
  29. 29. Root Database a Bottleneck ? Client Layer Infrastructure Layer
  30. 30. Root Database a Bottleneck ? TDS Client Layer Services Layer GatewaySessão TDSInfrastructure Layer
  31. 31. Root Database a Bottleneck ?
  32. 32. DEMOUTILIZAÇÃO NAS APLICAÇÕES
  33. 33. LINQusing (DataClasses1DataContext db = new DataClasses1DataContext()){ db.Connection.Open(); db.ExecuteCommand("USE FEDERATION ProdutosFed(ID = 110)WITH RESET, FILTERING=OFF"); (…)}
  34. 34. Entity Frameworkusing (DemoEntities db = new DemoEntities()){ db.Connection.Open(); db.ExecuteStoreCommand(“USE FEDERATION ProdutosFed(ID = 110)WITH RESET, FILTERING=OFF”);(…)}
  35. 35. Entity Framework – Code Firstusing (DemoEntities db = new DemoEntities()){ ((IObjectContextAdapter)db).ObjectContext.Connection.Open(); db.ExecuteStoreCommand(“USE FEDERATION ProdutosFed (ID = 110)WITH RESET, FILTERING=OFF”);(…)}
  36. 36. Transacçõesusing (DemoEntities db = new DemoEntities()){ db.Connection.Open(); db.ExecuteStoreCommand(“USE FEDERATION ProdutosFed(ID = 110) WITHRESET, FILTERING=OFF”); using (TransactionScope scope = newTransactionScope(TransactionScopeOption.RequiresNew)) { (...) }}
  37. 37. Multiple Active Result Sets (MARS)Ainda não existe suporte para MARS em SQL Azure FederationsNão pudemos usar Lazy Loading, LoadProperty() e Load()Temos que fazer Eager Loading Inicializar os objectos no momento da criação
  38. 38. Multiple Active Result Sets (MARS)LINQDataLoadOptions dataLoadOptions = new DataLoadOptions();dataLoadOptions.LoadWith<Produto>(c => c.Categoria);db.LoadOptions = dataLoadOptions;Entity Framework O eager loading é realizado através do método Include:var produtos = from p in db.Produto.Include("Categoria1") select p;
  39. 39. RecapCentralizados Particionados Configs Dados1 Dados2 Dados3 CP CP CP Replicados
  40. 40. RecapFederation Root Federations Federation Members AppDB ClientesFed
  41. 41. Questões?
  42. 42. Patrocinadores
  43. 43. Obrigado!

×