Windows Azure 5/8 - Recursos adicionais do Windows Azure

32
Recursos adicionais do Windows Azure Vitor Ciaramella Microsoft Brasil http://vic.ms [email protected]

description

 

Transcript of Windows Azure 5/8 - Recursos adicionais do Windows Azure

Page 1: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Recursos adicionais do Windows Azure

Vitor CiaramellaMicrosoft Brasilhttp://[email protected]

Page 2: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Agenda

RolesCiclo de VidaWorker Role

Windows Azure StorageLocal Storage,Table Queue

Rede de Entrega de Conteúdo - CDN

Page 3: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Roles

Page 4: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Ciclo de Vida das RolesTodas roles podem extender o

RoleEntryPointAs roles reportam status via

RoleEnvironmentOnStart

Métodos

Fabric C

alls

Run

OnStop

Eventos

Busy

Status

StatusCheck

Stopping

Ready

Busy

StatusCheck

StatusCheck

Role

Lifetim

e

Requests R

oute

d

Page 5: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Worker Role – Padrões de Uso

Queue Polling WorkerVerifica e consome mensagens de uma fila num loop while(true)Ex: processamento de imagens em background

Listening Worker RoleCria um TcpListener ou um WCF Service HostEx: Roda um servidor SMTP ou serviço WCF

External Process Worker RoleExecuta outro processo no método OnStart ou RunUma Startup Task instala ou executa um processo / aplicaçãoEx: Rodar um servidor web Java (TomCat)

Page 6: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Local Storage

Page 7: Windows Azure 5/8 - Recursos adicionais do Windows Azure

O que é o Local Storage?

Em resumo:“É praticamente o “C:\Temp” que

cada instância de computação possui”

Page 8: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Arquivo de Definição de Serviço<?xml version="1.0" encoding="utf-8"?><ServiceDefinition xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" name="MyService"> <WebRole name="MyService_WebRole" vmsize="Medium"> <InputEndpoints> <InputEndpoint name="HttpIn" port="80" protocol="http" /> </InputEndpoints> <ConfigurationSettings> <Setting name="SimpleConfigSetting" /> </ConfigurationSettings> <LocalResources> <LocalStorage name="localStorageUm" sizeInMB="10" /> <LocalStorage name="localStorageDois" sizeInMB="10" cleanOnRoleRecycle="false" /> </LocalResources> </WebRole></ServiceDefinition>

Page 9: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Usando o Local Storagevar localStorageUm = RoleEnvironment.GetLocalResource("localStorageUm");var nomeArquivo = "MeuArquivo.txt";var caminhoArquivo = Path.Combine(localStorageUm.RootPath, nomeArquivo);

using (var fileStream = File.Open(caminhoArquivo, FileMode.OpenOrCreate, FileAccess.ReadWrite)){ fileStream.Position = fileStream.Length; using (var streamWriter = new StreamWriter(fileStream)) { streamWriter.WriteLine("Nova linha! {0}", DateTime.Now); }}

var localStorageUm = RoleEnvironment.GetLocalResource("localStorageUm");var pastas = @"Pasta1\Pasta2";var nomeArquivo = "MeuArquivo.txt";var caminhoArquivo = Path.Combine(localStorageUm.RootPath, pastas, nomeArquivo);

Ou se você tem sub-pastas:

Ex.: C:\Resources\directory\f335471d5a5845aaa4e66d0359e69066.MyService_WebRole. localStorageUm\Pasta1\Pasta2\MeuArquivo.txt

Page 10: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Pontos de Atenção do Local Storage

Não existe garantia que os dados persistidos no Local Storage serão preservados após a instância ser reiniciada

Encare ele como um diretório temporário

Você deve “reservar” o Local Storage pelo arquivo de definição de serviço (.csdef)Você deve obter o caminho do Local Storage pela chamada:

RoleEnvironment.GetLocalResource(“...”). RootPath

Page 11: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Rede de Distribuição de Conteúdo - CDNContent Delivery Network

Page 12: Windows Azure 5/8 - Recursos adicionais do Windows Azure

O que é o CDN?

Em resumo:“É um sistema de replicação de

blobs em servidores mais próximos do usuário final”

Page 13: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Features do CDN

Mais de 20 locais do mundo com 99.95% de disponibilidadeFácil utilização: basta trocar o domínio da UrlÉ possível faz streaming adaptativo via CDNFaz cache do blob por 72 horas (padrão, mas é possível configurar)

URL de um Blob: http://minhaconta.blob.core.windows.net/meucontainer/minhaimagem.png

URL do mesmo Blob via CDN:http://azXXXX.vo.msecnd.net/meucontainer/minhaimagem.png

Page 14: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Como o CDN funciona

Windows Azure Blob Service

minhaimagem.png

Content Delivery NetworkLocalidade 1

Localidade 2 Localidade 3

GEThttp://azXXXX.vo.msecnd.net/meucontainer/minhaimagem.png

http://minhaconta.blob.core.windows.net/meucontainer/minhaimagem.png

http://minhaconta.blob.core.windows.net/http://azXXXX.vo.msecnd.net/

TTL

minhaimagem.png

Page 15: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Habilitando o CDN

Page 16: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Table Storage

Page 17: Windows Azure 5/8 - Recursos adicionais do Windows Azure

O que é o Table Storage?

Em resumo:“É um sistema de tabelas

distribuido acessado via REST ou SDK”

Page 18: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Features do Table Storage

Acessível via REST (HTTP ou HTTPS)Naturalmente interoperável (clientes .NET, Windows Phone, Java, PHP, iPhone, Android, Ajax, Silverlight, Flash e etc)

Baseado em Entidades (lembra LINQ to SQL)Não permite criação de Chaves Estrangeiras (não é um Banco de Dados relacional)As tabelas não possuem um esquema fixo

Uma tabela pode ter entidades com diferentes propriedades

Possui mecanismo de concorrência e transaçãoProjetado para escalar (mecanismo de particionamento intrinseco)

Page 19: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Estrutura do Table Storage

EntidadeTabelaConta

conta

clientes

Name =…Email = …

Name =…EMailAdd= …

fotos

Photo ID =…Date =…

Photo ID =…Date =…

Page 20: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Usando o Table Storage – Parte 1/5<ConfigurationSettings>

<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />

<Setting name="Conta1" value="DefaultEndpointsProtocol=https;AccountName=techedvc;AccountKey=iqFj1tz09TWhIqfBls++q/cSUNTsklL0Yeh525LQQb8Cy4IvvIpdsfg+/DMcm+/a3NHOkA1hS0InGy2A7iug==" />

</ConfigurationSettings>

Configurando para a connection string ficar no arquivo de configuração

Page 21: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Usando o Table Storage – Parte 2/5public class ProdutoEntity : TableServiceEntity{ public ProdutoEntity(string partitionKey, string rowKey) : base(partitionKey, rowKey) { }

public ProdutoEntity() : base("particao1", Guid.NewGuid().ToString()) { }

public string Nome { get; set; }

public int Quantidade { get; set; }}

Criando a classe da entidade a ser persistida

Page 22: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Usando o Table Storage – Parte 3/5internal class ProdutoContext : TableServiceContext{ public ProdutoContext(string baseAddress, StorageCredentials credentials) : base(baseAddress, credentials) { }

internal const string NomeTabelaProdutos = "TabelaProdutos";

public IQueryable<ProdutoEntity> Produtos { get { return this.CreateQuery<ProdutoEntity>(NomeTabelaProdutos); } }}

Criando a classe de contexto da entidade (parecido com o DbContext do Linq to SQL ou Entity Framework)

Page 23: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Usando o Table Storage – Parte 4/5var storageAccount = CloudStorageAccount.FromConfigurationSetting("conta1");var produtoContext = new ProdutoContext(storageAccount.TableEndpoint.ToString(), storageAccount.Credentials);

storageAccount.CreateCloudTableClient().CreateTableIfNotExist(ProdutoContext.NomeTabelaProdutos);

var novoProduto1 = new ProdutoEntity() { Nome = "Produto 1", Quantidade = 10 };produtoContext.AddObject(ProdutoContext.NomeTabelaProdutos, novoProduto1);

produtoContext.SaveChangesWithRetries();

var query = from produto in produtoContext.Produtos where produto.PartitionKey.Equals("particao1") && produto.Quantidade > 5 select produto;var tableQuery = query.AsTableServiceQuery<ProdutoEntity>();var produtos = tableQuery.Execute().ToList();

• Instanciando a conta de storage (dessa vez via arquivo de configuração)• Instanciando seu contexto da tabela e criando a tabela se necessário• Inserindo uma entidade e fazendo uma consulta

Page 24: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Usando o Table Storage – Parte 5/5var query = from produto in produtoContext.Produtos where produto.PartitionKey.Equals("particao1") && produto.Quantidade > 5 select produto;

var tableQuery = query.AsTableServiceQuery<ProdutoEntity>();var produtos = tableQuery.Execute().ToList();

var produtoParaExcluir = produtos[0];produtoContext.DeleteObject(produtoParaExcluir);

var produtoParaAlterar = produtos[1];produtoParaAlterar.Quantidade++;produtoContext.UpdateObject(produtoParaAlterar); produtoContext.SaveChanges();

• Fazendo uma consulta• Apagando uma entidade• Alterando uma entidade

Page 25: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Pontos de Atenção do Table Storage

Cada entidade pode ter até 255 propriedades e 1 Mb de tamanhoToda entidade tem que ter uma chave de partição e uma chave de linha (formando uma Chave Única indexada)É fundamental escolher uma boa chave de partição para garantir bom desempenho, transação, escalabilidade e balanceamento de carga

Page 26: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Queue Storage

Page 27: Windows Azure 5/8 - Recursos adicionais do Windows Azure

O que é o Queue Storage?

Em resumo:“É um sistema de fila distribuido

acessado via REST ou SDK”

Page 28: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Features do Queue Storage

Acessível via REST (HTTP ou HTTPS)Naturalmente interoperável (clientes .NET, Windows Phone, Java, PHP, iPhone, Android, Ajax, Silverlight, Flash e etc)

Ideal para comunicação e processamento assíncrono entre aplicações e serviços

Page 29: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Estrutura do Queue Storage

MensagemFilaConta

processamentodepedidos

ID clienteID pedidohttp://…

ID clienteID pedidohttp://…

conta

Page 30: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Usando o Queue Storagevar storageAccount = CloudStorageAccount.FromConfigurationSetting("conta1");var clienteDaQueue = storageAccount.CreateCloudQueueClient();var queue = clienteDaQueue.GetQueueReference("minhafila");

queue.CreateIfNotExist();

var novaMensagem1 = new CloudQueueMessage("Mensagem 1");queue.AddMessage(novaMensagem1);

var mensagens = queue.GetMessages(10, TimeSpan.FromMinutes(5)).ToList();

foreach (var mensagem in mensagens){ //processa a mensagem queue.DeleteMessage(mensagem);}

• Instanciando o cliente do QueueStorage• Obtendo a referencia para a sua queue e criando se necessário• Adicionando, buscando e excluindo mensagens

Page 31: Windows Azure 5/8 - Recursos adicionais do Windows Azure

Pontos de Atenção do Queue Storage

Cada mensagem pode ter até 8kb de tamanhoPara tráfegos intensos utilize várias filas e manipule as mensagens em lotesPara garantir a entrega e processamento das mensagens use os passos abaixo

O leitor desenfilera a mensagem e marca-a como invisivel por um período XO leitor apaga a mensagem quando terminar de processá-la

Se o leitor falhar, a mensagem ficará visível para outro leitor processá-la

Page 32: Windows Azure 5/8 - Recursos adicionais do Windows Azure

© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.

The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after

the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.