SETEMBRO, 2010 | SÃO PAULO CÓDIGO DA SESSÃO: COS304 Projetando Aplicativos para a Escalabilidade Tirando o melhor da Plataforma Windows Azure Otavio Pecego Coelho Arquiteto Chefe Microsoft Brasil http://blogs.msdn.com/otavio [email protected] Agenda Provisionamento Dinâmico Armazenamento de Estados Upgrade de Versões Sharding SaaS: Personalização e Isolamento de Dados Cache Distância Código-Storage Filas Continuações Monitoração Grid Computing Pequenos Patterns Práticas para a Diminuição de Custos Provisionamento Dinâmico Provisionamento Dinâmico Via Portal Via Visual Studio csmanage /view-deployment /hostedservice:dpe_demos /slot:staging /viewdeployment /name:dpe_demos Build automático: http://blogs.msdn.com/b/domgreen/archive/20 09/09/29/deploying-to-the-cloud-as-part-ofyour-daily-build.aspx Provisionamento via csmanage.exe Armazenando Estados A B A? Armazenando Estados Armazenando Estados P1 P2 Armazenando Estados s s s 1) Table Storage (Table + Blob) 2) Table (Table Session Size: 64K Max) 3) SQL Azure Resumo (serve para Membership, Role, Profile, Session State) Capacidade Elasticidade Preço Azure Table SQL Azure Sim. Limitado pelos 50GBs Variável: Custo fixo ao mês Transação + Armazenamento Remoção quando a sessão termina Desempenho Não. Implementar um WorkerRole para a limpeza Melhor que SQL quando muitos usuários oncorrentes Maior escalabilidade Escalabilidade Referências Não. Implementar um WorkerRole para a limpeza Melhor que SQL quando poucos usuários oncorrentes Escalabilidade via particionamento http://blogs.msdn.com/b/jnak/ http://blogs.msdn.com/b/sqlaz archive/2009/11/19/using-the- ure/archive/2010/08/04/10046 sample-windows-azure-asp-net- 103.aspx providers.aspx Upgrades de Versões Utilizando o Upgrade Domain (UD) Passo 1: Upgrade dos roles que entendem ambas as versões Step 2: Instale a nova versão UD0 UD1 UD2 Mudança de Esquema – Upgrade p/ Cliente V1.5 Partition Key Row Key Version PK1 RK1 1 PK2 RK2 1 ……. ……. 1 ……. ……. 1 ……. ……. 1 ….. Property N Nova Property Cliente V1.5 V1 Default Cliente V1 V1.5 Cliente V1.5 Tem a classe com a nova propriedade Se a entidade está na versão V1 Guarda o valor default na nova propriedade Não faça upgrade da versão da entidade Cliente V1 Ignora a nova propriedade, uma vez que está usando “IgnoreMissingProperties” Schema Change – Upgrade to V2 Cliente Partition Key Row Key Version ….. Property N Nova Property PK1 RK1 1 Default PK2 RK2 12 Valor2 Default Valor1 ……. ……. 1 ……. ……. 1 ……. ……. 1 Cliente Cliente V2 V1 V1.5 Cliente V1 V1.5 V2 Cliente V2 Faz update das linhas p/ V2 (no seu primeiro uso) e começa a colocar valores reais nas novas propriedades Cliente V1.5 Se a entidade está na versão V1 Guarda o valor default na nova propriedade e não muda a versão Se a entidade está na versão V2 Usa o novo valor e faz o seu update Sharding P1 P2 P3 Sharding Multi-Inquilino – Isolamento de Dados Open Cliente(X) Open Cliente(X) Open Cliente(X) CREATE DATABASE ClienteX AS COPY OF [source_server_name.] DBTemplate Cliente A Cliente B Cliente C Multi-Inquilinos - Personalização 1 * Inquilino TenantID int TenantName nvarchar * Type Employee * EmployeeId int TypeID int FirstName nvarchar Name nvarchar LastName nvarchar CLRType nvarchar 1 1 Customization * CustomizationID int Value nvarchar * Multi-Inquilinos - Personalização 1 * Inquilino TenantID 1 TenantName Brazil * Type Employee * EmployeeId 1 TypeID 1 FirstName Luis Name CodPostal LastName Lula CLRType string 1 1 Customization * CustomizationID 1 Value 06734-001 * Multi-Inquilinos - Personalização Esquema Fixo Se aplica a Todos Inquilinos 1 * Inquilino TenantID 2 TenantName USA * Pode ser p/ ambos inquilinos Type Employee EmployeeId 1 FirstName Barak LastName Obama Customizável Por Inquilino * TypeID 2 Name ZipCode CLRType string 1 1 Customization * CustomizationID 2 Value 20500 * Personalização Cache Ready Only Windows Azure Drives Windows Azure Content Delivery Network ReadWrite: http://cloudcache.codeplex.com/ http://code.msdn.microsoft.com/winazurememcac hed/Release/ProjectReleases.aspx?ReleaseId=3551 Futuro: AppFabric Cache Windows Azure Drives Lease Snapshot Windows Azure Content Delivery Network http://guid01.vo.msecnd.net/images/pic.1jpg Para habilitar o CDN: Registre CDN via Dev Portal Container público Não disponível! Localização do CDN Localização do CDN TTL Localização do CDN Content Delivery Network http://sally.blob.core.windows.net/ http://guid01.vo.msecnd.net/ pic1.jpg pic1.jpg pic1.jpg http://sally.blob.core.windows.net/images/pic1.jpg Windows Azure Blob Service Distância Código & Dados – Code Far Distância Código & Dados – Code Near Filas e Processamento em Background Melhores Práticas para Filas ISerializable Idempotência Mensagens Envenenadas OBS: Nem sempre precisamos de Work Roles Escalando a Vazão das Filas Junte itens de trabalho em Blobs agrupe vários itens de trabalho num Blob Enfilere uma mensagem que aponta para o Blob OU Use Múltiplas Filas Job Manager Responsável por adicionar e remover filas Workers Precisam determinar que filas usar Escolha aleatória via uma Lista de Filas Ou escolha centralizada no Job Manager Continuação para itens que rodam durante muito tempo Diminuir retrabalho em falhas Algoritmo Quebre o item de trabalho em pedaços menores e repetitivos Guarde o progresso depois de cada passo indexando pelo item de trabalho Em caso de erro, procure o último passo daquele item de trabalho na tabela Recomece a partir do ponto de falha Cuidado c/ erros persistentes Continuação para itens que rodam durante muito tempo Diminuir retrabalho em falhas Algoritmo Quebre o item de trabalho em pedaços menores e repetitivos Guarde o progresso depois de cada passo indexando pelo item de trabalho Em caso de erro, procure o último passo daquele item de trabalho na tabela Recomece a partir do ponto de falha Cuidado c/ erros persistentes Monitoração e WatchDog Cenário Grid Computing Quantas letras ”e”’encontramos na frase “The quick brown fox jumps over the lazy dog”? Data Cliente Master Worker M<k,v> Worker M<k,v> Worker M<k.v> “Map” M<“the quick brown”,”e”> M<“fox jumps over”,”e”> M<“the lazy dog”,”e”> Cliente Master L<k,v> Worker L<k,v> Worker Result Worker L<k,v> 3 letras ”e” encontradas “Reduce ” L<”e”,”1”> L<”e”,”1”> L<”e”,”1”> Data Cliente Web Role Aplicação Cliente Job/Task Scheduler Worker Data Worker Data Worker Data Serviço Remoto Req Fila Tabela MapReduce Pequenos Cuidados Boa Prática: Retry Boa Prática: Retry Boa prática – Diminuindo o Polling Boa prática – Diminuindo o Polling Batch Update // loop de inserções for (int index = 0; index < newBlogs.Length; index++) { context.AddObject(newBlogs[index]); } // loop de deleções for (int index = 0; index < deletedBlogs.Length; index++) { context.DeleteObject(deletedBlogs[index]); } // loop de updates for (int index = 0; index < updatedBlogs.Length; index++) { updatedBlogs[index].Rating++; context.UpdateObject(updatedBlogs[index]); } // Operações CUD executadas num único batch. DataServiceResponse response = context.SaveChanges(SaveChangesOptions.Batch); Arquitetura para Diminuição de Custos Compartilhamento de CPU Compressão: CPU X Tamanho de Memória Número de Transações – Batch Update Resumo A Plataforma Azure provê alta escalabilidade e disponibilidade Existem um conjunto de Patterns de Design e Operação suportados pela Plataforma Azure Aplique os Patterns apresentados de acordo com o que o seu aplicativo necessita. Cuidado com a Falta de Arquitetura ! Cuidado com o Excesso de Arquitetura ! Capacidades da plataforma Windows Azure COS303 | Movendo Aplicativos para a Nuvem COS304 | Projetando Aplicativos para a Escalabilidade - Tirando o melhor da Plataforma Windows Azure SIA305 | Segurança no Desenvolvimento para Windows Azure Application Services Frameworks “Dublin” Security Access Control Connectivity Service Bus COS201 | Plataforma Azure “Geneva” AppFabric - utilizando o Service Bus e o Access Control Services Project “Sydney” DBP308 | Sincronizando dados com a nuvem através do SQL Azure Data Sync e Sync Framework 2.0 COS302 | SQL Azure - Cenários SQL Azure de Uso, Migraçao e Operaçao Data Data Sync Compute COS301 | Desenvolvendo para o Azure Storage Table Storage “Velocity” COS401 | Trace, Log, Provisionamento e Monitoraçao no Azure Blob Storage Queue INT303 | Integrando Moodle com plataforma Microsoft Drive Content Delivery Network © 2008 Microsoft Corporation. Todos os direitos reservados. Microsoft, Windows, Windows Vista e outros nomes de produtos são ou podem ser marcas registradas e/ou marcas comerciais nos EUA e/ou outros países. Este documento é meramente informativo e representa a visão atual da Microsoft Corporation a partir da data desta apresentação. Como a Microsoft deve atender a condições de mercado em constante alteração, este documento não deve ser interpretado como um compromisso por parte da Microsoft, e a Microsoft não pode garantir a precisão de qualquer informação fornecida após a data desta apresentação. A MICROSOFT NÃO DÁ QUALQUER GARANTIA, SEJA ELA EXPRESSA, IMPLÍCITA OU ESTATUTÁRIA, REFERENTE ÀS INFORMAÇÕES DESTA APRESENTAÇÃO. Por favor preencha a avaliação