SETEMBRO, 2010 | SÃO PAULO
Otavio Pecego Coelho Arquiteto Chefe Microsoft Brasil Projetando Aplicativos para a Escalabilidade - Tirando o melhor da Plataforma Windows Azure C Ó DIGO DA SESS Ã O: COS304
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
Via Portal Via Visual Studio csmanage /view-deployment /hosted- service:dpe_demos /slot:staging /view- deployment /name:dpe_demos Build automático: 09/09/29/deploying-to-the-cloud-as-part-of- your-daily-build.aspx
Provisionamento via csmanage.exe
Armazenando Estados A A B B A?
Armazenando Estados
P1P2
Armazenando Estados s s s s s s
2) Table (Table Session Size: 64K Max) 1) Table Storage (Table + Blob) 3) SQL Azure
Resumo (serve para Membership, Role, Profile, Session State) CapacidadeAzure TableSQL Azure ElasticidadeSim.Limitado pelos 50GBs PreçoVariável: Transação + Armazenamento Custo fixo ao mês Remoção quando a sessão termina Não. Implementar um WorkerRole para a limpeza DesempenhoMelhor que SQL quando muitos usuários oncorrentes Melhor que SQL quando poucos usuários oncorrentes EscalabilidadeMaior escalabilidadeEscalabilidade via particionamento Referênciashttp://blogs.msdn.com/b/jnak/ archive/2009/11/19/using-the- sample-windows-azure-asp-net- providers.aspx ure/archive/2010/08/04/ 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 UD0UD1UD2UD0UD1UD2
Mudança de Esquema – Upgrade p/ Cliente 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” Partition Key Row Key Version…..Property N PK1RK11 PK2RK21 …… Cliente V1 Cliente V1 Cliente V1 Cliente V1 Cliente V1.5 Cliente V1.5 Nova Property Default Cliente V1.5 Cliente V1.5
Schema Change – Upgrade to V2 Cliente 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 Partition Key Row Key Version…..Property N PK1RK11 PK2RK21 …… Cliente V1 Cliente V1 Cliente V1 Cliente V1 Cliente V1.5 Cliente V1.5 Cliente V1.5 Cliente V1.5 Nova Property Default 2 Valor1 Cliente V2 Cliente V2 Cliente V2 Cliente V2 Default Valor2
Sharding P1P2P3
Sharding
Multi-Inquilino – Isolamento de Dados Cliente ACliente BCliente C CREATE DATABASE ClienteX AS COPY OF [source_server_name.] DBTemplate Open Cliente(X)
Multi-Inquilinos - Personalização TenantID Inquilino int TenantName nvarchar EmployeeId Employee int FirstName nvarchar LastName nvarchar CustomizationID Customization int Value nvarchar TypeID Type int Name nvarchar CLRType nvarchar 1 * * 1 * 1 * *
Multi-Inquilinos - Personalização TenantID Inquilino 1 TenantName Brazil EmployeeId Employee 1 FirstName Luis LastName Lula CustomizationID Customization 1 Value TypeID Type 1 Name CLRType string 1 * * 1 * 1 * * CodPostal
Multi-Inquilinos - Personalização TenantID Inquilino 2 TenantName USA EmployeeId Employee 1 FirstName Barak LastName Obama CustomizationID Customization 2 Value TypeID Type 2 Name CLRType string 1 * * 1 * 1 * * ZipCode Esquema Fixo Se aplica a Todos Inquilinos Customizável Por Inquilino Pode ser p/ ambos inquilinos
Personalização
Cache Ready Only Windows Azure Drives Windows Azure Content Delivery Network ReadWrite: hed/Release/ProjectReleases.aspx?ReleaseId=3551 Futuro: AppFabric Cache
Lease Snapshot Windows Azure Drives
Windows Azure Content Delivery Network Windows Azure Blob Service Windows Azure Blob Service pic1.jpg Content Delivery Network Content Delivery Network Localização do CDN Para habilitar o CDN: Registre CDN via Dev Portal Container público pic1.jpg Não disponível! pic1.jpg TTL
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
Master Cliente Data Worker “Map” M Quantas letras ”e”’encontramos na frase “The quick brown fox jumps over the lazy dog”? M
Master Cliente Result Worker “Reduce ” L 3 letras ”e” encontradas
Web Role Cliente Data Worker Data Aplicação Cliente Job/Task Scheduler Serviço Remoto Fila Req Tabela
MapReduce
Pequenos Cuidados
Boa Prática: Retry
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 Compute Storage Data SQL Azure Data Sync Connectivity Project “Sydney” Security “Geneva” Application Services Frameworks “Dublin”“Velocity” Service Bus Access Control Table StorageBlob StorageQueueDrive Content Delivery Network COS302 | SQL Azure - Cenários de Uso, Migraçao e Operaçao COS401 | Trace, Log, Provisionamento e Monitoraçao no Azure COS201 | Plataforma Azure AppFabric - utilizando o Service Bus e o Access Control Services 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 DBP308 | Sincronizando dados com a nuvem através do SQL Azure Data Sync e Sync Framework 2.0 INT303 | Integrando Moodle com plataforma Microsoft COS301 | Desenvolvendo para o Azure
© 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