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
Download

Tirando o melhor da Plataforma Windows Azure