SETEMBRO, 2010 | SÃO PAULO
Alex Schulz – http://blogs.msdn.com/alexschulzMicrosoft Brasil
Movendo Aplicativos para a Nuvem
CÓDIGO DA SESSÃO: COS303
Melhores Práticas para Desenvolvimento - Azure
4
Objetivo da Sessão
Fornecer um guia e as melhores práticas no desenvolvimento para Windows Azure Roles para auxilia-los no processo de migração de aplicativos para a nuvem
5
Agenda
Melhores práticas para AzureWeb RolesWorker RoleAzure StorageSession StateTeste de escalabilidadeEscalabilidadeGerenciamento do ciclo de vida de aplicações
6
Melhores práticas para Azure
7
Melhores práticas gerais
Role Entry PointPolítica de Re-try e tratamento de ErroExponential Back off
Todas APIs expostas do AzureSQL Azure
Diagnóstico
8
Worker Role Entry PointOnStart()
Chamado pelo Windows Azure p/ inicializar a instância da role.
Configurar DiagnósticoConfigurar retardo na inicialização (p/ 20+ nós) Declarar Event Handlers p/ mudanças de configuraçãoMantenha o mais enxuto possível
Run()Thread principal da execução.Retry / Try-Catch / Insira o código da aplicação aqui
OnStop()Chamado pelo Windows Azure quando a instância da role está parandoDesalocar recursos / Diagnostics.Stop();
9
Worker Entry Point
10
Worker: Política de RetryRetry Loop em todas as chamadas a ServiçosEnvolva todas as chamadas a serviços com Try-CatchCapture exceções específicasTraceListener em todas as exceçõesPolítica de Retry recomendada:
API de DiagnósticoAPI de GerenciamentoAPI de Armazenamento (já existe como parte da API, porém…)SQL Azure
11
Worker: Política de Retry (Código)
12
Exponential Backoff
13
Gerenciamento de DiagnósticoDefinir configurações do Diagnóstico
Selecione o que para monitorarDefinir Taxa de transferência, agendamento e quota de armazenamento
Inicialize o DiagnósticoTry/Catch & Política de Retry Forçar RecycleContadores de Performance
Use variáveis no arquivo de configuraçãoTuning .NET Application Performance: http://msdn.microsoft.com/en-us/library/ff647813.aspx Azure Storage Queue Length% de Utilização de CPU
14
Definição do Diagnóstico
15
Começar a monitorar
16
Configuração do Worker
17
Melhores práticas - Web Roles
18
Cenário 1
Migração de Aplicações ASP.NETAplicação Web: Tamanho 400+ Megabytes1000+ Páginas de Conteúdo10.000 imagens/videos/documentos
19
Cenário 1: Melhores Práticas - Web RoleLimitação no tamanho do pacote p/ implantação em 400 MegabytesExtrair todos os arquivos de mídia do pacote
Mova os arquivos para o Blob storageCrie uma conta de Storage no mesmo Datacenter!Substituir midia não necessita um Re-deploy!Multiplos Web Roles utilizando os mesmos blobsBenefício Adicional -> CDN (Content Delivery Network)
20
Cenário 1 : Web Roles
Alguma idéia sobre esse erro?ASP.NET Diretório temporário Limitado a 100MB
21
Web Role: “Hostable Web Core”http://code.msdn.microsoft.com/hwcworker
Acesso a configurações avançadas do IISRodar multiplas aplicações e diretórios
virtuaisVideo: http://channel9.msdn.com/shows/Cloud+Cover/Cloud-Cover-Episode-11-Drives-and-IIS-Hostable-Worker-Core/
Definir o tamanho do diretório temporário do ASP.NET!!
22
Web Role: Session StateSoluções Atuais
Azure Table StorageSQL Azure
Tabela Melhorada (Session: 64K Max)
Table Storage (Tabela + Blob)
SQL Azure
Nós adicionamos um Worker Role p/ limpar a Session!!!
23
Worker Role
24
Uso do Worker RoleComada de Serviços de NegócioServiços de ProcessamentoTambém é utilizado para:
Engine de Java ServletApache Web ServerAplicações PHPProcessos 32 BitProcessos WCF encapsulados
25
Process Role: Melhores PráticasWorker Roles starting Processes
Política de Retry no Process.Start()Encapsule o processo com Try-CatchBloco Finally ->
Se Exception ThrownVerifique se há processos filho gerados pelo processo principal
Mate todos processos filhosMate o processo principal
Se contador de Retry atingiu o limiteForce o Recycle da Role
26
Process Role: Encapsulamento Defensivo
27
Cenário 2: Melhores Práticas - Worker Role
Utilizando Tomcat Servlet Engine + JRE 1.6Upload um arquivo WAR.
http://code.msdn.microsoft.com/winazuretomcat
28
Process Role: Melhores Práticas
Copiar arquivos do pacote para o HD local na VMTOMCATJRE
Modificar o arquivo de configuração do Tomcat com o caminho e Porta/IP na VM
Criar as variáveis de ambiente para o processoUpload do arquivo WAR no diretório da aplicaçãoIniciar o processo
29
Melhores Práticas - Azure Storage
30
Storage: Melhores PráticasFila
Input / Output ~500 operações/segundo.Melhores Práticas de Mensagens
IserializableIdempotencyPoison Messages
Blob StorageBlock Blob p/ fazer o upload em paralelo
Table StorageUploads em Massa -> O mais próximo possível do DCExclusão em massa -> Exclua a Tabela!
31
Teste de escalabilidade
32
Testando a escalabilidade
33
Escalabilidade
34
Muitas mãos fazem o trabalho mais leve
35
Escale por Serviços Hospedados“Scale unit” pattern
36
Escale por Role no serviço
1 1
222 2
3
“role unit” pattern
37
Gerenciamento do Ciclo de Vida da Aplicação
38
Versionando implantações
20100726 20100727 20100728 20100729
39
Implantação automatizada
Get filesfrom Version
Control
Select Environment(Dev / Test / QA
/ Prod)
Compile Configure Deployment
Package(cspack)
Upload to Blob Storage
Deploy to Azure
(csmanage)
40
Implantação Automatizada
<Target Name="BeforeDropBuild" Condition=" '$(IsDesktopBuild)'!='true' "> <Message Text="use cspack create a package for deployment"/> <Exec Command="$(PackageCommand)" WorkingDirectory="$(SolutionDir)" /> <Message Text="run program to place package in blob storage"/> <Exec Command="$(DeployToBlobStorageCommand) $(SolutionDir)\package.cspkg"/> <Message Text="suspend the current running cloud application"/> <Exec Command="$(SuspendCommand)" ContinueOnError="true"/> <Message Text="delete the currently deployed cloud application"/> <Exec Command="$(DeleteCommand)" ContinueOnError="true"/> <Message Text="create a azure service using the package placed in blob storage"/> <Exec Command="$(CreateCommand)" WorkingDirectory="$(SolutionRoot)"/> <Message Text="run the created application"/> <Exec Command="$(RunCommand)" /></Target>
http://domgreen.com/2009/09/29/deploying-to-the-cloud-as-part-of-your-daily-build/
Processo de build
41
Implantação AutomatizadaEmpacotando
cspack.exe \ServiceDefinition.csdef /role:WebRole1;\CloudService.WebRole /role:WorkerRole1;\CloudService.WorkerRole\bin\
Release;domgreen.CloudService.WorkerRole.dll
/out:CloudService.cspkg
http://domgreen.com/2009/09/29/deploying-to-the-cloud-as-part-of-your-daily-build/
42
Implantação AutomatizadaCriando um implantação utilizando csmanage.exe
csmanage.exe /create-deployment /hosted-service:domgreen /slot:production /name:domgreen
/label:domgreenLabel /package: $
(BlobStorageEndpoint)packages/ $(version)/CloudService.cspkg
/config:$(SolutionDir)\CloudService
\ServiceConfiguration.cscfg
http://domgreen.com/2009/09/29/deploying-to-the-cloud-as-part-of-your-daily-build/
43
Implantação AutomatizadaImplantação no Azure utilizando CmdLets
<Target Name="Deploy“ DependsOnTargets="SetConnectionStrings;Build"><MSBuild Projects="$(AzureProjectPath)\$(AzureProjectName)" Targets="CorePublish" Properties="Configuration=$(BuildType)"/><Exec WorkingDirectory="$(MSBuildProjectDirectory)" Command=“
$(windir)\system32\WindowsPowerShell\v1.0\powershell.exe -f deploy.ps1
$(PackageLocation) $(PackageName) $(ServiceConfigName) $(HostedServiceName)"/>
</Target>
Fonte - Scott Densmore (http://scottdensmore.typepad.com/ )
44
Implantação Automatizadascript deploy.ps1 utilizando CmdLets
if ((Get-PSSnapin | ?{$_.Name -eq "AzureManagementToolsSnapIn"}) -eq $null){ Add-PSSnapin AzureManagementToolsSnapIn}
$hostedService = Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | Get-Deployment -Slot Staging
if ($hostedService.Status -ne $null){ $hostedService | Set-DeploymentStatus 'Suspended' | Get-OperationStatus -WaitToComplete $hostedService | Remove-Deployment | Get-OperationStatus -WaitToComplete}
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | New-Deployment Staging -package $package -configuration $config -label $buildLabel -serviceName $servicename | Get-OperationStatus -WaitToComplete
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | Get-Deployment -Slot Staging | Set-DeploymentStatus 'Running' | Get-OperationStatus -WaitToComplete
Source - Scott Densmore (http://scottdensmore.typepad.com/ )
45
Pagando pela implantação
PagandoSem Pagar
46
ResumoMelhores práticas para Azure
Role Entry PointPolítica de Re-try e tratamento de ErroExponential Back offDiagnóstico
Web RolesWorker Role ProcessAzure StorageSession StateTeste de escalabilidadeEscalabilidadeGerenciamento do ciclo de vida de aplicações
47
Windows Azure Architecture Guide Part 1Link: http://msdn.microsoft.com/en-us/library/ff728592.aspx
Cloud Cover Show: Link: http://channel9.msdn.com/shows/Cloud+Cover/
Windows Azure Platform: Articles from the Trenches Volume One Link: http://geekswithblogs.net/iupdateable/articles/windows-azure-platform-articles-from-the-trenches-volume-1.aspx
CodePlex Link: http://www.codeplex.com/site/search?query=azure&ac=8
MSDN Code GalleryLink: http://code.msdn.microsoft.com/Project/ProjectDirectory.aspx?ProjectSearchText=azure
Recursos
48
Desafio: HelloCloudMinha primeira aplicação na nuvem• Construa e publique sua aplicação no Windows Azure• Mostre sua aplicação no estande Windows Azure• Preencha o formulário• Concorra a 10 assinaturas MSDN Premium
Visite o estande de Windows Azure e saiba
todos os detalhes deste Desafio!
49
50
Conteúdo relacionado
Sessões temáticas
Sessões temáticas
Sessões temáticas
Sessões temáticas
© 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
Top Related