TDC 2011 - Open a Window, see the clouds
Upcoming SlideShare
Loading in...5
×
 

TDC 2011 - Open a Window, see the clouds

on

  • 2,097 views

Sua aplicação esta pronta para decolar na nuvem? O que significa isso? Com o que você precisa se preocupar? Quais frameworks e ferramentas são necessários e quais novos conceitos você deve ...

Sua aplicação esta pronta para decolar na nuvem? O que significa isso? Com o que você precisa se preocupar? Quais frameworks e ferramentas são necessários e quais novos conceitos você deve colocar na sua caixa de ferramentas PHP para estar pronto? Conheça um pouco mais sobre a plataforma Windows Azure e suas funcionalidades, além de descobrir mais quais ferramentas e frameworks estão prontos para se beneficiarem deste novo paradigma.

Statistics

Views

Total Views
2,097
Views on SlideShare
2,096
Embed Views
1

Actions

Likes
0
Downloads
8
Comments
0

1 Embed 1

http://blog.jetbrains.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

TDC 2011 - Open a Window, see the clouds TDC 2011 - Open a Window, see the clouds Presentation Transcript

  • Open a Window, see the clouds Rafael Dohms photo credit: Denis GrzeticSaturday, July 9, 2011
  • Rafael Dohms photo credit: Eli White Evangelista PHP, membro ativo da Comunidade PHP e certificado ZCE. Ele ajudou na fundação de dois Grupos de Usuários de PHP ao longo do tempo e hoje compartilha a coordenação do PHPSP. Desenvolvedor, gamer e apaixonado por código ele também é host do primeiro podcast de PHP do Brasil: PHPSPCast. Atualmente ele trabalha na equipe SWAT do grupo MIH, uma equipe de experts que fornecem conhecimento técnico para o grupo além de trabalhar com P&D buscando novos nichos da internet e tecnologia. Seu papel como Desenvolvedor Sênior é codar, treinar e auxiliar outras empresas e se divertir enquanto faz isso.Saturday, July 9, 2011
  • OLHANDO PELA JANELA •O que é a nuvem? • Por que escolher a nuvem? • Vamos conhecer o Windows Azure • Como isso vai afetar meu código?Saturday, July 9, 2011
  • O QUE É A NUVEM? não é só mais uma palavra no buzzword bingoSaturday, July 9, 2011
  • HOSPEDAGEM COMUM • Conta compatilhada, VPS ou máquina local • Uma máquina, um local • Pagamento mensalSaturday, July 9, 2011
  • Própria HOSPEDAGEM COMUM • Conta compatilhada, VPS ou máquina local • Uma máquina, um local • Pagamento mensalSaturday, July 9, 2011
  • COMPUTAÇÃO NA NUVEM • Menos “apego físico” (virtualização) • Uma ou mais máquinas ou “instancias” • Geograficamente espalhada • Pagamento por hora/recurso • “abstração” de recursos • 3 Sabores: IaaS, PaaS, SaaSSaturday, July 9, 2011
  • Dados Aplicação Software Sistema Operacional Hardware/RedeSaturday, July 9, 2011
  • Armazenamento Dados Compartilhar Publicação Aplicação Desenvolvimento MySQL Software Apache Configuração Sistema Operacional Upgrades Resfriamento Hardware/Rede CabeamentoSaturday, July 9, 2011
  • IaaS a Service” “Infrastructure as “Infraestrutura como Serviço” Dados Aplicação Software Sistema Operacional Hardware/RedeSaturday, July 9, 2011
  • IaaS a Service” “Infrastructure as “Infraestrutura como Serviço” Dados Aplicação Software Sistema Operacional você eles Hardware/RedeSaturday, July 9, 2011
  • PaaS “Platform as a Service” “Plataforma como Serviço” Dados Aplicação Software Sistema Operacional Hardware/RedeSaturday, July 9, 2011
  • PaaS “Platform as a Service” “Plataforma como Serviço” Dados Aplicação você eles Software Sistema Operacional Hardware/RedeSaturday, July 9, 2011
  • SaaS “Software as a Service” “Software como Serviço” Dados Aplicação Software Sistema Operacional Hardware/RedeSaturday, July 9, 2011
  • SaaS “Software as a Service” “Software como Serviço” Dados você eles Aplicação Software Sistema Operacional Hardware/RedeSaturday, July 9, 2011
  • X POR QUE ESCOLHER A NUVEM? Quais são as vantagens de escolher a nuvem?Saturday, July 9, 2011
  • trafego tempo O MODELO CONTA DE LUZSaturday, July 9, 2011
  • trafego tempo O MODELO CONTA DE LUZSaturday, July 9, 2011
  • trafego pico tempo O MODELO CONTA DE LUZSaturday, July 9, 2011
  • trafego pico tempo O MODELO CONTA DE LUZSaturday, July 9, 2011
  • trafego pico tempo O MODELO CONTA DE LUZSaturday, July 9, 2011
  • IaaS Paas SaaS custos gerenciamento do servidor gerenciamento do software publicação da aplicaçãoSaturday, July 9, 2011
  • DISPONIBILIDADESaturday, July 9, 2011
  • DISPONIBILIDADESaturday, July 9, 2011
  • DISPONIBILIDADESaturday, July 9, 2011
  • ESCALABILIDADE Computação sem estado + Armazenamento durávelSaturday, July 9, 2011
  • ESCALABILIDADE Computação sem estado + Armazenamento durávelSaturday, July 9, 2011
  • OLHANDO POR DENTROSaturday, July 9, 2011
  • Windows Azure Fabric Compute StorageSaturday, July 9, 2011
  • Fabric Middleware, usado para desenvolver, testar, publicar e gerenciar sua aplicação. AppFabric developerSaturday, July 9, 2011
  • Fabric Compute StorageSaturday, July 9, 2011
  • Compute Web Role Worker Role VM Role Máquina virtual de Aplicação Web Processamento em Windows Server rodando sobre o plano de fundo 2008 carregada IIS sob demandaSaturday, July 9, 2011
  • Fabric Compute StorageSaturday, July 9, 2011
  • Versão cacheada de CDN qualquer recurso com uma URI Storage Armazenamento de dados Table Storage Blob Storage SQL Azure Queue Troca de Armazenamento Texto e dados Compatível com o mensagens entre o estruturado binários SQL Server Web e o WorkerSaturday, July 9, 2011
  • PRONTO PRA RODAR para Desenvolver e Publicar • Requisitos: • IIS7 e ferramentas • Azure SDK (instala o DevAppFabric, o simulador de azure) • Command Line Tools (linha de comando) • Command line tools for PHPSaturday, July 9, 2011
  • CAIXA DE FERRAMENTAS • Command Line tools for PHP • Cria o pacote da aplicação e roda no emulador, simulando o computacional e o armazenamento. • Azure Tools para Eclipse • Torna a maioria dos processos “next, next finish” e fornece uma IDE completa.Saturday, July 9, 2011
  • Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) Ferramentas de empacotamento (linha de comando ou eclipse) Pacote + Configuração do Serviço Azure Window Azure (AppFabric) SQLAzure StorageSaturday, July 9, 2011
  • Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) PHP Ferramentas de empacotamento (linha de comando ou eclipse) Pacote + Configuração do Serviço Azure Window Azure (AppFabric) SQLAzure StorageSaturday, July 9, 2011
  • Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) PHP Ferramentas de empacotamento (linha de comando ou eclipse) Pacote + Configuração do Serviço Azure Window Azure (AppFabric) SQLAzure StorageSaturday, July 9, 2011
  • Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) php package.php PHP --project="twitter-azure" Ferramentas de empacotamento --target="c:azure-build" de comando ou eclipse) (linha --source="C:twitter-azure" Pacote + Configuração do Serviço --defaultDoc="public/index.php" --phpRuntime="C:Program Files (x86)PHPv5.3" --cleanRebuild --runDevFabric Azure Window Azure (AppFabric) SQLAzure StorageSaturday, July 9, 2011
  • Ambiente do Desenvolvedor Simulador Azure Código (Dev fabric) PHP Ferramentas de empacotamento (linha de comando ou eclipse) Pacote + Configuração do Serviço Azure Window Azure (AppFabric) SQLAzure StorageSaturday, July 9, 2011
  • O BOM • APIs em REST • Armazenamento • Diagnósticos • BD Relacional: SQL Azure • Arquitetura por “Roles”Saturday, July 9, 2011
  • O RUIM • Gerenciamento apenas pelo Windows • Sem Emulador Azure para SO não-Windows • Sem ferramentas de empacotamento para SO não-WindowsSaturday, July 9, 2011
  • COMO ISSO AFETA MEU CÓDIGO? Que ferramentas podemos usar e como devemos desenhar nossas aplicações?Saturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR?Saturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? CódigoSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Escalando a aplicação Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Escalando a Sem Armazenamento aplicação Local Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Armazenamento Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Que tipo? Armazenamento Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Tabela / Blob Que tipo? Armazenamento Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Tabela / Blob Framework ou PHP SDK Que tipo? Armazenamento Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Tabela / Blob Framework ou PHP SDK Que tipo? Banco de Dados Armazenamento Relacional Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • COM O QUE DEVO ME PREOCUPAR? Tabela / Blob Framework ou PHP SDK Que tipo? Banco de Migrar para SQL Azure Dados Armazenamento Relacional Escalando a Sem Armazenamento Compartilhamento Local de sessão aplicação Worker Roles Filas Arquitetura Código PHP rodando no IIS/WindowsSaturday, July 9, 2011
  • FRAMEWORKS PRONTOS PARA O AZURESaturday, July 9, 2011
  • O QUE FAZ ELE SER COMPATÍVEL? Código Roda usando PHP no Windows? Ferramentas Tem wrappers das APIs? Banco de Dados É compatível com MS SQL Server?Saturday, July 9, 2011
  • Ferramentas • Blobs, Tables e Queues (operações CRUD) • Classes auxiliares para transporte HTTP, AuthN/ AuthZ, REST and Gerenciamento de Erros • Gerenciamento, Instrumentação e supporte a logs Banco de Dados • Não testado, mas deve funcionar.Saturday, July 9, 2011
  • Banco de Dados • Drivers de MS-SQL* são compatíveis com SQLAzure * Usando pdo_sql_server, possivelmente o pdo_dblib Powered by Doctrine:Saturday, July 9, 2011
  • • PHP roda normalmente no Azure, qualquer framework vai funcionar. • Outras ferramentas para se comunicar com recursos como: BD, Filas etc... • Estes aqui já foram testados!Saturday, July 9, 2011
  • AZURE PHP SDK • Serviços: • Blob Storage • Table Storage • Queue Storage • Diagnostic Tools • Compatível com PHP 5+Saturday, July 9, 2011
  • SAINDO PELA JANELA Aplicação de teste para ilustrar • Aplicação de teste: “Twitter RT Calculator” • Objetivo: Analisar sues últimos tweets, verificar quais foram re-tuitados e fazer cálculos baseado em palavras e localizações. • Exemplificar a migração: • Banco de dados: MySQL > SQLAzure • Mover o processamento para um Worker Role e usar a FilaSaturday, July 9, 2011
  • SAINDO PELA JANELA Aplicação de teste para ilustrar • Aplicação de teste: “Twitter RT Calculator” • Objetivo: Analisar sues últimos tweets, verificar quais foram re-tuitados e fazer cálculos baseado em palavras e localizações. • Exemplificar a migração: • Banco de dados: MySQL > SQLAzure • Mover o processamento para um Worker Role e usar a FilaSaturday, July 9, 2011
  • Twitter OAuth Segura ai..Saturday, July 9, 2011
  • Twitter OAuth Segura ai..Saturday, July 9, 2011
  • Twitter OAuth Segura ai..Saturday, July 9, 2011
  • Twitter OAuth Segura ai.. MySQLSaturday, July 9, 2011
  • Twitter OAuth Segura ai.. MySQL ResultadosSaturday, July 9, 2011
  • Twitter OAuth Segura ai.. MySQL ResultadosSaturday, July 9, 2011
  • Twitter OAuth Segura ai.. MySQL ResultadosSaturday, July 9, 2011
  • Twitter OAuth Te ligo mais tarde..Saturday, July 9, 2011
  • Twitter OAuth Queue Te ligo mais tarde..Saturday, July 9, 2011
  • Twitter OAuth Queue Te ligo mais tarde.. WorkerSaturday, July 9, 2011
  • Twitter OAuth Queue Te ligo mais tarde.. WorkerSaturday, July 9, 2011
  • Twitter OAuth Queue Te ligo mais tarde.. WorkerSaturday, July 9, 2011
  • Twitter OAuth Queue Te ligo mais tarde.. Worker SQLAzureSaturday, July 9, 2011
  • Twitter OAuth Queue Te ligo mais tarde.. Worker SQLAzureSaturday, July 9, 2011
  • Twitter OAuth Queue Te ligo mais tarde.. Worker Resultados SQLAzureSaturday, July 9, 2011
  • Twitter OAuth Queue Te ligo mais tarde.. Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Worker Resultados SQLAzureSaturday, July 9, 2011
  • USANDO SQLAZURE PDO MSSQL Driver doctrine.dbal.connection_options: driver: pdo_sqlsrv dbname: twitter-sample-app host: pl69qjwy8k.database.windows.net port: 1433 user: rdohmsDemo@pl69qjwy8k password: *password*Saturday, July 9, 2011
  • TODOS PARA A FILA //Add user to our Queue $qItem = new stdClass(); $qItem->twitter_handle = $twitterInfo->screen_name; $qManager = new AzureQueue($this->getApp()->getConfig(azure)); $qManager->addToQueue($qItem);Saturday, July 9, 2011
  • TODOS PARA A FILA //Add user to our Queue $qItem = new stdClass(); $qItem->twitter_handle = $twitterInfo->screen_name; $qManager = new AzureQueue($this->getApp()->getConfig(azure)); $qManager->addToQueue($qItem); $this->client = new Zend_Service_WindowsAzure_Storage_Queue( $qConfig[host], $qConfig[accountName], $qConfig[accountKey] ); $this->queue = $this->getQueueInstance($queueName); __contruct()Saturday, July 9, 2011
  • TODOS PARA A FILA //Add user to our Queue $qItem = new stdClass(); $qItem->twitter_handle = $twitterInfo->screen_name; $qManager = new AzureQueue($this->getApp()->getConfig(azure)); $qManager->addToQueue($qItem); $this->client = new Zend_Service_WindowsAzure_Storage_Queue( $qConfig[host], $qConfig[accountName], $qConfig[accountKey] ); $this->queue = $this->getQueueInstance($queueName); __contruct() public function addToQueue($item) { $this->client->putMessage($this->queue->name, serialize($item)); }Saturday, July 9, 2011
  • PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; } //Retrieve User {... doctrine query for stored twitter handle ...} //Clear Message $this->logAction("Removing message form queue..."); $qManager->deleteMessage($qMessage); //Process User $this->processUser($user); //Warn User $this->sendWarning($user); } catch (Exception $e) { $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Saturday, July 9, 2011
  • PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; } //Retrieve User {... doctrine query for stored twitter handle ...} //Clear Message $this->logAction("Removing message form queue..."); $qManager->deleteMessage($qMessage); //Process User $this->processUser($user); //Warn User $this->sendWarning($user); } catch (Exception $e) { $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Saturday, July 9, 2011
  • PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; function getMessage() public } { $messages = $this->client->getMessages($this->queue->name, 1); //Retrieve User {... doctrine query for stored twitter handle ...} if (count($messages) > 0){ $qMessage = array_shift($messages); //Clear Message $this->logAction("Removing= message form queue..."); $message new stdClass(); $qManager->deleteMessage($qMessage); = $qMessage; $message->qMessage $message->decoded = unserialize($qMessage->messagetext); //Process User $this->processUser($user); return $message; } //Warn User $this->sendWarning($user); return null; } catch (Exception $e) { } $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Saturday, July 9, 2011
  • PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; function getMessage() public } { $messages = $this->client->getMessages($this->queue->name, 1); //Retrieve User {... doctrine query for stored twitter handle ...} if (count($messages) > 0){ $qMessage = array_shift($messages); //Clear Message $this->logAction("Removing= message form queue..."); $message new stdClass(); $qManager->deleteMessage($qMessage); = $qMessage; $message->qMessage $message->decoded = unserialize($qMessage->messagetext); //Process User $this->processUser($user); return $message; } //Warn User $this->sendWarning($user); array( return null; messageid => $messageId, insertiontime => $insertionTime, } catch (Exception $e) { } expirationtime => $expirationTime, $this->logAction("Exception found:" .$e->getMessage popreceipt => $popReceipt, timenextvisible => $timeNextVisible, } dequeuecount => $dequeueCount, messagetext => $messageText $this->logAction("Initiating sleep for next loop."); ); sleep(2); }Saturday, July 9, 2011
  • PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; } //Retrieve User {... doctrine query for stored twitter handle ...} //Clear Message $this->logAction("Removing message form queue..."); $qManager->deleteMessage($qMessage); //Process User $this->processUser($user); //Warn User $this->sendWarning($user); } catch (Exception $e) { $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Saturday, July 9, 2011
  • PRIMEIRO QUE while (true){ try{ ENTRA, PRIMEIRO $this->logAction("Checking for messages..."); //Read Queue QUE SAI $qMessage = $qManager->getMessage(); //If no message, sleep for 3 seconds and try again if ($qMessage === null){ $this->logAction("No pending messages..."); sleep(3); continue; } //Retrieve User {... doctrine query for stored twitter handle ...} //Clear Message $this->logAction("Removing message form queue..."); $qManager->deleteMessage($qMessage); Após 20 segundos, a mensagem //Process User volta para a fila $this->processUser($user); //Warn User $this->sendWarning($user); } catch (Exception $e) { $this->logAction("Exception found:" .$e->getMessage } $this->logAction("Initiating sleep for next loop."); sleep(2); }Saturday, July 9, 2011
  • SAINDO PELA JANELA • Veja todas mudanças: github.com/rdohms/Sample-Azure- App • Compare estes branches: non-cloud-version x cloud-designed-versionSaturday, July 9, 2011
  • FECHANDO A JANELA • Descobrimos o que é a nuvem • Vimos razões por que escolher a nuvem • Conhecemos o Windows Azure e seus recursos • Olhamos rapidamente em como isso afeta nosso códigoSaturday, July 9, 2011
  • LEITURA COMPLEMENTAR... PHP Development in the Cloud ISBN: 9780981034522 Pages: 172 Authors: Ivo Jansch and Vito Chin http://bit.ly/i9Awk0Saturday, July 9, 2011
  • COMECE A BRINCAR.. • Conta de teste gratuita: WindowsAzurePass.com • Procure o pessoal da Microsoft no evento http://azurephp.com http://phpazure.codeplex.com/ http://azurephptools.codeplex.com/ http://www.ben-waine.co.uk/blog/php-azure http://marvelley.com/category/php/php-on-azure/Saturday, July 9, 2011
  • http://slides.doh.ms twitter.com/rdohms http://doh.ms Perguntas? OBRIGADO! rafael@doh.ms Avalie essa palestra: http://joind.in/3572Saturday, July 9, 2011