SETEMBRO, 2010 | SÃO PAULO
Otavio Pecego CoelhoArquiteto ChefeMicrosoft Brasilhttp://blogs.msdn.com/[email protected]
Projetando Aplicativos para a Escalabilidade - Tirando o melhor da Plataforma Windows Azure
CÓDIGO DA SESSÃO: COS304
Agenda
Provisionamento DinâmicoArmazenamento de EstadosUpgrade de VersõesShardingSaaS: Personalização e Isolamento de DadosCacheDistância Código-StorageFilasContinuaçõesMonitoraçãoGrid ComputingPequenos PatternsPráticas para a Diminuição de Custos
Provisionamento Dinâmico
Provisionamento Dinâmico
Via PortalVia Visual Studiocsmanage /view-deployment /hosted-service:dpe_demos /slot:staging /view-deployment /name:dpe_demosBuild automático: http://blogs.msdn.com/b/domgreen/archive/2009/09/29/deploying-to-the-cloud-as-part-of-your-daily-build.aspx
Provisionamento viacsmanage.exe
Armazenando Estados
A B A?
Armazenando Estados
Armazenando Estados
P1 P2
Armazenando Estados
s ss
Session State
2) Table (Table Session Size: 64K Max)1) Table Storage (Table + Blob)
3) SQL Azure
Resumo (serve para Membership, Role, Profile, Session State)
Capacidade Azure Table SQL AzureElasticidade Sim. Limitado pelos 50GBs Preço Variável:
Transação + Armazenamento
Custo fixo ao mês
Remoção quando a sessão termina
Não. Implementar um WorkerRole para a limpeza
Não. Implementar um WorkerRole para a limpeza
Desempenho Melhor que SQL quando muitos usuários oncorrentes
Melhor que SQL quando poucos usuários oncorrentes
Escalabilidade Maior escalabilidade Escalabilidade via particionamento
Referências http://blogs.msdn.com/b/jnak/archive/2009/11/19/using-the-sample-windows-azure-asp-net-providers.aspx
http://blogs.msdn.com/b/sqlazure/archive/2010/08/04/10046103.aspx
Upgrades de Versões
Utilizando o Upgrade Domain (UD)
Passo 1: Upgrade dos roles que entendem ambas as versõesStep 2: Instale a nova versão
Web Role
Cache Role
UD0
Web Role
Cache Role
UD1
Web Role
Cache Role
UD2
Web Role
Cache Role
UD0
Web Role
Cache Role
UD1
Web Role
Cache Role
UD2
Web Role
Web Role
Web Role
Versões Binárias:
Versão1
Versão 1.5
Versão 2
Versões de Protocolo:
Versão 1
Versão 2
Cache Role
Cache Role
Cache Role
Mudança de Esquema – Upgrade p/ Cliente V1.5
Cliente V1.5Tem a classe com a nova propriedadeSe a entidade está na versão V1
Guarda o valor default na nova propriedadeNão faça upgrade da versão da entidade
Cliente V1Ignora a nova propriedade, uma vez que está usando “IgnoreMissingProperties”
Partition Key
Row Key
Version ….. Property N
PK1 RK1 1
PK2 RK2 1
……. ……. 1……. ……. 1……. ……. 1
ClienteV1
ClienteV1
ClienteV1.5
NovaProperty
Default
ClienteV1.5
UD0
UD1
Schema Change – Upgrade to V2 Cliente
Cliente V2Faz update das linhas p/ V2 (no seu primeiro uso) e começa a colocar valores reais nas novas propriedades
Cliente V1.5Se a entidade está na versão V1
Guarda o valor default na nova propriedade e não muda a versãoSe a entidade está na versão V2
Usa o novo valor e faz o seu update
Partition Key
Row Key
Version ….. Property N
PK1 RK1 1
PK2 RK2 1
……. ……. 1……. ……. 1……. ……. 1
ClienteV1
ClienteV1
ClienteV1.5
ClienteV1.5
NovaProperty
Default2 Valor1
ClienteV2
ClienteV2Default
Valor2
UD0
UD1
Sharding
P1 P2 P3
Sharding
Multi-Inquilino – Isolamento de Dados
Cliente A Cliente B Cliente C
CREATE DATABASE ClienteX AS COPY OF [source_server_name.] DBTemplate
Open Cliente(X) Open Cliente(X) 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 06734-001
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 20500
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 OnlyWindows Azure DrivesWindows Azure Content Delivery Network
ReadWrite:http://cloudcache.codeplex.com/http://code.msdn.microsoft.com/winazurememcached/Release/ProjectReleases.aspx?ReleaseId=3551Futuro: AppFabric Cache
Lease Snapshot
Windows Azure Drives
Windows Azure Content Delivery Network
Windows Azure Blob Service
pic1.jpg
Content Delivery Network
Localização do CDN
Localização do CDN Localização do CDN
Para habilitar o CDN: Registre CDN via Dev Portal Container público
GEThttp://guid01.vo.msecnd.net/images/pic.1jpg
http://sally.blob.core.windows.net/images/pic1.jpg
http://sally.blob.core.windows.net/
http://guid01.vo.msecnd.net/
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
ISerializableIdempotênciaMensagens Envenenadas
OBS: Nem sempre precisamos de Work Roles
Escalando a Vazão das Filas
Junte itens de trabalho em Blobsagrupe vários itens de trabalho num BlobEnfilere uma mensagem que aponta para o Blob
OUUse Múltiplas Filas
Job ManagerResponsável por adicionar e remover filas
WorkersPrecisam 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 falhasAlgoritmo
Quebre o item de trabalho em pedaços menores e repetitivosGuarde o progresso depois de cada passo indexando pelo item de trabalhoEm caso de erro, procure o último passo daquele item de trabalho na tabelaRecomece a partir do ponto de falha
Cuidado c/ erros persistentes
Tabela de Progresso
Estado Intermediário
Persistido
Continuação para itens que rodam durante muito tempo
Tabela de Progresso
Estado Intermediário
Persistido
Na Falha:
Leia o Progressoe recomece doponto que falhou.
Diminuir retrabalho em falhasAlgoritmo
Quebre o item de trabalho em pedaços menores e repetitivosGuarde o progresso depois de cada passo indexando pelo item de trabalhoEm caso de erro, procure o último passo daquele item de trabalho na tabelaRecomece a partir do ponto de falha
Cuidado c/ erros persistentes
Monitoração e WatchDog
Cenário Grid Computing
MasterCliente
Data
Worker
Worker
Worker
“Map”
M<k,v>
M<k,v>
M<k.v>
M<“the quick brown”,”e”>M<“fox jumps over”,”e”>
Quantas letras ”e”’encontramos na frase
“The quick brown fox jumps over the lazy dog”?
M<“the lazy dog”,”e”>
MasterClienteResul
t
Worker
Worker
Worker
“Reduce”
L<k,v>
L<k,v>
L<k,v>
L<”e”,”1”>L<”e”,”1”>L<”e”,”1”>
3 letras ”e” encontradas
Web RoleCliente
Data
Worker
Worker
Worker
Data
Data
DataAplicação ClienteJob/Task Scheduler
Serviço Remoto
Fila
Req
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çõesfor (int index = 0; index < newBlogs.Length; index++) {
context.AddObject(newBlogs[index]);}
// loop de deleçõesfor (int index = 0; index < deletedBlogs.Length; index++) {
context.DeleteObject(deletedBlogs[index]);}
// loop de updatesfor (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 CPUCompressão: CPU X Tamanho de MemóriaNú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 ServicesFrameworks
“Dublin” “Velocity”
Service Bus
Access Control
Table Storage
Blob Storage Queue Drive
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